diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index a81aa7db22..abd0c53380 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -28,6 +28,7 @@ export namespace LLM { small?: boolean tools: Record retries?: number + toolChoice?: "auto" | "required" | "none" } export type StreamOutput = StreamTextResult @@ -146,6 +147,7 @@ export namespace LLM { providerOptions: ProviderTransform.providerOptions(input.model, params.options), activeTools: Object.keys(tools).filter((x) => x !== "invalid"), tools, + toolChoice: input.toolChoice, maxOutputTokens, abortSignal: input.abort, headers: { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index b94abd67bf..1614384e27 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -573,6 +573,7 @@ export namespace SessionPrompt { ], tools, model, + toolChoice: outputFormat.type === "json_schema" ? "required" : undefined, }) // Handle structured output logic