





















@@ -296,6 +296,54 @@ describe("buildReplyPayloads media filter integration", () => {
296296expect(replyPayloads).toHaveLength(0);
297297});
298298299+it("keeps unsent final media after block pipeline streamed the text", async () => {
300+const pipeline: Parameters<typeof buildReplyPayloads>[0]["blockReplyPipeline"] = {
301+didStream: () => true,
302+isAborted: () => false,
303+hasSentPayload: (payload) => payload.text === "response" && !payload.mediaUrl,
304+enqueue: () => {},
305+flush: async () => {},
306+stop: () => {},
307+hasBuffered: () => false,
308+getSentMediaUrls: () => [],
309+};
310+311+const { replyPayloads } = await buildReplyPayloads({
312+ ...baseParams,
313+blockStreamingEnabled: true,
314+blockReplyPipeline: pipeline,
315+payloads: [{ text: "response", mediaUrl: "/tmp/generated.png" }],
316+});
317+318+expect(replyPayloads).toHaveLength(1);
319+expect(replyPayloads[0]).toMatchObject({
320+mediaUrl: "/tmp/generated.png",
321+text: undefined,
322+});
323+});
324+325+it("drops already-sent final media after block pipeline streamed successfully", async () => {
326+const pipeline: Parameters<typeof buildReplyPayloads>[0]["blockReplyPipeline"] = {
327+didStream: () => true,
328+isAborted: () => false,
329+hasSentPayload: (payload) => payload.text === "response" && !payload.mediaUrl,
330+enqueue: () => {},
331+flush: async () => {},
332+stop: () => {},
333+hasBuffered: () => false,
334+getSentMediaUrls: () => ["/tmp/generated.png"],
335+};
336+337+const { replyPayloads } = await buildReplyPayloads({
338+ ...baseParams,
339+blockStreamingEnabled: true,
340+blockReplyPipeline: pipeline,
341+payloads: [{ text: "response", mediaUrl: "/tmp/generated.png" }],
342+});
343+344+expect(replyPayloads).toHaveLength(0);
345+});
346+299347it("preserves post-stream error payloads when block pipeline streamed successfully", async () => {
300348const pipeline: Parameters<typeof buildReplyPayloads>[0]["blockReplyPipeline"] = {
301349didStream: () => true,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。