Skip to content

Commit eeb0094

Browse files
committed
fix: improve error handling for codebase search embeddings
- Remove generic error wrapper in OpenAI embedder that was hiding actual API errors - Remove generic error wrapper in OpenAI-compatible embedder for consistency - Allow detailed error messages from _embedBatchWithRetries to propagate to users - This helps diagnose why embeddings fail during search but work during indexing Fixes #4404
1 parent 395f55b commit eeb0094

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

src/services/code-index/embedders/openai-compatible.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,10 @@ export class OpenAICompatibleEmbedder implements IEmbedder {
8181
}
8282

8383
if (currentBatch.length > 0) {
84-
try {
85-
const batchResult = await this._embedBatchWithRetries(currentBatch, modelToUse)
86-
allEmbeddings.push(...batchResult.embeddings)
87-
usage.promptTokens += batchResult.usage.promptTokens
88-
usage.totalTokens += batchResult.usage.totalTokens
89-
} catch (error) {
90-
console.error("Failed to process batch:", error)
91-
throw new Error("Failed to create embeddings: batch processing error")
92-
}
84+
const batchResult = await this._embedBatchWithRetries(currentBatch, modelToUse)
85+
allEmbeddings.push(...batchResult.embeddings)
86+
usage.promptTokens += batchResult.usage.promptTokens
87+
usage.totalTokens += batchResult.usage.totalTokens
9388
}
9489
}
9590

src/services/code-index/embedders/openai.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class OpenAiEmbedder extends OpenAiNativeHandler implements IEmbedder {
2222
*/
2323
constructor(options: ApiHandlerOptions & { openAiEmbeddingModelId?: string }) {
2424
super(options)
25-
const apiKey = this.options.openAiNativeApiKey ?? "not-provided"
25+
const apiKey = this.options.openAiNativeApiKey || ""
2626
this.embeddingsClient = new OpenAI({ apiKey })
2727
this.defaultModelId = options.openAiEmbeddingModelId || "text-embedding-3-small"
2828
}
@@ -71,15 +71,10 @@ export class OpenAiEmbedder extends OpenAiNativeHandler implements IEmbedder {
7171
}
7272

7373
if (currentBatch.length > 0) {
74-
try {
75-
const batchResult = await this._embedBatchWithRetries(currentBatch, modelToUse)
76-
allEmbeddings.push(...batchResult.embeddings)
77-
usage.promptTokens += batchResult.usage.promptTokens
78-
usage.totalTokens += batchResult.usage.totalTokens
79-
} catch (error) {
80-
console.error("Failed to process batch:", error)
81-
throw new Error("Failed to create embeddings: batch processing error")
82-
}
74+
const batchResult = await this._embedBatchWithRetries(currentBatch, modelToUse)
75+
allEmbeddings.push(...batchResult.embeddings)
76+
usage.promptTokens += batchResult.usage.promptTokens
77+
usage.totalTokens += batchResult.usage.totalTokens
8378
}
8479
}
8580

@@ -116,10 +111,31 @@ export class OpenAiEmbedder extends OpenAiNativeHandler implements IEmbedder {
116111

117112
if (isRateLimitError && hasMoreAttempts) {
118113
const delayMs = INITIAL_DELAY_MS * Math.pow(2, attempts)
114+
console.warn(`Rate limit hit, retrying in ${delayMs}ms (attempt ${attempts + 1}/${MAX_RETRIES})`)
119115
await new Promise((resolve) => setTimeout(resolve, delayMs))
120116
continue
121117
}
122118

119+
// Log the error for debugging
120+
console.error(`OpenAI embedder error (attempt ${attempts + 1}/${MAX_RETRIES}):`, error)
121+
122+
if (!hasMoreAttempts) {
123+
// Provide more context in the error message
124+
const errorMessage = error?.message || error?.toString() || "Unknown error"
125+
const statusCode = error?.status || error?.response?.status
126+
if (statusCode === 401) {
127+
throw new Error(
128+
`Failed to create embeddings: Authentication failed. Please check your OpenAI API key.`,
129+
)
130+
} else if (statusCode) {
131+
throw new Error(
132+
`Failed to create embeddings after ${MAX_RETRIES} attempts: HTTP ${statusCode} - ${errorMessage}`,
133+
)
134+
} else {
135+
throw new Error(`Failed to create embeddings after ${MAX_RETRIES} attempts: ${errorMessage}`)
136+
}
137+
}
138+
123139
throw error
124140
}
125141
}

0 commit comments

Comments
 (0)