|
9 | 9 | import { getDefaultModelId, getModelQueryPrefix } from "../../../shared/embeddingModels" |
10 | 10 | import { t } from "../../../i18n" |
11 | 11 | import { withValidationErrorHandling, HttpError, formatEmbeddingError } from "../shared/validation-helpers" |
| 12 | +import { TelemetryEventName } from "@roo-code/types" |
| 13 | +import { TelemetryService } from "@roo-code/telemetry" |
12 | 14 |
|
13 | 15 | interface EmbeddingItem { |
14 | 16 | embedding: string | number[] |
@@ -284,6 +286,16 @@ export class OpenAICompatibleEmbedder implements IEmbedder { |
284 | 286 | }, |
285 | 287 | } |
286 | 288 | } catch (error) { |
| 289 | + // Capture telemetry before error is reformatted |
| 290 | + TelemetryService.instance.captureEvent(TelemetryEventName.CODE_INDEX_ERROR, { |
| 291 | + error: error instanceof Error ? error.message : String(error), |
| 292 | + stack: error instanceof Error ? error.stack : undefined, |
| 293 | + location: "OpenAICompatibleEmbedder:_embedBatchWithRetries", |
| 294 | + model: model, |
| 295 | + attempt: attempts + 1, |
| 296 | + baseUrl: this.baseUrl, |
| 297 | + }) |
| 298 | + |
287 | 299 | const hasMoreAttempts = attempts < MAX_RETRIES - 1 |
288 | 300 |
|
289 | 301 | // Check if it's a rate limit error |
@@ -318,33 +330,45 @@ export class OpenAICompatibleEmbedder implements IEmbedder { |
318 | 330 | */ |
319 | 331 | async validateConfiguration(): Promise<{ valid: boolean; error?: string }> { |
320 | 332 | return withValidationErrorHandling(async () => { |
321 | | - // Test with a minimal embedding request |
322 | | - const testTexts = ["test"] |
323 | | - const modelToUse = this.defaultModelId |
324 | | - |
325 | | - let response: OpenAIEmbeddingResponse |
326 | | - |
327 | | - if (this.isFullUrl) { |
328 | | - // Test direct HTTP request for full endpoint URLs |
329 | | - response = await this.makeDirectEmbeddingRequest(this.baseUrl, testTexts, modelToUse) |
330 | | - } else { |
331 | | - // Test using OpenAI SDK for base URLs |
332 | | - response = (await this.embeddingsClient.embeddings.create({ |
333 | | - input: testTexts, |
334 | | - model: modelToUse, |
335 | | - encoding_format: "base64", |
336 | | - })) as OpenAIEmbeddingResponse |
337 | | - } |
| 333 | + try { |
| 334 | + // Test with a minimal embedding request |
| 335 | + const testTexts = ["test"] |
| 336 | + const modelToUse = this.defaultModelId |
338 | 337 |
|
339 | | - // Check if we got a valid response |
340 | | - if (!response?.data || response.data.length === 0) { |
341 | | - return { |
342 | | - valid: false, |
343 | | - error: "embeddings:validation.invalidResponse", |
| 338 | + let response: OpenAIEmbeddingResponse |
| 339 | + |
| 340 | + if (this.isFullUrl) { |
| 341 | + // Test direct HTTP request for full endpoint URLs |
| 342 | + response = await this.makeDirectEmbeddingRequest(this.baseUrl, testTexts, modelToUse) |
| 343 | + } else { |
| 344 | + // Test using OpenAI SDK for base URLs |
| 345 | + response = (await this.embeddingsClient.embeddings.create({ |
| 346 | + input: testTexts, |
| 347 | + model: modelToUse, |
| 348 | + encoding_format: "base64", |
| 349 | + })) as OpenAIEmbeddingResponse |
344 | 350 | } |
345 | | - } |
346 | 351 |
|
347 | | - return { valid: true } |
| 352 | + // Check if we got a valid response |
| 353 | + if (!response?.data || response.data.length === 0) { |
| 354 | + return { |
| 355 | + valid: false, |
| 356 | + error: "embeddings:validation.invalidResponse", |
| 357 | + } |
| 358 | + } |
| 359 | + |
| 360 | + return { valid: true } |
| 361 | + } catch (error) { |
| 362 | + // Capture telemetry for validation errors |
| 363 | + TelemetryService.instance.captureEvent(TelemetryEventName.CODE_INDEX_ERROR, { |
| 364 | + error: error instanceof Error ? error.message : String(error), |
| 365 | + stack: error instanceof Error ? error.stack : undefined, |
| 366 | + location: "OpenAICompatibleEmbedder:validateConfiguration", |
| 367 | + baseUrl: this.baseUrl, |
| 368 | + modelToUse: this.defaultModelId, |
| 369 | + }) |
| 370 | + throw error |
| 371 | + } |
348 | 372 | }, "openai-compatible") |
349 | 373 | } |
350 | 374 |
|
|
0 commit comments