Files
BiliNote/BillNote_frontend/src/store/modelStore/index.ts
JefferyHcool 9b298d3094 feat(model): 增加模型管理和测试功能
- 新增模型删除功能
- 实现模型测试连接功能
- 优化模型选择器组件
- 更新模型相关API和数据库操作
2025-05-26 23:16:19 +08:00

116 lines
3.4 KiB
TypeScript

import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
import { fetchModels, addModel, fetchEnableModels, fetchEnableModelById, deleteModelById } from '@/services/model.ts'
interface IModel {
id: string
created: number
object: string
owned_by: string
permission: string
root: string
}
interface ModelStore {
models: IModel[]
modelList: []
loading: boolean
selectedModel: string
loadModels: (providerId: string) => Promise<void>
loadEnabledModels: () => Promise<void>
loadModelsById : (providerId: string) => Promise<void>
addNewModel: (providerId: string, modelId: string) => Promise<void>
setSelectedModel: (modelId: string) => void
deleteModel: (modelId: number) => Promise<void>
clearModels: () => void
}
export const useModelStore = create<ModelStore>()(
devtools(set => ({
models: [],
loading: false,
selectedModel: '',
modelList: [],
loadEnabledModels: async () => {
try {
set({ loading: true })
const res = await fetchEnableModels()
if (res.data.code === 0 && res.data.data.length > 0) {
set({ modelList: res.data.data })
} else {
set({ modelList: [] })
console.error('模型列表加载失败')
}
} catch (error) {
set({ modelList: [] })
console.error('加载模型出错', error)
}
},
deleteModel: async (modelId: number) => {
await deleteModelById( modelId)
},
// 加载模型列表
loadModels: async (providerId: string) => {
try {
set({ loading: true })
const res = await fetchModels(providerId)
if (res.data.code === 0 && res.data.data.models.data.length > 0) {
set({ models: res.data.data.models.data })
} else if (res.data.code === 0 && res.data.data.models.length > 0) {
set({ models: res.data.data.models.data })
} else {
set({ models: [] })
console.error('模型列表加载失败')
}
} catch (error) {
set({ models: [] })
console.error('加载模型出错', error)
} finally {
set({ loading: false })
}
},
loadModelsById: async (providerId: string)=>{
const models = await fetchEnableModelById(providerId)
if (models.data.code === 0) {
console.log('模型列表加载成功:', models.data)
return models.data.data
}
},
// 新增模型
addNewModel: async (providerId: string, modelId: string) => {
try {
const res = await addModel({ provider_id: providerId, model_name: modelId })
if (res.code === 0) {
console.log('新增模型成功:', modelId)
// ✅ 新增成功以后,前端直接追加一条到 models 列表
set(state => ({
models: [
...state.models,
{
id: modelId,
created: Date.now(),
object: 'model',
owned_by: '',
permission: '',
root: '',
},
],
}))
} else {
console.error('新增模型失败')
}
} catch (error) {
console.error('添加模型出错', error)
}
},
// 设置选中的模型
setSelectedModel: modelId => set({ selectedModel: modelId }),
// 清空
clearModels: () => set({ models: [], selectedModel: '' }),
}))
)