From 6d745e9cb38ed37999d954a3465bed04a8cc399a Mon Sep 17 00:00:00 2001 From: Chummy Date: Thu, 19 Feb 2026 23:59:50 +0800 Subject: [PATCH] fix(openai): deserialize native tool specs with owned fields --- src/providers/openai.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/providers/openai.rs b/src/providers/openai.rs index ab2f008..992372a 100644 --- a/src/providers/openai.rs +++ b/src/providers/openai.rs @@ -54,12 +54,12 @@ impl ResponseMessage { } #[derive(Debug, Serialize)] -struct NativeChatRequest<'a> { +struct NativeChatRequest { model: String, messages: Vec, temperature: f64, #[serde(skip_serializing_if = "Option::is_none")] - tools: Option>>, + tools: Option>, #[serde(skip_serializing_if = "Option::is_none")] tool_choice: Option, } @@ -75,18 +75,18 @@ struct NativeMessage { tool_calls: Option>, } -#[derive(Debug, Serialize)] -struct NativeToolSpec<'a> { +#[derive(Debug, Serialize, Deserialize)] +struct NativeToolSpec { #[serde(rename = "type")] - kind: &'static str, - function: NativeToolFunctionSpec<'a>, + kind: String, + function: NativeToolFunctionSpec, } -#[derive(Debug, Serialize)] -struct NativeToolFunctionSpec<'a> { - name: &'a str, - description: &'a str, - parameters: &'a serde_json::Value, +#[derive(Debug, Serialize, Deserialize)] +struct NativeToolFunctionSpec { + name: String, + description: String, + parameters: serde_json::Value, } #[derive(Debug, Serialize, Deserialize)] @@ -150,16 +150,16 @@ impl OpenAiProvider { } } - fn convert_tools<'a>(tools: Option<&'a [ToolSpec]>) -> Option>> { + fn convert_tools(tools: Option<&[ToolSpec]>) -> Option> { tools.map(|items| { items .iter() .map(|tool| NativeToolSpec { - kind: "function", + kind: "function".to_string(), function: NativeToolFunctionSpec { - name: &tool.name, - description: &tool.description, - parameters: &tool.parameters, + name: tool.name.clone(), + description: tool.description.clone(), + parameters: tool.parameters.clone(), }, }) .collect()