fix(agents): ignore stale assistant error messages

This commit is contained in:
Altay
2026-03-11 20:56:09 +03:00
parent 0226788bb0
commit 40fa5f7498
4 changed files with 29 additions and 5 deletions

View File

@@ -101,6 +101,18 @@ describe("buildEmbeddedRunPayloads", () => {
expect(payloads[0]?.isError).toBe(true);
});
it("does not emit a synthetic billing error for successful turns with stale errorMessage", () => {
const payloads = buildPayloads({
lastAssistant: makeAssistant({
stopReason: "end_turn",
errorMessage: "insufficient credits for embedding model",
content: [{ type: "text", text: "Handle payment required errors in your API." }],
}),
});
expectSinglePayloadText(payloads, "Handle payment required errors in your API.");
});
it("suppresses raw error JSON even when errorMessage is missing", () => {
const payloads = buildPayloads({
assistantTexts: [errorJsonPretty],

View File

@@ -128,16 +128,17 @@ export function buildEmbeddedRunPayloads(params: {
const useMarkdown = params.toolResultFormat === "markdown";
const suppressAssistantArtifacts = params.didSendDeterministicApprovalPrompt === true;
const lastAssistantErrored = params.lastAssistant?.stopReason === "error";
const errorText = params.lastAssistant
? suppressAssistantArtifacts
? undefined
: formatAssistantErrorText(params.lastAssistant, {
const errorText =
params.lastAssistant && lastAssistantErrored
? suppressAssistantArtifacts
? undefined
: formatAssistantErrorText(params.lastAssistant, {
cfg: params.config,
sessionKey: params.sessionKey,
provider: params.provider,
model: params.model,
})
: undefined;
: undefined;
const rawErrorMessage = lastAssistantErrored
? params.lastAssistant?.errorMessage?.trim() || undefined
: undefined;

View File

@@ -139,6 +139,7 @@ describe("extractAssistantText", () => {
const msg = makeAssistantMessage({
role: "assistant",
errorMessage: "insufficient credits for embedding model",
stopReason: "end_turn",
content: [{ type: "text", text: responseText }],
timestamp: Date.now(),
});

View File

@@ -199,6 +199,16 @@ describe("extractAssistantText", () => {
"Firebase downgraded us to the free Spark plan. Check whether billing should be re-enabled.",
);
});
it("preserves successful turns with stale background errorMessage", () => {
const message = {
role: "assistant",
stopReason: "end_turn",
errorMessage: "insufficient credits for embedding model",
content: [{ type: "text", text: "Handle payment required errors in your API." }],
};
expect(extractAssistantText(message)).toBe("Handle payment required errors in your API.");
});
});
describe("resolveAnnounceTarget", () => {