Skip to content

Commit a5f65a6

Browse files
committed
Capture more of OpenRouter's provider specific error details
1 parent a3b258a commit a5f65a6

File tree

1 file changed

+60
-8
lines changed

1 file changed

+60
-8
lines changed

src/api/providers/openrouter.ts

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -256,10 +256,36 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
256256
try {
257257
stream = await this.client.chat.completions.create(completionParams, requestOptions)
258258
} catch (error) {
259-
const errorMessage = error instanceof Error ? error.message : String(error)
260-
const apiError = new ApiProviderError(errorMessage, this.providerName, modelId, "createMessage")
261-
TelemetryService.instance.captureException(apiError)
262-
throw handleOpenAIError(error, this.providerName)
259+
// Check if error has OpenRouter-specific metadata.raw property
260+
const errorObj = error as any
261+
const hasMetadataRaw = errorObj?.metadata?.raw
262+
263+
if (hasMetadataRaw) {
264+
const openRouterError = error as OpenRouterErrorResponse
265+
const rawErrorMessage = openRouterError.metadata?.raw || openRouterError.message
266+
267+
const apiError = Object.assign(
268+
new ApiProviderError(
269+
rawErrorMessage ?? "Unknown error",
270+
this.providerName,
271+
modelId,
272+
"createMessage",
273+
openRouterError.code,
274+
),
275+
{
276+
status: openRouterError.code,
277+
error: { message: openRouterError.message, metadata: openRouterError.metadata },
278+
},
279+
)
280+
281+
TelemetryService.instance.captureException(apiError)
282+
throw handleOpenAIError(error, this.providerName)
283+
} else {
284+
const errorMessage = error instanceof Error ? error.message : String(error)
285+
const apiError = new ApiProviderError(errorMessage, this.providerName, modelId, "createMessage")
286+
TelemetryService.instance.captureException(apiError)
287+
throw handleOpenAIError(error, this.providerName)
288+
}
263289
}
264290

265291
let lastUsage: CompletionUsage | undefined = undefined
@@ -476,10 +502,36 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH
476502
try {
477503
response = await this.client.chat.completions.create(completionParams, requestOptions)
478504
} catch (error) {
479-
const errorMessage = error instanceof Error ? error.message : String(error)
480-
const apiError = new ApiProviderError(errorMessage, this.providerName, modelId, "completePrompt")
481-
TelemetryService.instance.captureException(apiError)
482-
throw handleOpenAIError(error, this.providerName)
505+
// Check if error has OpenRouter-specific metadata.raw property
506+
const errorObj = error as any
507+
const hasMetadataRaw = errorObj?.metadata?.raw
508+
509+
if (hasMetadataRaw) {
510+
const openRouterError = error as OpenRouterErrorResponse
511+
const rawErrorMessage = openRouterError.metadata?.raw || openRouterError.message
512+
513+
const apiError = Object.assign(
514+
new ApiProviderError(
515+
rawErrorMessage ?? "Unknown error",
516+
this.providerName,
517+
modelId,
518+
"completePrompt",
519+
openRouterError.code,
520+
),
521+
{
522+
status: openRouterError.code,
523+
error: { message: openRouterError.message, metadata: openRouterError.metadata },
524+
},
525+
)
526+
527+
TelemetryService.instance.captureException(apiError)
528+
throw handleOpenAIError(error, this.providerName)
529+
} else {
530+
const errorMessage = error instanceof Error ? error.message : String(error)
531+
const apiError = new ApiProviderError(errorMessage, this.providerName, modelId, "completePrompt")
532+
TelemetryService.instance.captureException(apiError)
533+
throw handleOpenAIError(error, this.providerName)
534+
}
483535
}
484536

485537
if ("error" in response) {

0 commit comments

Comments
 (0)