fix: improve code index error handling and add text-embedding-v4 support

- Enhanced error handling in startIndexing to show detailed validation errors
- Added support for text-embedding-v4 model in OpenAI Compatible provider
- Added user-friendly error messages with proper translations
- Fixes #7356
This commit is contained in:
Roo Code 2025-08-23 16:17:57 +00:00
parent b433d1f7a2
commit f31560a743
3 changed files with 98 additions and 6 deletions

View file

@ -2266,7 +2266,32 @@ export const webviewMessageHandler = async (
}
if (manager.isFeatureEnabled && manager.isFeatureConfigured) {
if (!manager.isInitialized) {
await manager.initialize(provider.contextProxy)
try {
await manager.initialize(provider.contextProxy)
} catch (initError) {
// Initialization failed - send detailed error to user
const errorMessage = initError instanceof Error ? initError.message : String(initError)
provider.log(`Code index initialization failed: ${errorMessage}`)
// Send error status to webview with user-friendly message
provider.postMessageToWebview({
type: "indexingStatusUpdate",
values: {
systemStatus: "Error",
message: errorMessage,
processedItems: 0,
totalItems: 0,
currentItemUnit: "items",
},
})
// Show error notification to user
vscode.window.showErrorMessage(
t("embeddings:validation.initializationFailed", { error: errorMessage }) ||
`Code indexing initialization failed: ${errorMessage}`,
)
return
}
}
// startIndexing now handles error recovery internally
@ -2274,13 +2299,75 @@ export const webviewMessageHandler = async (
// If startIndexing recovered from error, we need to reinitialize
if (!manager.isInitialized) {
await manager.initialize(provider.contextProxy)
// Try starting again after initialization
manager.startIndexing()
try {
await manager.initialize(provider.contextProxy)
// Try starting again after initialization
manager.startIndexing()
} catch (reinitError) {
// Re-initialization failed - send detailed error to user
const errorMessage =
reinitError instanceof Error ? reinitError.message : String(reinitError)
provider.log(`Code index re-initialization failed: ${errorMessage}`)
// Send error status to webview
provider.postMessageToWebview({
type: "indexingStatusUpdate",
values: {
systemStatus: "Error",
message: errorMessage,
processedItems: 0,
totalItems: 0,
currentItemUnit: "items",
},
})
// Show error notification to user
vscode.window.showErrorMessage(
t("embeddings:validation.initializationFailed", { error: errorMessage }) ||
`Code indexing initialization failed: ${errorMessage}`,
)
}
}
} else {
// Feature is not enabled or not configured
const message = !manager.isFeatureEnabled
? t("embeddings:validation.featureDisabled") || "Code indexing is disabled"
: t("embeddings:validation.notConfigured") || "Code indexing is not properly configured"
provider.postMessageToWebview({
type: "indexingStatusUpdate",
values: {
systemStatus: "Error",
message: message,
processedItems: 0,
totalItems: 0,
currentItemUnit: "items",
},
})
vscode.window.showErrorMessage(message)
}
} catch (error) {
provider.log(`Error starting indexing: ${error instanceof Error ? error.message : String(error)}`)
const errorMessage = error instanceof Error ? error.message : String(error)
provider.log(`Error starting indexing: ${errorMessage}`)
// Send error status to webview
provider.postMessageToWebview({
type: "indexingStatusUpdate",
values: {
systemStatus: "Error",
message: errorMessage,
processedItems: 0,
totalItems: 0,
currentItemUnit: "items",
},
})
// Show error notification to user
vscode.window.showErrorMessage(
t("embeddings:validation.startIndexingFailed", { error: errorMessage }) ||
`Failed to start indexing: ${errorMessage}`,
)
}
break
}

View file

@ -39,7 +39,11 @@
"invalidModel": "Invalid model. Please check your model configuration.",
"invalidResponse": "Invalid response from embedder service. Please check your configuration.",
"apiKeyRequired": "API key is required for this embedder",
"baseUrlRequired": "Base URL is required for this embedder"
"baseUrlRequired": "Base URL is required for this embedder",
"initializationFailed": "Code indexing initialization failed: {{error}}",
"featureDisabled": "Code indexing is disabled. Please enable it in the settings.",
"notConfigured": "Code indexing is not properly configured. Please check your settings.",
"startIndexingFailed": "Failed to start indexing: {{error}}"
},
"serviceFactory": {
"openAiConfigMissing": "OpenAI configuration missing for embedder creation",

View file

@ -40,6 +40,7 @@ export const EMBEDDING_MODEL_PROFILES: EmbeddingModelProfiles = {
"text-embedding-3-small": { dimension: 1536, scoreThreshold: 0.4 },
"text-embedding-3-large": { dimension: 3072, scoreThreshold: 0.4 },
"text-embedding-ada-002": { dimension: 1536, scoreThreshold: 0.4 },
"text-embedding-v4": { dimension: 1536, scoreThreshold: 0.4 }, // Added support for text-embedding-v4
"nomic-embed-code": {
dimension: 3584,
scoreThreshold: 0.15,