summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/provider/transform.ts16
-rw-r--r--packages/opencode/test/provider/transform.test.ts76
2 files changed, 88 insertions, 4 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index cdb65c79a..4566fc1de 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -24,15 +24,23 @@ export namespace ProviderTransform {
// Strip openai itemId metadata following what codex does
if (model.api.npm === "@ai-sdk/openai" || options.store === false) {
msgs = msgs.map((msg) => {
- if (msg.providerOptions?.openai) {
- delete msg.providerOptions.openai["itemId"]
+ if (msg.providerOptions) {
+ for (const options of Object.values(msg.providerOptions)) {
+ if (options && typeof options === "object") {
+ delete options["itemId"]
+ }
+ }
}
if (!Array.isArray(msg.content)) {
return msg
}
const content = msg.content.map((part) => {
- if (part.providerOptions?.openai) {
- delete part.providerOptions.openai["itemId"]
+ if (part.providerOptions) {
+ for (const options of Object.values(part.providerOptions)) {
+ if (options && typeof options === "object") {
+ delete options["itemId"]
+ }
+ }
}
return part
})
diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts
index 170619b25..33047b5bc 100644
--- a/packages/opencode/test/provider/transform.test.ts
+++ b/packages/opencode/test/provider/transform.test.ts
@@ -805,6 +805,82 @@ describe("ProviderTransform.message - strip openai metadata when store=false", (
expect(result[0].content[0].providerOptions?.openai?.itemId).toBeUndefined()
})
+ test("strips metadata using providerID key when store is false", () => {
+ const opencodeModel = {
+ ...openaiModel,
+ providerID: "opencode",
+ api: {
+ id: "opencode-test",
+ url: "https://api.opencode.ai",
+ npm: "@ai-sdk/openai-compatible",
+ },
+ }
+ const msgs = [
+ {
+ role: "assistant",
+ content: [
+ {
+ type: "text",
+ text: "Hello",
+ providerOptions: {
+ opencode: {
+ itemId: "msg_123",
+ otherOption: "value",
+ },
+ },
+ },
+ ],
+ },
+ ] as any[]
+
+ const result = ProviderTransform.message(msgs, opencodeModel, { store: false }) as any[]
+
+ expect(result[0].content[0].providerOptions?.opencode?.itemId).toBeUndefined()
+ expect(result[0].content[0].providerOptions?.opencode?.otherOption).toBe("value")
+ })
+
+ test("strips itemId across all providerOptions keys", () => {
+ const opencodeModel = {
+ ...openaiModel,
+ providerID: "opencode",
+ api: {
+ id: "opencode-test",
+ url: "https://api.opencode.ai",
+ npm: "@ai-sdk/openai-compatible",
+ },
+ }
+ const msgs = [
+ {
+ role: "assistant",
+ providerOptions: {
+ openai: { itemId: "msg_root" },
+ opencode: { itemId: "msg_opencode" },
+ extra: { itemId: "msg_extra" },
+ },
+ content: [
+ {
+ type: "text",
+ text: "Hello",
+ providerOptions: {
+ openai: { itemId: "msg_openai_part" },
+ opencode: { itemId: "msg_opencode_part" },
+ extra: { itemId: "msg_extra_part" },
+ },
+ },
+ ],
+ },
+ ] as any[]
+
+ const result = ProviderTransform.message(msgs, opencodeModel, { store: false }) as any[]
+
+ expect(result[0].providerOptions?.openai?.itemId).toBeUndefined()
+ expect(result[0].providerOptions?.opencode?.itemId).toBeUndefined()
+ expect(result[0].providerOptions?.extra?.itemId).toBeUndefined()
+ expect(result[0].content[0].providerOptions?.openai?.itemId).toBeUndefined()
+ expect(result[0].content[0].providerOptions?.opencode?.itemId).toBeUndefined()
+ expect(result[0].content[0].providerOptions?.extra?.itemId).toBeUndefined()
+ })
+
test("does not strip metadata for non-openai packages when store is not false", () => {
const anthropicModel = {
...openaiModel,