janhq/jan · error · Error
Provider must have base_url configured
Error message
Provider must have base_url configured
What it means
Thrown by TauriProviderService.fetchModelsFromProvider (providers/tauri.ts:149) when the provider object has no base_url. The method needs base_url to build the `${base_url}/models` GET request via fetchTauri. Identical message to catalog error [147] but on the provider-service code path used to populate the model list in Settings.
Source
Thrown at web-app/src/services/providers/tauri.ts:149
return runtimeProviders.concat(builtinProviders as ModelProvider[])
} catch (error: unknown) {
console.error('Error getting providers in Tauri:', error)
return []
}
}
async deleteProviderKeys(providerName: string): Promise<void> {
try {
await invoke('delete_provider_keys', { provider: providerName })
} catch (error) {
console.error(`Failed to delete keyring keys for ${providerName}:`, error)
}
}
async fetchModelsFromProvider(provider: ModelProvider): Promise<string[]> {
if (!provider.base_url) {
throw new Error('Provider must have base_url configured')
}
try {
const keyChain = providerRemoteApiKeyChain(provider)
const keyAttempts: (string | undefined)[] =
keyChain.length > 0 ? keyChain : [undefined]
let lastStatus = 0
let lastStatusText = ''
for (let ki = 0; ki < keyAttempts.length; ki++) {
const key = keyAttempts[ki]
const headers: Record<string, string> = {
'Content-Type': 'application/json',
}
if (
provider.base_url.includes('localhost:') ||View on GitHub (pinned to fad3f12a14)
Solutions
- Open Settings > Model Providers and set the base URL for the provider (e.g. https://api.openai.com/v1).
- Validate base_url in the provider form before allowing 'fetch models'.
- Pre-fill known providers' base URLs from a defaults table on creation.
Example fix
// before
if (!provider.base_url) {
throw new Error('Provider must have base_url configured')
}
// after: guard at the UI; disable the 'Fetch Models' button
const canFetch = Boolean(provider.base_url?.trim())
// <Button disabled={!canFetch} onClick={() => fetchModelsFromProvider(provider)}>Fetch Models</Button> Defensive patterns
Strategy: validation
Validate before calling
function hasBaseUrl(p: ModelProvider): boolean {
return typeof p.base_url === 'string' && p.base_url.trim().length > 0
}
// before fetchModelsFromProvider:
if (!hasBaseUrl(provider)) {
throw new Error('Set a base URL for this provider in Settings.')
} Type guard
function providerHasBaseUrl(p: unknown): p is ModelProvider & { base_url: string } {
return typeof p === 'object' && p !== null && typeof (p as ModelProvider).base_url === 'string' && (p as ModelProvider).base_url!.trim().length > 0
} Try / catch
try {
return await providerService.fetchModelsFromProvider(provider)
} catch (e) {
if (e instanceof Error && e.message === 'Provider must have base_url configured') {
promptForBaseUrl(provider.provider)
return []
}
throw e
} Prevention
- Require base_url in the provider form before save.
- Disable the 'Fetch Models' button when base_url is empty.
- Pre-fill known providers' base URLs from a defaults table.
- Normalize base_url (trim, strip trailing slash) on save.
When it happens
Trigger: fetchModelsFromProvider is called for a provider with base_url === undefined/null/''. Common when a custom OpenAI-compatible provider was saved without an endpoint, or the field was cleared.
Common situations: Custom provider created with only an API key; base_url cleared by the user but provider retained; config deserialized from an older schema without base_url; user expects the provider's default endpoint to be inferred but it is not.
Related errors
- Provider must have base_url configured
- Models endpoint not found for ${provider.provider}. Check th
- No API key configured for ${provider.provider}. Add one in S
- Catalog not supported for ${provider.provider}
- Failed to fetch models from ${provider.provider}: ${result.s
AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12).
Data as JSON: /api/errors/1d16bbafeea33f04.
Report an issue: GitHub.