Skip to content

Commit f2b6af5

Browse files
committed
web: actually log some open router errors
1 parent 2b3bf3f commit f2b6af5

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

web/src/app/api/v1/chat/completions/_post.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,28 @@ export async function postChatCompletions(params: {
329329
if (error instanceof OpenRouterError) {
330330
openrouterError = error
331331
}
332+
333+
// Log detailed error information for debugging
334+
const errorDetails = openrouterError?.toJSON()
332335
logger.error(
333-
{ error: getErrorObject(error), body, openrouterError: openrouterError?.toJSON() },
334-
'Error with OpenRouter request',
336+
{
337+
error: getErrorObject(error),
338+
userId,
339+
agentId,
340+
runId: runIdFromBody,
341+
model: (body as any)?.model,
342+
streaming: !!bodyStream,
343+
hasByokKey: !!openrouterApiKey,
344+
messageCount: Array.isArray((body as any)?.messages) ? (body as any).messages.length : 0,
345+
openrouterStatusCode: openrouterError?.statusCode,
346+
openrouterStatusText: openrouterError?.statusText,
347+
openrouterErrorCode: errorDetails?.error?.code,
348+
openrouterErrorType: errorDetails?.error?.type,
349+
openrouterErrorMessage: errorDetails?.error?.message,
350+
openrouterProviderName: errorDetails?.error?.metadata?.provider_name,
351+
openrouterProviderRaw: errorDetails?.error?.metadata?.raw,
352+
},
353+
'OpenRouter request failed',
335354
)
336355
trackEvent({
337356
event: AnalyticsEvent.CHAT_COMPLETIONS_ERROR,

web/src/llm-api/openrouter.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,8 @@ async function handleResponse({
466466
logger: Logger
467467
insertMessage: InsertMessageBigqueryFn
468468
}): Promise<StreamState> {
469-
state = await handleStreamChunk({ data, state, logger })
469+
const model = 'model' in data ? data.model : undefined
470+
state = await handleStreamChunk({ data, state, logger, userId, agentId, model })
470471

471472
if ('error' in data || !data.usage) {
472473
// Stream not finished
@@ -512,13 +513,41 @@ async function handleStreamChunk({
512513
data,
513514
state,
514515
logger,
516+
userId,
517+
agentId,
518+
model,
515519
}: {
516520
data: OpenRouterStreamChatCompletionChunk
517521
state: StreamState
518522
logger: Logger
523+
userId: string
524+
agentId: string
525+
model: string | undefined
519526
}): Promise<StreamState> {
520527
if ('error' in data) {
521-
logger.warn({ streamChunk: data }, 'Received error from OpenRouter')
528+
// Log detailed error information for stream errors (e.g., Forbidden from Anthropic)
529+
const errorData = data.error as {
530+
code?: string | number | null
531+
type?: string | null
532+
message: string
533+
param?: unknown
534+
metadata?: { raw?: string; provider_name?: string }
535+
}
536+
logger.error(
537+
{
538+
userId,
539+
agentId,
540+
model,
541+
errorCode: errorData.code,
542+
errorType: errorData.type,
543+
errorMessage: errorData.message,
544+
errorParam: errorData.param,
545+
// Provider-specific error details (e.g., from Anthropic via OpenRouter)
546+
providerName: errorData.metadata?.provider_name,
547+
providerRawError: errorData.metadata?.raw,
548+
},
549+
'Received error chunk in OpenRouter stream',
550+
)
522551
return state
523552
}
524553

0 commit comments

Comments
 (0)