Skip to content

Commit f31560a

Browse files
committed
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
1 parent b433d1f commit f31560a

File tree

3 files changed

+98
-6
lines changed

3 files changed

+98
-6
lines changed

src/core/webview/webviewMessageHandler.ts

Lines changed: 92 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2266,21 +2266,108 @@ export const webviewMessageHandler = async (
22662266
}
22672267
if (manager.isFeatureEnabled && manager.isFeatureConfigured) {
22682268
if (!manager.isInitialized) {
2269-
await manager.initialize(provider.contextProxy)
2269+
try {
2270+
await manager.initialize(provider.contextProxy)
2271+
} catch (initError) {
2272+
// Initialization failed - send detailed error to user
2273+
const errorMessage = initError instanceof Error ? initError.message : String(initError)
2274+
provider.log(`Code index initialization failed: ${errorMessage}`)
2275+
2276+
// Send error status to webview with user-friendly message
2277+
provider.postMessageToWebview({
2278+
type: "indexingStatusUpdate",
2279+
values: {
2280+
systemStatus: "Error",
2281+
message: errorMessage,
2282+
processedItems: 0,
2283+
totalItems: 0,
2284+
currentItemUnit: "items",
2285+
},
2286+
})
2287+
2288+
// Show error notification to user
2289+
vscode.window.showErrorMessage(
2290+
t("embeddings:validation.initializationFailed", { error: errorMessage }) ||
2291+
`Code indexing initialization failed: ${errorMessage}`,
2292+
)
2293+
return
2294+
}
22702295
}
22712296

22722297
// startIndexing now handles error recovery internally
22732298
manager.startIndexing()
22742299

22752300
// If startIndexing recovered from error, we need to reinitialize
22762301
if (!manager.isInitialized) {
2277-
await manager.initialize(provider.contextProxy)
2278-
// Try starting again after initialization
2279-
manager.startIndexing()
2302+
try {
2303+
await manager.initialize(provider.contextProxy)
2304+
// Try starting again after initialization
2305+
manager.startIndexing()
2306+
} catch (reinitError) {
2307+
// Re-initialization failed - send detailed error to user
2308+
const errorMessage =
2309+
reinitError instanceof Error ? reinitError.message : String(reinitError)
2310+
provider.log(`Code index re-initialization failed: ${errorMessage}`)
2311+
2312+
// Send error status to webview
2313+
provider.postMessageToWebview({
2314+
type: "indexingStatusUpdate",
2315+
values: {
2316+
systemStatus: "Error",
2317+
message: errorMessage,
2318+
processedItems: 0,
2319+
totalItems: 0,
2320+
currentItemUnit: "items",
2321+
},
2322+
})
2323+
2324+
// Show error notification to user
2325+
vscode.window.showErrorMessage(
2326+
t("embeddings:validation.initializationFailed", { error: errorMessage }) ||
2327+
`Code indexing initialization failed: ${errorMessage}`,
2328+
)
2329+
}
22802330
}
2331+
} else {
2332+
// Feature is not enabled or not configured
2333+
const message = !manager.isFeatureEnabled
2334+
? t("embeddings:validation.featureDisabled") || "Code indexing is disabled"
2335+
: t("embeddings:validation.notConfigured") || "Code indexing is not properly configured"
2336+
2337+
provider.postMessageToWebview({
2338+
type: "indexingStatusUpdate",
2339+
values: {
2340+
systemStatus: "Error",
2341+
message: message,
2342+
processedItems: 0,
2343+
totalItems: 0,
2344+
currentItemUnit: "items",
2345+
},
2346+
})
2347+
2348+
vscode.window.showErrorMessage(message)
22812349
}
22822350
} catch (error) {
2283-
provider.log(`Error starting indexing: ${error instanceof Error ? error.message : String(error)}`)
2351+
const errorMessage = error instanceof Error ? error.message : String(error)
2352+
provider.log(`Error starting indexing: ${errorMessage}`)
2353+
2354+
// Send error status to webview
2355+
provider.postMessageToWebview({
2356+
type: "indexingStatusUpdate",
2357+
values: {
2358+
systemStatus: "Error",
2359+
message: errorMessage,
2360+
processedItems: 0,
2361+
totalItems: 0,
2362+
currentItemUnit: "items",
2363+
},
2364+
})
2365+
2366+
// Show error notification to user
2367+
vscode.window.showErrorMessage(
2368+
t("embeddings:validation.startIndexingFailed", { error: errorMessage }) ||
2369+
`Failed to start indexing: ${errorMessage}`,
2370+
)
22842371
}
22852372
break
22862373
}

src/i18n/locales/en/embeddings.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@
3939
"invalidModel": "Invalid model. Please check your model configuration.",
4040
"invalidResponse": "Invalid response from embedder service. Please check your configuration.",
4141
"apiKeyRequired": "API key is required for this embedder",
42-
"baseUrlRequired": "Base URL is required for this embedder"
42+
"baseUrlRequired": "Base URL is required for this embedder",
43+
"initializationFailed": "Code indexing initialization failed: {{error}}",
44+
"featureDisabled": "Code indexing is disabled. Please enable it in the settings.",
45+
"notConfigured": "Code indexing is not properly configured. Please check your settings.",
46+
"startIndexingFailed": "Failed to start indexing: {{error}}"
4347
},
4448
"serviceFactory": {
4549
"openAiConfigMissing": "OpenAI configuration missing for embedder creation",

src/shared/embeddingModels.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export const EMBEDDING_MODEL_PROFILES: EmbeddingModelProfiles = {
4040
"text-embedding-3-small": { dimension: 1536, scoreThreshold: 0.4 },
4141
"text-embedding-3-large": { dimension: 3072, scoreThreshold: 0.4 },
4242
"text-embedding-ada-002": { dimension: 1536, scoreThreshold: 0.4 },
43+
"text-embedding-v4": { dimension: 1536, scoreThreshold: 0.4 }, // Added support for text-embedding-v4
4344
"nomic-embed-code": {
4445
dimension: 3584,
4546
scoreThreshold: 0.15,

0 commit comments

Comments
 (0)