ForcePilot/web/src/composables/useModelStatus.js

57 lines
1.4 KiB
JavaScript
Raw Normal View History

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 '状态未知'
2026-04-27 02:24:52 +08:00
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)
}
}
2026-04-27 02:24:52 +08:00
return {
statusMap,
getStatusIcon,
getStatusClass,
getStatusTooltip,
checkV2Status,
checkV2Statuses
}
}