open_router: Fix tool_choice getting serialized to null (#34532)

Closes #34314

This PR resolves an issue where serde(untagged) caused Rust None values
to serialize as null, which OpenRouter's Mistral API (when tool_choice
is present) incorrectly interprets as a defined value, leading to a 400
error. By replacing serde(untagged) with serde(snake_case), None values
are now correctly omitted from the serialized JSON, fixing the problem.
P.S. A separate PR will address serde(untagged) usage for other
providers, as null is not expected for them either.

Release Notes:

- Fix ToolChoice getting serialized to null on OpenRouter
This commit is contained in:
Umesh Yadav 2025-07-16 21:14:08 +05:30 committed by GitHub
parent b0e0485b32
commit 8ee5bf2c38
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -153,11 +153,12 @@ pub struct RequestUsage {
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
#[serde(rename_all = "lowercase")]
pub enum ToolChoice {
Auto,
Required,
None,
#[serde(untagged)]
Other(ToolDefinition),
}