zed/crates/copilot_chat
Valery Borovsky b0f286042b
copilot_chat: Serialize ToolChoice::Any as "required" instead of "any" (#52015)
**Observed behavior:** Inline assistant failed for GPT-4.1,
Gemini, and other non-Anthropic models. Claude worked correctly because
Anthropic's API accepts `"any"` as a valid value.

## Fix
Renamed `ToolChoice::Any` → `ToolChoice::Required` in both
`copilot_chat.rs` and `responses.rs`, matching the convention used by
other OpenAI-compatible providers (`open_ai`, `lmstudio`,
`open_router`).

`copilot_chat::ToolChoice` is a wire type only for the
`/chat/completions`
path — Anthropic models go through `into_anthropic()` and never touch
it,
so no per-model logic is needed.

Also fixes the same serialization bug in `responses::ToolChoice`, which
was not covered by the original approach, and adds regression tests for
both.

## Affected models
- `gpt-4.1` via copilot_chat provider
- `gemini-*` via copilot_chat provider
- Likely affects all OpenAI-compatible models routed through
copilot_chat

## Screenshots
**Bug (only Claude works, Gemini and GPT-4.1 fail):**
<img width="598" height="209" alt="image"
src="https://github.com/user-attachments/assets/bbd418d9-7de3-4191-9ca9-fd1961534e23"
/>

**Fix:**
<img width="532" height="154" alt="image"
src="https://github.com/user-attachments/assets/86bb0f8e-67e6-4417-9b78-b1b7ad328e9e"
/>

**Result:** After the fix, all models work correctly via inline
assistant.

## Release Notes
- Fix inline assistant 400 errors for GPT-4.1, Gemini, and other
  non-Anthropic models via the copilot_chat provider (`tool_choice` was
  sending `"any"` instead of `"required"`)
2026-03-24 13:22:21 +00:00
..
src copilot_chat: Serialize ToolChoice::Any as "required" instead of "any" (#52015) 2026-03-24 13:22:21 +00:00
Cargo.toml Enable extended reasoning for Anthropic models in Copilot (#46540) 2026-03-08 09:34:46 +00:00
LICENSE-GPL copilot: Un-globalify copilot + handle it more directly with EditPredictionStore (#46618) 2026-01-14 14:44:13 +00:00