diff options
| -rw-r--r-- | bun.lock | 1 | ||||
| -rw-r--r-- | package.json | 3 | ||||
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 9 | ||||
| -rw-r--r-- | patches/@ai-sdk%[email protected] | 108 |
4 files changed, 120 insertions, 1 deletions
@@ -586,6 +586,7 @@ ], "patchedDependencies": { "@openrouter/[email protected]": "patches/@openrouter%[email protected]", + "@ai-sdk/[email protected]": "patches/@ai-sdk%[email protected]", "@standard-community/[email protected]": "patches/@standard-community%[email protected]", }, "overrides": { diff --git a/package.json b/package.json index 4d89daffd..2875b9daa 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ }, "patchedDependencies": { "@standard-community/[email protected]": "patches/@standard-community%[email protected]", - "@openrouter/[email protected]": "patches/@openrouter%[email protected]" + "@openrouter/[email protected]": "patches/@openrouter%[email protected]", + "@ai-sdk/[email protected]": "patches/@ai-sdk%[email protected]" } } diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index f7667fc2c..9c9c8e834 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -184,6 +184,15 @@ export namespace Provider { options: {}, } }, + xai: async () => { + return { + autoload: false, + async getModel(sdk: any, modelID: string, _options?: Record<string, any>) { + return sdk.responses(modelID) + }, + options: {}, + } + }, "github-copilot": async () => { return { autoload: false, diff --git a/patches/@ai-sdk%[email protected] b/patches/@ai-sdk%[email protected] new file mode 100644 index 000000000..8776cab48 --- /dev/null +++ b/patches/@ai-sdk%[email protected] @@ -0,0 +1,108 @@ +diff --git a/dist/index.mjs b/dist/index.mjs +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -959,7 +959,7 @@ + model: z4.string().nullish(), + object: z4.literal("response"), + output: z4.array(outputItemSchema), +- usage: xaiResponsesUsageSchema, ++ usage: xaiResponsesUsageSchema.nullish(), + status: z4.string() + }); + var xaiResponsesChunkSchema = z4.union([ +\ No newline at end of file +@@ -1143,6 +1143,18 @@ + z4.object({ + type: z4.literal("response.completed"), + response: xaiResponsesResponseSchema ++ }), ++ z4.object({ ++ type: z4.literal("response.function_call_arguments.delta"), ++ item_id: z4.string(), ++ output_index: z4.number(), ++ delta: z4.string() ++ }), ++ z4.object({ ++ type: z4.literal("response.function_call_arguments.done"), ++ item_id: z4.string(), ++ output_index: z4.number(), ++ arguments: z4.string() + }) + ]); + +\ No newline at end of file +@@ -1940,6 +1952,9 @@ + if (response2.status) { + finishReason = mapXaiResponsesFinishReason(response2.status); + } ++ if (seenToolCalls.size > 0 && finishReason !== "tool-calls") { ++ finishReason = "tool-calls"; ++ } + return; + } + if (event.type === "response.output_item.added" || event.type === "response.output_item.done") { +\ No newline at end of file +@@ -2024,7 +2039,7 @@ + } + } + } else if (part.type === "function_call") { +- if (!seenToolCalls.has(part.call_id)) { ++ if (event.type === "response.output_item.done" && !seenToolCalls.has(part.call_id)) { + seenToolCalls.add(part.call_id); + controller.enqueue({ + type: "tool-input-start", +\ No newline at end of file +diff --git a/dist/index.js b/dist/index.js +--- a/dist/index.js ++++ b/dist/index.js +@@ -964,7 +964,7 @@ + model: import_v44.z.string().nullish(), + object: import_v44.z.literal("response"), + output: import_v44.z.array(outputItemSchema), +- usage: xaiResponsesUsageSchema, ++ usage: xaiResponsesUsageSchema.nullish(), + status: import_v44.z.string() + }); + var xaiResponsesChunkSchema = import_v44.z.union([ +\ No newline at end of file +@@ -1148,6 +1148,18 @@ + import_v44.z.object({ + type: import_v44.z.literal("response.completed"), + response: xaiResponsesResponseSchema ++ }), ++ import_v44.z.object({ ++ type: import_v44.z.literal("response.function_call_arguments.delta"), ++ item_id: import_v44.z.string(), ++ output_index: import_v44.z.number(), ++ delta: import_v44.z.string() ++ }), ++ import_v44.z.object({ ++ type: import_v44.z.literal("response.function_call_arguments.done"), ++ item_id: import_v44.z.string(), ++ output_index: import_v44.z.number(), ++ arguments: import_v44.z.string() + }) + ]); + +\ No newline at end of file +@@ -1935,6 +1947,9 @@ + if (response2.status) { + finishReason = mapXaiResponsesFinishReason(response2.status); + } ++ if (seenToolCalls.size > 0 && finishReason !== "tool-calls") { ++ finishReason = "tool-calls"; ++ } + return; + } + if (event.type === "response.output_item.added" || event.type === "response.output_item.done") { +\ No newline at end of file +@@ -2019,7 +2034,7 @@ + } + } + } else if (part.type === "function_call") { +- if (!seenToolCalls.has(part.call_id)) { ++ if (event.type === "response.output_item.done" && !seenToolCalls.has(part.call_id)) { + seenToolCalls.add(part.call_id); + controller.enqueue({ + type: "tool-input-start", +\ No newline at end of file |
