From 0fdec07ba3973f9bd008cbfffb0eaa10ace8c5b3 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 3 Sep 2026 14:26:49 +0200 Subject: [PATCH] fix(ai): preserve provider thinking level in frames --- packages/ai/src/utils/assistant-message-frame.ts | 1 + packages/ai/test/assistant-message-frame.test.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/packages/ai/src/utils/assistant-message-frame.ts b/packages/ai/src/utils/assistant-message-frame.ts index f314a9f1d..65e23ede5 100644 --- a/packages/ai/src/utils/assistant-message-frame.ts +++ b/packages/ai/src/utils/assistant-message-frame.ts @@ -83,6 +83,7 @@ function cloneStartMessage(message: AssistantMessage): AssistantMessage { model: message.model, ...(message.responseModel === undefined ? {} : { responseModel: message.responseModel }), ...(message.responseId === undefined ? {} : { responseId: message.responseId }), + ...(message.providerThinkingLevel === undefined ? {} : { providerThinkingLevel: message.providerThinkingLevel }), ...(message.diagnostics === undefined ? {} : { diagnostics: structuredClone(message.diagnostics) }), usage: structuredClone(message.usage), stopReason: "pending", diff --git a/packages/ai/test/assistant-message-frame.test.ts b/packages/ai/test/assistant-message-frame.test.ts index 0c0564e23..ab7f5f9ac 100644 --- a/packages/ai/test/assistant-message-frame.test.ts +++ b/packages/ai/test/assistant-message-frame.test.ts @@ -61,6 +61,16 @@ describe("assistant message frames", () => { ]); }); + it("preserves provider thinking level from the stream start", () => { + const partial = seed(); + partial.providerThinkingLevel = "high"; + const encoder = new AssistantMessageFrameEncoder(); + const start = frame(encoder, { type: "start", partial }); + + expect(start).toMatchObject({ type: "start", partial: { providerThinkingLevel: "high" } }); + expect(reduceAssistantMessageFrames([start])?.providerThinkingLevel).toBe("high"); + }); + it("preserves initial and final thinking metadata, including redaction", () => { const partial = seed(); const encoder = new AssistantMessageFrameEncoder();