fix(openai): accept null tool_call arguments in streaming chunks (#9035)

This commit is contained in:
Sarthak Bhardwaj
2026-05-06 14:48:50 +05:30
committed by GitHub
parent b17fd4f287
commit b1ab21664c
+25 -1
View File
@@ -32,10 +32,17 @@ type ToolCallData = HashMap<
),
>;
fn deserialize_null_default_string<'de, D>(deserializer: D) -> Result<String, D::Error>
where
D: serde::Deserializer<'de>,
{
Ok(Option::<String>::deserialize(deserializer)?.unwrap_or_default())
}
#[derive(Serialize, Deserialize, Debug, Default)]
struct DeltaToolCallFunction {
name: Option<String>,
#[serde(default)]
#[serde(default, deserialize_with = "deserialize_null_default_string")]
arguments: String,
}
@@ -2435,4 +2442,21 @@ data: [DONE]"#;
);
Ok(())
}
#[test]
fn test_delta_tool_call_function_accepts_null_arguments() {
let raw = r#"{"arguments":null}"#;
let parsed: DeltaToolCallFunction =
serde_json::from_str(raw).expect("null arguments must deserialize");
assert_eq!(parsed.arguments, "");
let raw = r#"{}"#;
let parsed: DeltaToolCallFunction =
serde_json::from_str(raw).expect("missing arguments must deserialize");
assert_eq!(parsed.arguments, "");
let raw = r#"{"arguments":"{\"k\":1}"}"#;
let parsed: DeltaToolCallFunction = serde_json::from_str(raw).unwrap();
assert_eq!(parsed.arguments, "{\"k\":1}");
}
}