2026-04-13 12:15:16 +08:00
|
|
|
import { defineStore } from 'pinia'
|
|
|
|
|
import { ref, computed } from 'vue'
|
2026-04-16 08:38:18 +08:00
|
|
|
import * as systemApi from '@/api/hermes/system'
|
|
|
|
|
import type { AvailableModelGroup, CustomProvider } from '@/api/hermes/system'
|
2026-04-13 12:15:16 +08:00
|
|
|
import { useAppStore } from './app'
|
|
|
|
|
|
|
|
|
|
export const useModelsStore = defineStore('models', () => {
|
|
|
|
|
const providers = ref<AvailableModelGroup[]>([])
|
2026-04-19 20:59:25 +08:00
|
|
|
const allProviders = ref<AvailableModelGroup[]>([])
|
2026-04-13 12:15:16 +08:00
|
|
|
const defaultModel = ref('')
|
|
|
|
|
const loading = ref(false)
|
|
|
|
|
|
|
|
|
|
const customProviders = computed(() =>
|
|
|
|
|
providers.value.filter(g => g.provider.startsWith('custom:')),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const builtinProviders = computed(() =>
|
|
|
|
|
providers.value.filter(g => !g.provider.startsWith('custom:')),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const allModels = computed(() =>
|
|
|
|
|
providers.value.flatMap(g =>
|
|
|
|
|
g.models.map(m => ({
|
|
|
|
|
id: m,
|
|
|
|
|
provider: g.provider,
|
|
|
|
|
label: g.label,
|
|
|
|
|
base_url: g.base_url,
|
|
|
|
|
isDefault: m === defaultModel.value,
|
|
|
|
|
})),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
async function fetchProviders() {
|
|
|
|
|
loading.value = true
|
|
|
|
|
try {
|
|
|
|
|
const res = await systemApi.fetchAvailableModels()
|
|
|
|
|
providers.value = res.groups
|
2026-04-19 20:59:25 +08:00
|
|
|
allProviders.value = res.allProviders
|
2026-04-13 12:15:16 +08:00
|
|
|
defaultModel.value = res.default
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error('Failed to fetch providers:', err)
|
|
|
|
|
} finally {
|
|
|
|
|
loading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function setDefaultModel(modelId: string, provider: string) {
|
|
|
|
|
await systemApi.updateDefaultModel({ default: modelId, provider })
|
|
|
|
|
defaultModel.value = modelId
|
|
|
|
|
const appStore = useAppStore()
|
|
|
|
|
appStore.loadModels()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function addProvider(data: CustomProvider) {
|
|
|
|
|
await systemApi.addCustomProvider(data)
|
|
|
|
|
await fetchProviders()
|
|
|
|
|
const appStore = useAppStore()
|
|
|
|
|
appStore.loadModels()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function removeProvider(name: string) {
|
|
|
|
|
await systemApi.removeCustomProvider(name)
|
|
|
|
|
await fetchProviders()
|
|
|
|
|
const appStore = useAppStore()
|
|
|
|
|
appStore.loadModels()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
providers,
|
2026-04-19 20:59:25 +08:00
|
|
|
allProviders,
|
2026-04-13 12:15:16 +08:00
|
|
|
defaultModel,
|
|
|
|
|
loading,
|
|
|
|
|
customProviders,
|
|
|
|
|
builtinProviders,
|
|
|
|
|
allModels,
|
|
|
|
|
fetchProviders,
|
|
|
|
|
setDefaultModel,
|
|
|
|
|
addProvider,
|
|
|
|
|
removeProvider,
|
|
|
|
|
}
|
|
|
|
|
})
|