Skip to content

Map forced tool choice onto the Cohere v2 API - #2

Merged
MarcelloDuarte merged 1 commit into
mainfrom
tool-choice
Jul 29, 2026
Merged

Map forced tool choice onto the Cohere v2 API#2
MarcelloDuarte merged 1 commit into
mainfrom
tool-choice

Conversation

@MarcelloDuarte

Copy link
Copy Markdown
Contributor

Cohere never received the v0.13 toolChoice work, so until now it accepted the option and silently dropped it.

Cohere's v2 tool_choice is not OpenAI-shaped, so this is not a copy of the other providers:

  • Uppercase values. It accepts REQUIRED and NONE, per the API reference.
  • No auto value. The documented behaviour is that omitting the field lets the model choose, so auto sends nothing rather than an invented AUTO.
  • It cannot force a named tool. required is as specific as Cohere gets. Silently downgrading ["name" => "x"] to REQUIRED would satisfy the request shape while breaking exactly the guarantee the caller asked for, so it throws a ProviderException that names the tool it could not force. Same posture as Ollama refusing forced choice outright.

One upstream caveat worth knowing, documented in the code: tool_choice needs command-r7b or newer, and the package default is command-r-plus, so an older model will reject it at the API rather than here.

9 new tests. composer ci green locally.

Cohere was left out of the v0.13 toolChoice release, so it accepted the option
and silently dropped it.

Cohere spells the modes in uppercase, REQUIRED and NONE, and has no value for
auto: the documented default is that omitting the field lets the model choose,
so auto sends nothing rather than an invented value.

It also cannot force one *named* tool. Downgrading that to REQUIRED would
satisfy the request shape while breaking the caller's guarantee, so it throws
a ProviderException naming the tool it could not force, the same way Ollama
refuses forced choice outright.
@MarcelloDuarte
MarcelloDuarte merged commit 48c147a into main Jul 29, 2026
6 checks passed
@MarcelloDuarte
MarcelloDuarte deleted the tool-choice branch July 29, 2026 22:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant