diff --git a/apps/sim/lib/copilot/request/lifecycle/finalize.ts b/apps/sim/lib/copilot/request/lifecycle/finalize.ts index 319a5717f8..56c34efaf1 100644 --- a/apps/sim/lib/copilot/request/lifecycle/finalize.ts +++ b/apps/sim/lib/copilot/request/lifecycle/finalize.ts @@ -64,7 +64,7 @@ export async function finalizeStream( span.setStatus({ code: SpanStatusCode.OK }) } } catch (error) { - span.recordException(error instanceof Error ? error : new Error(String(error))) + span.recordException(toError(error)) span.setStatus({ code: SpanStatusCode.ERROR, message: 'finalize threw' }) throw error } finally { diff --git a/apps/sim/lib/copilot/request/otel.ts b/apps/sim/lib/copilot/request/otel.ts index 57d21d571f..5ceb78c8a7 100644 --- a/apps/sim/lib/copilot/request/otel.ts +++ b/apps/sim/lib/copilot/request/otel.ts @@ -10,6 +10,7 @@ import { TraceFlags, trace, } from '@opentelemetry/api' +import { toError } from '@sim/utils/errors' import { RequestTraceV1Outcome } from '@/lib/copilot/generated/request-trace-v1' import { CopilotBranchKind, @@ -92,12 +93,12 @@ export function isActionableErrorStatus(code: number): boolean { // client disconnect, internal timeout, uncategorized AbortError — // becomes a real error that the dashboards will surface. export function markSpanForError(span: Span, error: unknown): void { - const asError = error instanceof Error ? error : new Error(String(error)) + const asError = toError(error) span.recordException(asError) if (!isExplicitUserStopError(error)) { span.setStatus({ code: SpanStatusCode.ERROR, - message: error instanceof Error ? error.message : String(error), + message: asError.message, }) } }