fix: preserve post-stream error payloads (#67991)

* fix(reply): preserve post-stream error payloads

* fix: preserve post-stream error payloads (#67991)
This commit is contained in:
Ayaan Zaidi
2026-04-17 11:11:37 +05:30
committed by GitHub
parent 7b0e950e09
commit 671579663b
3 changed files with 28 additions and 1 deletions

View File

@@ -210,6 +210,32 @@ describe("buildReplyPayloads media filter integration", () => {
expect(replyPayloads).toHaveLength(0);
});
it("preserves post-stream error payloads when block pipeline streamed successfully", async () => {
const pipeline: Parameters<typeof buildReplyPayloads>[0]["blockReplyPipeline"] = {
didStream: () => true,
isAborted: () => false,
hasSentPayload: () => false,
enqueue: () => {},
flush: async () => {},
stop: () => {},
hasBuffered: () => false,
};
const { replyPayloads } = await buildReplyPayloads({
...baseParams,
blockStreamingEnabled: true,
blockReplyPipeline: pipeline,
replyToMode: "all",
payloads: [{ text: "Agent couldn't generate a response. Please try again.", isError: true }],
});
expect(replyPayloads).toHaveLength(1);
expect(replyPayloads[0]).toMatchObject({
text: "Agent couldn't generate a response. Please try again.",
isError: true,
});
});
it("drops all final payloads during silent turns, including media-only payloads", async () => {
const { replyPayloads } = await buildReplyPayloads({
...baseParams,

View File

@@ -215,7 +215,7 @@ export async function buildReplyPayloads(params: {
: dedupedPayloads;
// Filter out payloads already sent via pipeline or directly during tool flush.
const filteredPayloads = shouldDropFinalPayloads
? []
? mediaFilteredPayloads.filter((payload) => payload.isError)
: params.blockStreamingEnabled
? mediaFilteredPayloads.filter(
(payload) => !params.blockReplyPipeline?.hasSentPayload(payload),