From 64ef85159db9918e1d6a955963a8ca7fa9636527 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Thu, 27 Aug 2026 23:01:33 -0400 Subject: [PATCH] fix(core): preserve assistant text metadata (#45650) --- .changeset/assistant-text-metadata.md | 5 +++++ packages/core/src/aisdk.ts | 2 +- packages/core/test/aisdk.test.ts | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .changeset/assistant-text-metadata.md diff --git a/.changeset/assistant-text-metadata.md b/.changeset/assistant-text-metadata.md new file mode 100644 index 00000000000..32645284b39 --- /dev/null +++ b/.changeset/assistant-text-metadata.md @@ -0,0 +1,5 @@ +--- +"@opencode-ai/core": patch +--- + +Preserve provider metadata on assistant text when replaying conversation history through AI SDK providers. diff --git a/packages/core/src/aisdk.ts b/packages/core/src/aisdk.ts index 96fe7d7a248..d44763d85ba 100644 --- a/packages/core/src/aisdk.ts +++ b/packages/core/src/aisdk.ts @@ -514,7 +514,7 @@ function userPart(part: ContentPart): UserContent { function assistantPart(part: ContentPart): AssistantContent { switch (part.type) { case "text": - return [{ type: "text", text: part.text }] + return [{ type: "text", text: part.text, providerOptions: metadataProviderOptions(part.providerMetadata) }] case "media": return [{ type: "file", mediaType: part.mediaType, data: part.data, filename: part.filename }] case "reasoning": diff --git a/packages/core/test/aisdk.test.ts b/packages/core/test/aisdk.test.ts index b9775603804..41c35530552 100644 --- a/packages/core/test/aisdk.test.ts +++ b/packages/core/test/aisdk.test.ts @@ -326,6 +326,8 @@ it.effect("projects replay metadata onto AI SDK prompt parts", () => model: resolved, messages: [ Message.assistant([ + { type: "text", text: "Answer", providerMetadata: { anthropic: { cacheControl: { type: "ephemeral" } } } }, + { type: "text", text: " without metadata" }, { type: "reasoning", text: "Think", providerMetadata: { anthropic: { signature: "signed" } } }, { type: "tool-call", @@ -344,6 +346,16 @@ it.effect("projects replay metadata onto AI SDK prompt parts", () => { role: "assistant", content: [ + { + type: "text", + text: "Answer", + providerOptions: { anthropic: { cacheControl: { type: "ephemeral" } } }, + }, + { + type: "text", + text: " without metadata", + providerOptions: undefined, + }, { type: "reasoning", text: "Think",