fix(providers): 模型未配置 Temperature 时请求体不再携带该字段
- AnthropicRequest.temperature 增加 skip_serializing_if:留空时不再序列化出 temperature:null,而是完全省略该键,交由模型服务端使用默认值(OpenAI 型 provider 此前已是该行为) - 新增两个序列化回归测试:temperature 为 None 时请求体不含该键,为 Some 时正常输出 - 同步设置页提示文案:Temperature 留空不传该字段;Max Tokens 留空不传(Anthropic 型 provider 回退为 1024)
This commit is contained in:
parent
27160ef560
commit
2ab9c2d404
@ -196,6 +196,7 @@ struct AnthropicRequest {
|
||||
model: String,
|
||||
messages: Vec<AnthropicMessage>,
|
||||
max_tokens: u32,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
temperature: Option<f32>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
tools: Option<Vec<AnthropicTool>>,
|
||||
@ -630,6 +631,36 @@ mod tests {
|
||||
assert!(resp.content.is_empty());
|
||||
}
|
||||
|
||||
// ---- AnthropicRequest 序列化:未配置的可选字段不出现在请求体中 ----
|
||||
|
||||
fn make_request(temperature: Option<f32>) -> 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]
|
||||
|
||||
@ -37,7 +37,7 @@ export function ModelsTab({ config, update }: TabProps) {
|
||||
</Field>
|
||||
<Field
|
||||
label="Temperature"
|
||||
hint="控制回复随机性,0 表示确定性输出,值越大越随机。留空使用模型默认值"
|
||||
hint="控制回复随机性,0 表示确定性输出,值越大越随机。留空则不传该字段,由模型使用其默认值"
|
||||
>
|
||||
<input
|
||||
type="number"
|
||||
@ -52,7 +52,7 @@ export function ModelsTab({ config, update }: TabProps) {
|
||||
</Field>
|
||||
<Field
|
||||
label="Max Tokens"
|
||||
hint="模型单次回复最大生成 token 数,超出会被截断。留空使用模型默认值(如 4096/8192)"
|
||||
hint="模型单次回复最大生成 token 数,超出会被截断。留空则不传该字段(Anthropic 型 provider 会回退为 1024)"
|
||||
>
|
||||
<input
|
||||
type="number"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user