From 1ea828ac4aebfea48bcb078c67d7a7ed217b3da1 Mon Sep 17 00:00:00 2001 From: Wei Zhang Date: Sat, 24 Jan 2026 15:14:35 +0800 Subject: [PATCH] fix(common): drop OpenAI itemId from provider options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove transient itemId fields from provider options to keep stored messages compatible with schema validation. 🤖 Generated with [Pochi](https://getpochi.com) Co-Authored-By: Pochi --- packages/common/src/base/formatters.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/common/src/base/formatters.ts b/packages/common/src/base/formatters.ts index d863e537a5..181f4e3846 100644 --- a/packages/common/src/base/formatters.ts +++ b/packages/common/src/base/formatters.ts @@ -243,6 +243,24 @@ function removeEmptyTextParts(messages: UIMessage[]) { }); } +function removeOpenAIItemId(messages: UIMessage[]) { + return messages.map((message) => { + message.parts = message.parts.map((part) => { + if ("providerOptions" in part && part.providerOptions) { + for (const options of Object.values(part.providerOptions)) { + if (options && typeof options === "object" && "itemId" in options) { + // biome-ignore lint/performance/noDelete: need delete to make zod happy + delete (options as { itemId?: unknown }).itemId; + } + } + } + return part; + }); + + return message; + }); +} + function refineDetectedNewPromblems(messages: UIMessage[]) { const isWriteFileResultToolPart = ( part: UIMessage["parts"][number], @@ -348,6 +366,7 @@ type FormatOp = (messages: UIMessage[]) => UIMessage[]; const LLMFormatOps: FormatOp[] = [ removeEmptyTextParts, removeEmptyMessages, + removeOpenAIItemId, refineDetectedNewPromblems, extractCompactMessages, removeMessagesWithoutTextOrToolCall, @@ -361,6 +380,7 @@ const LLMFormatOps: FormatOp[] = [ const UIFormatOps = [ removeEmptyTextParts, removeEmptyMessages, + removeOpenAIItemId, refineDetectedNewPromblems, resolvePendingToolCalls, removeSystemReminder, @@ -370,6 +390,7 @@ const ShareUIFormatOps = [...UIFormatOps, resolvePendingToolCallsForShareUI]; const StorageFormatOps = [ removeEmptyTextParts, removeEmptyMessages, + removeOpenAIItemId, refineDetectedNewPromblems, removeInvalidCharForStorage, removeToolCallArgumentTransientData,