feat: add telemetry tracking for stream resume attempts (#1144)

Co-authored-by: Letta <noreply@letta.com>
This commit is contained in:
jnjpng
2026-02-25 17:16:01 -08:00
committed by GitHub
parent bb778d65a2
commit bf324ded90

View File

@@ -4,6 +4,7 @@ import type { LettaStreamingResponse } from "@letta-ai/letta-client/resources/ag
import type { StopReasonType } from "@letta-ai/letta-client/resources/runs/runs";
import { getClient } from "../../agent/client";
import { getStreamRequestStartTime } from "../../agent/message";
import { telemetry } from "../../telemetry";
import { debugWarn } from "../../utils/debug";
import { formatDuration, logTiming } from "../../utils/timing";
@@ -359,6 +360,16 @@ export async function drainStreamWithResume(
const originalApprovals = result.approvals;
const originalApproval = result.approval;
// Log that we're attempting a stream resume
telemetry.trackError(
"stream_resume_attempt",
originalFallbackError || "Stream error (no client-side detail)",
"stream_resume",
{
runId: result.lastRunId,
},
);
try {
const client = await getClient();
@@ -409,10 +420,45 @@ export async function drainStreamWithResume(
result.approvals = originalApprovals;
result.approval = originalApproval;
}
} catch (_e) {
} catch (resumeError) {
// Resume failed - stick with the error stop_reason
// Restore the original stream error for display
result.fallbackError = originalFallbackError;
const resumeErrorMsg =
resumeError instanceof Error
? resumeError.message
: String(resumeError);
telemetry.trackError(
"stream_resume_failed",
resumeErrorMsg,
"stream_resume",
{
runId: result.lastRunId ?? undefined,
},
);
}
}
// Log when stream errored but resume was NOT attempted, with reasons why
if (result.stopReason === "error") {
const skipReasons: string[] = [];
if (!result.lastRunId) skipReasons.push("no_run_id");
if (result.lastSeqId === null || result.lastSeqId === undefined)
skipReasons.push("no_seq_id");
if (!abortSignal) skipReasons.push("no_abort_signal");
if (abortSignal?.aborted) skipReasons.push("user_aborted");
// Only log if we actually skipped for a reason (i.e., we didn't enter the resume branch above)
if (skipReasons.length > 0) {
telemetry.trackError(
"stream_resume_skipped",
`${result.fallbackError || "Stream error (no client-side detail)"} [skip: ${skipReasons.join(", ")}]`,
"stream_resume",
{
runId: result.lastRunId ?? undefined,
},
);
}
}