优化: df-ai/df-storage/df-nodes 底层加固: 上下文/模型/节点/仓储
df-ai: - context/mod.rs + manager_tests.rs: 上下文管理调整 + 测试同步(48 行) - openai_compat.rs: OpenAI 兼容层增强(+51) - presets/models.json: 模型预设 +18 df-storage: - crud/conversation_repo.rs: 会话仓储(loop_state 相关) - crud/task_repo.rs: 任务仓储 - crud/mod.rs: 导出调整 df-nodes: - task_advance_node.rs: 任务推进节点 验收: cargo check -p devflow EXIT 0。
This commit is contained in:
@@ -211,6 +211,10 @@ impl OpenAICompatProvider {
|
||||
|
||||
// 模型不支持 temperature(如商汤 sensenova 仅接受 1.0)→ 省略该字段,避免上游 HTTP 400。
|
||||
// 判定走 model_probe(命中 presets 表;未命中默认支持,保持原样透传零回归)。
|
||||
// 商汤网关(token.sensenova.cn)下温度支持**按模型各异**:sensenova-6.x 与
|
||||
// sn2-kimi 实测仅接受 1(传其它值 400),部分新模型支持常规温度。
|
||||
// 故不做 base_url 一刀切,改由 presets 逐模型精确维护 temperature_supported:
|
||||
// 受限模型(含实测 sn2-kimi)标 false 省略;支持温度变化的模型标 true 正常透传。
|
||||
let temperature = if req.temperature.is_some()
|
||||
&& !crate::model_probe::probe(&model).temperature_supported
|
||||
{
|
||||
@@ -1018,6 +1022,53 @@ mod tests {
|
||||
assert_eq!(msg.content, serde_json::Value::String("hello".into()));
|
||||
}
|
||||
|
||||
/// 温度支持按模型精确判定(presets 表,probe 命中),不按 base_url 一刀切——
|
||||
/// 商汤网关下温度支持各异:sn2-kimi 实测仅接受 temperature=1(传 0.7 → 上游 400),
|
||||
/// presets 已标 temperature_supported=false,任何 provider 下都省略。
|
||||
/// 回归 B5 挂机 sn2-kimi 传 0.7 → 400。省略交上游默认,宁默认不 400。
|
||||
#[test]
|
||||
fn openai_temperature_omitted_for_sn2_kimi_via_presets() {
|
||||
let provider =
|
||||
OpenAICompatProvider::new("https://token.sensenova.cn", "k", "sensenova-6.8-flash-lite");
|
||||
let req = CompletionRequest {
|
||||
model: "sn2-kimi".into(), // presets 精确标记受限,probe 命中 false
|
||||
messages: vec![ChatMessage::user("hi")],
|
||||
temperature: Some(0.7),
|
||||
max_tokens: None,
|
||||
stream: true,
|
||||
tools: None,
|
||||
tool_choice: None,
|
||||
reasoning_content: None,
|
||||
};
|
||||
let out = provider.convert_request(req);
|
||||
assert_eq!(out.temperature, None, "sn2-kimi presets 标 false,应省略 temperature");
|
||||
}
|
||||
|
||||
/// 反向保证:支持常规温度的模型(presets 未标 false,如 deepseek-v4-flash)
|
||||
/// 即使挂在商汤 provider 池也按模型判定透传,不因 base_url 误杀——商汤新模型
|
||||
/// 支持温度变化,一刀切会错误降级。
|
||||
#[test]
|
||||
fn openai_temperature_passed_for_supported_model_on_sensenova_base() {
|
||||
let provider =
|
||||
OpenAICompatProvider::new("https://token.sensenova.cn", "k", "sensenova-6.8-flash-lite");
|
||||
let req = CompletionRequest {
|
||||
model: "deepseek-v4-flash".into(), // presets 未标受限 → 默认支持温度
|
||||
messages: vec![ChatMessage::user("hi")],
|
||||
temperature: Some(0.7),
|
||||
max_tokens: None,
|
||||
stream: true,
|
||||
tools: None,
|
||||
tool_choice: None,
|
||||
reasoning_content: None,
|
||||
};
|
||||
let out = provider.convert_request(req);
|
||||
assert_eq!(
|
||||
out.temperature,
|
||||
Some(0.7),
|
||||
"支持温度的模型应透传,不因 base_url 是商汤而省略"
|
||||
);
|
||||
}
|
||||
|
||||
// ---------- ensure_leading_user(首条非 user/system → 补 user 占位,OpenAI 对称 Anthropic)----------
|
||||
|
||||
/// 首条 assistant → 补 user 占位(对齐 Anthropic)。上游绕过 sanitize 的
|
||||
|
||||
Reference in New Issue
Block a user