From 999135266389ad0b2747068dddd96fdb9713b0a1 Mon Sep 17 00:00:00 2001 From: Josh Date: Fri, 20 Jun 2025 14:03:41 -0500 Subject: [PATCH] feat: forward provider options from model config (#202) Co-authored-by: Dax Raad --- packages/opencode/src/provider/models.ts | 2 ++ packages/opencode/src/provider/provider.ts | 20 +++++++++++++------- packages/opencode/src/session/index.ts | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index 26255808..cfb66807 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -13,6 +13,7 @@ export namespace ModelsDev { attachment: z.boolean(), reasoning: z.boolean(), temperature: z.boolean(), + tool_call: z.boolean(), cost: z.object({ input: z.number(), output: z.number(), @@ -24,6 +25,7 @@ export namespace ModelsDev { output: z.number(), }), id: z.string(), + options: z.record(z.any()), }) .openapi({ ref: "Model.Info", diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index e074e5d2..ffd88b13 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -161,13 +161,19 @@ export namespace Provider { attachment: model.attachment ?? existing?.attachment ?? false, reasoning: model.reasoning ?? existing?.reasoning ?? false, temperature: model.temperature ?? existing?.temperature ?? false, - cost: model.cost ?? - existing?.cost ?? { - input: 0, - output: 0, - inputCached: 0, - outputCached: 0, - }, + tool_call: model.tool_call ?? existing?.tool_call ?? true, + cost: { + ...existing?.cost, + ...model.cost, + input: 0, + output: 0, + cache_read: 0, + cache_write: 0, + }, + options: { + ...existing?.options, + ...model.options, + }, limit: model.limit ?? existing?.limit ?? { context: 0, diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 01f12680..b796c313 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -262,6 +262,7 @@ export namespace Session { if (msgs.length === 0 && !session.parentID) { generateText({ maxTokens: input.providerID === "google" ? 1024 : 20, + providerOptions: model.info.options, messages: [ ...SystemPrompt.title(input.providerID).map( (x): CoreMessage => ({ @@ -507,6 +508,7 @@ export namespace Session { toolCallStreaming: true, abortSignal: abort.signal, maxSteps: 1000, + providerOptions: model.info.options, messages: [ ...system.map( (x): CoreMessage => ({ @@ -521,9 +523,7 @@ export namespace Session { ProviderTransform.message(msg, i, input.providerID, input.modelID), ), temperature: model.info.temperature ? 0 : undefined, - tools: { - ...tools, - }, + tools: model.info.tool_call === false ? undefined : tools, model: model.language, }) try {