ForcePilot/web/src/composables/useModelStatus.js
2026-04-27 02:24:52 +08:00

57 lines
1.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { reactive } from 'vue'
import { modelProviderApi } from '@/apis/system_api'
/**
* 模型状态检查 composable供 Chat/Embedding/Rerank 模型选择器共用。
*/
export function useModelStatus() {
const statusMap = reactive({})
const getStatusIcon = (key) => {
const status = statusMap[key]
if (!status) return '○'
if (status.status === 'available') return '✓'
if (status.status === 'unavailable') return '✗'
if (status.status === 'error') return '⚠'
return '○'
}
const getStatusClass = (key) => {
return statusMap[key]?.status || ''
}
const getStatusTooltip = (key) => {
const status = statusMap[key]
if (!status) return '状态未知'
const text =
{ available: '可用', unavailable: '不可用', error: '错误' }[status.status] || '未知'
return `${text}: ${status.message || '无详细信息'}`
}
const checkV2Status = async (spec) => {
try {
const response = await modelProviderApi.getModelStatusBySpec(spec)
if (response.data) {
statusMap[spec] = response.data
}
} catch {
statusMap[spec] = { spec, status: 'error', message: '检查失败' }
}
}
const checkV2Statuses = async (models) => {
for (const model of models || []) {
await checkV2Status(model.spec)
}
}
return {
statusMap,
getStatusIcon,
getStatusClass,
getStatusTooltip,
checkV2Status,
checkV2Statuses
}
}