diff options
| author | Aiden Cline <[email protected]> | 2026-04-26 01:05:16 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-26 00:05:16 -0500 |
| commit | e7053c41f42900f62ca8002713c4c8b521caf0ed (patch) | |
| tree | 386315f2a9cf3d72d93788be44c3d8fd2db8599a /packages | |
| parent | fc6d4b40102f802425511e2deffb8f0195bc986d (diff) | |
| download | opencode-e7053c41f42900f62ca8002713c4c8b521caf0ed.tar.gz opencode-e7053c41f42900f62ca8002713c4c8b521caf0ed.zip | |
fix: bump openrouter sdk version to resolve deepseek reasoning issue (bug was in sdk pkg) (#24435)
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/package.json | 2 | ||||
| -rw-r--r-- | packages/opencode/src/provider/transform.ts | 6 | ||||
| -rw-r--r-- | packages/opencode/test/session/message-v2.test.ts | 73 |
3 files changed, 79 insertions, 2 deletions
diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 98a707f4b..df0043b06 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -115,7 +115,7 @@ "@opencode-ai/plugin": "workspace:*", "@opencode-ai/script": "workspace:*", "@opencode-ai/sdk": "workspace:*", - "@openrouter/ai-sdk-provider": "2.5.1", + "@openrouter/ai-sdk-provider": "2.8.1", "@opentelemetry/api": "1.9.0", "@opentelemetry/context-async-hooks": "2.6.1", "@opentelemetry/exporter-trace-otlp-http": "0.214.0", diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 67b02c089..b2e9b59a3 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -193,7 +193,11 @@ function normalizeMessages( }) } - if (typeof model.capabilities.interleaved === "object" && model.capabilities.interleaved.field) { + if ( + typeof model.capabilities.interleaved === "object" && + model.capabilities.interleaved.field && + model.api.npm !== "@openrouter/ai-sdk-provider" + ) { const field = model.capabilities.interleaved.field return msgs.map((msg) => { if (msg.role === "assistant" && Array.isArray(msg.content)) { diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index abada013d..9591a5d62 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -873,6 +873,79 @@ describe("session.message-v2.toModelMessage", () => { ]) }) + test("preserves OpenRouter reasoning details through provider transform", async () => { + const assistantID = "m-assistant" + const openrouterModel: Provider.Model = { + ...model, + id: ModelID.make("deepseek/deepseek-v4-pro"), + providerID: ProviderID.make("openrouter"), + api: { + id: "deepseek/deepseek-v4-pro", + url: "https://openrouter.ai/api/v1", + npm: "@openrouter/ai-sdk-provider", + }, + capabilities: { + ...model.capabilities, + reasoning: true, + interleaved: { field: "reasoning_details" }, + }, + } + const reasoningDetails = [ + { + type: "reasoning.text", + text: "thinking", + format: "unknown", + index: 0, + }, + ] + const input: MessageV2.WithParts[] = [ + { + info: assistantInfo(assistantID, "m-parent", undefined, { + providerID: openrouterModel.providerID, + modelID: openrouterModel.id, + }), + parts: [ + { + ...basePart(assistantID, "a1"), + type: "reasoning", + text: "thinking", + time: { start: 0 }, + metadata: { + openrouter: { + reasoning_details: reasoningDetails, + }, + }, + }, + { + ...basePart(assistantID, "a2"), + type: "text", + text: "answer", + }, + ] as MessageV2.Part[], + }, + ] + + expect( + ProviderTransform.message(await MessageV2.toModelMessages(input, openrouterModel), openrouterModel, {}), + ).toStrictEqual([ + { + role: "assistant", + content: [ + { + type: "reasoning", + text: "thinking", + providerOptions: { + openrouter: { + reasoning_details: reasoningDetails, + }, + }, + }, + { type: "text", text: "answer" }, + ], + }, + ]) + }) + test("splits assistant messages on step-start boundaries", async () => { const assistantID = "m-assistant" |
