fix(ai): preserve provider thinking level in frames

This commit is contained in:
Armin Ronacher 2026-09-03 14:26:49 +02:00
parent 8b5899dce2
commit 0fdec07ba3
2 changed files with 11 additions and 0 deletions

View file

@ -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",

View file

@ -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();