language_models: Fix tool_choice null issue for other providers (#34554)

Umesh Yadav created

Follow up: #34532

Closes #35434 

Mostly fixes a issue were when the tool_choice is none it was getting
serialised as null. This was fixed for openrouter just wanted to follow
up and cleanup for other providers which might have this issue as this
is against the spec.

Release Notes:

- N/A

Change summary

crates/lmstudio/src/lmstudio.rs | 3 ++-
crates/mistral/src/mistral.rs   | 3 ++-
crates/open_ai/src/open_ai.rs   | 3 ++-
3 files changed, 6 insertions(+), 3 deletions(-)

Detailed changes

crates/lmstudio/src/lmstudio.rs 🔗

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

crates/mistral/src/mistral.rs 🔗

@@ -286,12 +286,13 @@ pub enum Prediction {
 }
 
 #[derive(Debug, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
+#[serde(rename_all = "lowercase")]
 pub enum ToolChoice {
     Auto,
     Required,
     None,
     Any,
+    #[serde(untagged)]
     Function(ToolDefinition),
 }
 

crates/open_ai/src/open_ai.rs 🔗

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