57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
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
|
||
}
|
||
}
|