fix: include server error detail in post-stream trackError (#1138)

This commit is contained in:
jnjpng
2026-02-25 14:46:37 -08:00
committed by GitHub
parent d220af7919
commit 57f6a07335

View File

@@ -4991,29 +4991,16 @@ export default function App({
"stream_error",
);
// Track the error in telemetry
telemetry.trackError(
fallbackError
? "FallbackError"
: stopReasonToHandle || "unknown_stop_reason",
fallbackError ||
`Stream stopped with reason: ${stopReasonToHandle}`,
"message_stream",
{
modelId: currentModelId || undefined,
runId: lastRunId ?? undefined,
recentChunks: chunkLog.getEntries(),
},
);
// If we have a client-side stream error with no run_id, show it directly.
// When lastRunId is present, prefer the richer server-side error details below.
if (fallbackError && !lastRunId) {
setNetworkPhase("error");
const errorMsg = lastRunId
? `Stream error: ${fallbackError}\n(run_id: ${lastRunId})`
: `Stream error: ${fallbackError}`;
appendError(errorMsg, true); // Skip telemetry - already tracked above
const errorMsg = `Stream error: ${fallbackError}`;
appendError(errorMsg, {
errorType: "FallbackError",
errorMessage: fallbackError,
context: "message_stream",
});
appendError(ERROR_FEEDBACK_HINT, true);
// Restore dequeued message to input on error
@@ -5031,6 +5018,15 @@ export default function App({
return;
}
// Shared telemetry options for the primary error appendError call.
// The first appendError in each branch carries the telemetry event;
// subsequent hint lines pass `true` to skip duplicate tracking.
const errorTelemetryBase = {
errorType: stopReasonToHandle || "unknown_stop_reason",
context: "message_stream" as const,
runId: lastRunId ?? undefined,
};
// Fetch error details from the run if available (server-side errors)
if (lastRunId) {
try {
@@ -5045,6 +5041,9 @@ export default function App({
detail?: string;
};
const serverErrorDetail =
errorData.detail || errorData.message || null;
// Pass structured error data to our formatter
const errorObject = {
error: {
@@ -5059,7 +5058,12 @@ export default function App({
// Encrypted content errors are self-explanatory (include /clear advice)
// — skip the generic "Something went wrong?" hint
appendError(errorDetails, true); // Skip telemetry - already tracked above
appendError(errorDetails, {
...errorTelemetryBase,
errorMessage:
serverErrorDetail ||
`Stream stopped with reason: ${stopReasonToHandle}`,
});
if (!isEncryptedContentError(errorObject)) {
// Show appropriate error hint based on stop reason
@@ -5075,7 +5079,10 @@ export default function App({
// No error metadata, show generic error with run info
appendError(
`An error occurred during agent execution\n(run_id: ${lastRunId}, stop_reason: ${stopReason})`,
true, // Skip telemetry - already tracked above
{
...errorTelemetryBase,
errorMessage: `Stream stopped with reason: ${stopReasonToHandle}`,
},
);
// Show appropriate error hint based on stop reason
@@ -5088,7 +5095,10 @@ export default function App({
// If we can't fetch error details, show generic error
appendError(
`An error occurred during agent execution\n(run_id: ${lastRunId}, stop_reason: ${stopReason})\n(Unable to fetch additional error details from server)`,
true, // Skip telemetry - already tracked above
{
...errorTelemetryBase,
errorMessage: `Stream stopped with reason: ${stopReasonToHandle}`,
},
);
// Show appropriate error hint based on stop reason
@@ -5115,7 +5125,10 @@ export default function App({
// No run_id available - but this is unusual since errors should have run_ids
appendError(
`An error occurred during agent execution\n(stop_reason: ${stopReason})`,
true, // Skip telemetry - already tracked above
{
...errorTelemetryBase,
errorMessage: `Stream stopped with reason: ${stopReasonToHandle}`,
},
);
// Show appropriate error hint based on stop reason