From 2ab9c2d4045058b9671eda9568337f3928d5a532 Mon Sep 17 00:00:00 2001 From: oudecheng <13802883547@139.com> Date: Mon, 17 Aug 2026 16:45:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(providers):=20=E6=A8=A1=E5=9E=8B=E6=9C=AA?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20Temperature=20=E6=97=B6=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E4=BD=93=E4=B8=8D=E5=86=8D=E6=90=BA=E5=B8=A6=E8=AF=A5=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AnthropicRequest.temperature 增加 skip_serializing_if:留空时不再序列化出 temperature:null,而是完全省略该键,交由模型服务端使用默认值(OpenAI 型 provider 此前已是该行为) - 新增两个序列化回归测试:temperature 为 None 时请求体不含该键,为 Some 时正常输出 - 同步设置页提示文案:Temperature 留空不传该字段;Max Tokens 留空不传(Anthropic 型 provider 回退为 1024) --- src/providers/anthropic.rs | 31 +++++++++++++++++++ .../components/Settings/tabs/ModelsTab.tsx | 4 +-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/providers/anthropic.rs b/src/providers/anthropic.rs index 59cd021..726503e 100644 --- a/src/providers/anthropic.rs +++ b/src/providers/anthropic.rs @@ -196,6 +196,7 @@ struct AnthropicRequest { model: String, messages: Vec, max_tokens: u32, + #[serde(skip_serializing_if = "Option::is_none")] temperature: Option, #[serde(skip_serializing_if = "Option::is_none")] tools: Option>, @@ -630,6 +631,36 @@ mod tests { assert!(resp.content.is_empty()); } + // ---- AnthropicRequest 序列化:未配置的可选字段不出现在请求体中 ---- + + fn make_request(temperature: Option) -> AnthropicRequest { + AnthropicRequest { + model: "glm-5".to_string(), + messages: vec![AnthropicMessage { + role: "user".to_string(), + content: vec![serde_json::json!({"type": "text", "text": "hi"})], + }], + max_tokens: 1024, + temperature, + tools: None, + extra: HashMap::new(), + } + } + + #[test] + fn test_request_omits_temperature_when_none() { + let json = serde_json::to_value(make_request(None)).unwrap(); + let obj = json.as_object().unwrap(); + assert!(!obj.contains_key("temperature")); + assert_eq!(obj.get("max_tokens").and_then(|v| v.as_u64()), Some(1024)); + } + + #[test] + fn test_request_includes_temperature_when_set() { + let json = serde_json::to_value(make_request(Some(0.5))).unwrap(); + assert_eq!(json["temperature"], serde_json::json!(0.5)); + } + // ---- format_error_chain ---- #[test] diff --git a/web/src/components/Settings/tabs/ModelsTab.tsx b/web/src/components/Settings/tabs/ModelsTab.tsx index 0e7254f..30342a0 100644 --- a/web/src/components/Settings/tabs/ModelsTab.tsx +++ b/web/src/components/Settings/tabs/ModelsTab.tsx @@ -37,7 +37,7 @@ export function ModelsTab({ config, update }: TabProps) {