linshenkx/prompt-optimizer · error · Error
Provider not found: ${selectedProviderId.value}
Error message
Provider not found: ${selectedProviderId.value} What it means
saveConfig in useImageModelManager looks up the currently selected provider by selectedProviderId in the local providers cache; if the ID isn't found it aborts with 'Provider not found'. This is a state-consistency error: the selection points at a provider that isn't (or no longer) in the loaded provider list.
Source
Thrown at packages/ui/src/composables/model/useImageModelManager.ts:610
const isEditing = !!configForm.value.id
applyDefaultsFromModel(isEditing)
}
}
// 保存配置(优化版本:使用缓存的模型对象)
const saveConfig = async () => {
if (!configForm.value.name || !selectedProviderId.value || !selectedModelId.value) {
toast.error(t('image.config.incomplete'))
return
}
isSaving.value = true
try {
const cachedProvider = providers.value.find(p => p.id === selectedProviderId.value)
if (!cachedProvider) {
throw new Error(`Provider not found: ${selectedProviderId.value}`)
}
// 获取模型信息:优先使用缓存,不存在时通过registry构建
let cachedModel = models.value.find(m => m.id === selectedModelId.value)
if (!cachedModel) {
// 对于自定义模型ID,使用adapter的buildDefaultModel方法构建
try {
const adapter = registry.getAdapter(selectedProviderId.value)
cachedModel = adapter.buildDefaultModel(selectedModelId.value)
} catch (error) {
throw new Error(
`Unable to build model ${selectedModelId.value}: ${error instanceof Error ? error.message : String(error)}`,
{ cause: error }
)
}
}
// Manager owns authoritative provider/model metadata resolution.View on GitHub (pinned to 3e677b1d9f)
Solutions
- Reload/refresh the provider list and re-select the provider before saving.
- Validate that selectedProviderId still exists in providers whenever the list changes (watch) and reset selection if not.
- Clear stale persisted selection state on startup.
Example fix
// before
const cachedProvider = providers.value.find(p => p.id === selectedProviderId.value)
if (!cachedProvider) throw new Error(`Provider not found: ...`)
// after — guard before opening save
if (!providers.value.some(p => p.id === selectedProviderId.value)) {
await loadProviders()
selectedProviderId.value = providers.value[0]?.id ?? null
}
// then save Defensive patterns
Strategy: validation
Validate before calling
if (!providers.value.some(p => p.id === selectedProviderId.value)) { await loadProviders(); /* reselect */ } Type guard
const isKnownProvider = (id: string) => providers.value.some(p => p.id === id)
Try / catch
catch (e) { if (e instanceof Error && e.message.startsWith('Provider not found')) { await loadProviders(); return } throw e } Prevention
- Revalidate selection whenever providers reload
- Clear persisted selectedProviderId if it no longer exists
When it happens
Trigger: Saving an image model config after the provider list was reloaded/filtered so the selected provider ID is stale; a race between provider loading and save; or selectedProviderId set to an ID that never existed.
Common situations: User leaves the config dialog open while providers refresh in the background; provider uninstalled/removed while dialog open; restored persisted selectedProviderId referencing a removed provider.
Related errors
- Failed to delete favorite prompt asset version: ${errorMessa
- Failed to get category usage: ${errorMessage}
- modelManager.noModelsAvailable
- [BasicSystemSession] Failed to persist test image
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/c6a56c80cf60e292.
Report an issue: GitHub.