fix(agents): prevent false billing error replacing valid response text (#40616)

Merged via squash.

Prepared head SHA: 05179362b4
Co-authored-by: ingyukoh <6015960+ingyukoh@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
This commit is contained in:
ingyukoh
2026-03-12 04:00:11 +09:00
committed by GitHub
parent 78b9384aa7
commit 2a18cbb110
7 changed files with 54 additions and 14 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: "stop",
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, {
cfg: params.config,
sessionKey: params.sessionKey,
provider: params.provider,
model: params.model,
})
: undefined;
const errorText =
params.lastAssistant && lastAssistantErrored
? suppressAssistantArtifacts
? undefined
: formatAssistantErrorText(params.lastAssistant, {
cfg: params.config,
sessionKey: params.sessionKey,
provider: params.provider,
model: params.model,
})
: undefined;
const rawErrorMessage = lastAssistantErrored
? params.lastAssistant?.errorMessage?.trim() || undefined
: undefined;