diff --git a/packages/core/src/session/runner/to-llm-message.ts b/packages/core/src/session/runner/to-llm-message.ts index b2b1af5d30f1..27fefd14bb07 100644 --- a/packages/core/src/session/runner/to-llm-message.ts +++ b/packages/core/src/session/runner/to-llm-message.ts @@ -79,7 +79,7 @@ const assistant = (message: SessionMessage.Assistant, model: Model) => { { type: "reasoning", text: item.text, - providerMetadata: reuseProviderMetadata ? item.providerMetadata : undefined, + providerMetadata: item.providerMetadata, }, ] : item.text.length > 0 diff --git a/packages/core/test/session-runner-message.test.ts b/packages/core/test/session-runner-message.test.ts index 5798b665a86a..912ad135e610 100644 --- a/packages/core/test/session-runner-message.test.ts +++ b/packages/core/test/session-runner-message.test.ts @@ -327,7 +327,7 @@ Recent work ]) }) - test("drops provider-native continuation metadata from failed assistant turns", () => { + test("drops provider-native continuation metadata from failed assistant turn tools, but preserves reasoning", () => { const messages = toLLMMessages( [ SessionMessage.Assistant.make({ @@ -370,7 +370,11 @@ Recent work ) expect(messages[0]?.content).toEqual([ - { type: "reasoning", text: "Partial thought", providerMetadata: undefined }, + { + type: "reasoning", + text: "Partial thought", + providerMetadata: { openai: { itemId: "rs_failed", reasoningEncryptedContent: null } }, + }, { type: "tool-call", id: "hosted-failed",