Limit run-time model list waiting (#812)

This commit is contained in:
ekko
2026-05-17 12:51:23 +08:00
committed by GitHub
parent 5e8f8bd4a1
commit 6516d86dfc
5 changed files with 57 additions and 8 deletions
+14 -3
View File
@@ -44,7 +44,7 @@ export const useAppStore = defineStore('app', () => {
const sessionPersistence = ref(true)
const maxTokens = ref(4096)
let modelsLoadPromise: Promise<void> | null = null
let modelsLoadedAt = 0
let modelsLastRequestedAt = 0
async function doUpdate(): Promise<boolean> {
updating.value = true
@@ -134,12 +134,12 @@ export const useAppStore = defineStore('app', () => {
async function loadModels(force = false) {
if (!hasApiKey()) return
if (!force && modelsLoadPromise) return modelsLoadPromise
if (!force && modelGroups.value.length > 0 && Date.now() - modelsLoadedAt < MODELS_CACHE_TTL_MS) return
if (!force && modelsLastRequestedAt > 0 && Date.now() - modelsLastRequestedAt < MODELS_CACHE_TTL_MS) return
modelsLastRequestedAt = Date.now()
modelsLoadPromise = (async () => {
try {
const res = await fetchAvailableModels()
applyAvailableModelsResponse(res)
modelsLoadedAt = Date.now()
} catch {
// ignore
} finally {
@@ -149,6 +149,16 @@ export const useAppStore = defineStore('app', () => {
return modelsLoadPromise
}
async function waitForModelsForRun(timeoutMs = 15000) {
if (!hasApiKey()) return
const pending = modelsLoadPromise || (modelsLastRequestedAt === 0 ? loadModels() : null)
if (!pending) return
await Promise.race([
pending,
new Promise<void>(resolve => setTimeout(resolve, timeoutMs)),
])
}
async function reloadModels() {
return loadModels(true)
}
@@ -300,6 +310,7 @@ export const useAppStore = defineStore('app', () => {
maxTokens,
checkConnection,
loadModels,
waitForModelsForRun,
reloadModels,
applyAvailableModelsResponse,
switchModel,
+1 -1
View File
@@ -910,7 +910,7 @@ export const useChatStore = defineStore('chat', () => {
}
const appStore = useAppStore()
await appStore.loadModels()
await appStore.waitForModelsForRun()
const sessionModel = activeSession.value?.model || appStore.selectedModel
const isBridgeSource = activeSession.value?.source === 'cli'
const sessionProvider = activeSession.value?.provider || appStore.selectedProvider