Skip to content

Commit 040f798

Browse files
shantanu patilclaude
authored andcommitted
Fix empty provider causing wiki generation failure
When navigating to a repo URL without a ?provider= param, the provider state initialized as '' (empty string). The async fetch to resolve the default provider from /api/models/config hadn't completed before wiki generation started, sending provider='' to the backend. Pydantic accepted the empty string (not triggering the "google" default), causing "Configuration for provider '' not found" errors. Fixes: - Backend: fall back to configured default_provider when provider is empty - Frontend: synchronously resolve provider before starting generation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent cc12c30 commit 040f798

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

api/websocket_wiki.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ async def handle_websocket_chat(websocket: WebSocket):
138138
request_data = await websocket.receive_json()
139139
request = ChatCompletionRequest(**request_data)
140140

141+
# Fall back to default provider if none specified
142+
if not request.provider:
143+
from api.config import configs as app_configs
144+
request.provider = app_configs.get("default_provider", "google")
145+
logger.info(f"No provider specified, falling back to default: {request.provider}")
146+
if not request.model:
147+
request.model = None # Let get_model_config pick the default
148+
141149
# Check if request contains very large input
142150
input_too_large = False
143151
if request.messages and len(request.messages) > 0:

src/hooks/useWikiGeneration.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,24 @@ Remember:
435435
return;
436436
}
437437

438+
// Wait for provider to be resolved if it's still empty (async fetch in useModelSelection)
439+
let resolvedProvider = selectedProviderState;
440+
if (!resolvedProvider) {
441+
console.log('Provider not yet resolved, fetching default...');
442+
try {
443+
const res = await fetch('/api/models/config');
444+
if (res.ok) {
445+
const data = await res.json();
446+
resolvedProvider = data.defaultProvider || 'google';
447+
} else {
448+
resolvedProvider = 'google';
449+
}
450+
} catch {
451+
resolvedProvider = 'google';
452+
}
453+
console.log(`Provider resolved to: ${resolvedProvider}`);
454+
}
455+
438456
try {
439457
setStructureRequestInProgress(true);
440458
setGenerationPhase('planning');
@@ -580,7 +598,7 @@ IMPORTANT:
580598
}]
581599
};
582600

583-
addTokensToRequestBody(requestBody, currentToken, effectiveRepoInfo.type, selectedProviderState, selectedModelState, isCustomSelectedModelState, customSelectedModelState, language, modelExcludedDirs, modelExcludedFiles, modelIncludedDirs, modelIncludedFiles);
601+
addTokensToRequestBody(requestBody, currentToken, effectiveRepoInfo.type, resolvedProvider, selectedModelState, isCustomSelectedModelState, customSelectedModelState, language, modelExcludedDirs, modelExcludedFiles, modelIncludedDirs, modelIncludedFiles);
584602

585603
let responseText = '';
586604

0 commit comments

Comments
 (0)