Skip to content

Commit 93d82d2

Browse files
authored
Merge pull request #496 from stakpak/fix/strip-unsupported-params-for-reasoning-models
fix(openai): strip unsupported params for reasoning models & minor cleanups
2 parents f8f36ca + 75785ae commit 93d82d2

3 files changed

Lines changed: 51 additions & 4 deletions

File tree

cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ stakpak-mcp-client = { workspace = true }
1515
stakpak-mcp-proxy = { workspace = true }
1616
stakpak-tui = { workspace = true }
1717
stakpak-shared = { workspace = true }
18-
stakai = { path = "../libs/ai" }
18+
stakai = { workspace = true }
1919
tracing = { workspace = true }
2020
tracing-subscriber = { workspace = true }
2121
rmcp = { workspace = true }

libs/ai/src/providers/openai/convert.rs

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,13 +546,25 @@ pub fn to_responses_request(req: &GenerateRequest, stream: bool) -> ResponsesReq
546546
None
547547
};
548548

549+
// Reasoning models don't support temperature or top_p
550+
let temperature = if is_reasoning {
551+
None
552+
} else {
553+
req.options.temperature
554+
};
555+
let top_p = if is_reasoning {
556+
None
557+
} else {
558+
req.options.top_p
559+
};
560+
549561
ResponsesRequest {
550562
model: req.model.id.clone(),
551563
input,
552564
instructions: None, // System message is in input array
553565
max_output_tokens: req.options.max_tokens,
554-
temperature: req.options.temperature,
555-
top_p: req.options.top_p,
566+
temperature,
567+
top_p,
556568
stream: Some(stream),
557569
tools,
558570
tool_choice,
@@ -1054,4 +1066,39 @@ mod tests {
10541066
let tool_result = tool_result.unwrap();
10551067
assert_eq!(tool_result["call_id"], "call_123");
10561068
}
1069+
1070+
// =========================================================================
1071+
// Temperature / Top-P Filtering Tests
1072+
// =========================================================================
1073+
1074+
#[test]
1075+
fn test_responses_request_strips_temperature_for_reasoning_model() {
1076+
let mut req = make_request(
1077+
"gpt-5.2-2025-12-11",
1078+
Some(ProviderOptions::OpenAI(OpenAIOptions::responses())),
1079+
);
1080+
req.options.temperature = Some(0.7);
1081+
req.options.top_p = Some(0.9);
1082+
1083+
let responses_req = to_responses_request(&req, false);
1084+
1085+
// Reasoning models must not send temperature or top_p
1086+
assert!(responses_req.temperature.is_none());
1087+
assert!(responses_req.top_p.is_none());
1088+
}
1089+
1090+
#[test]
1091+
fn test_responses_request_keeps_temperature_for_standard_model() {
1092+
let mut req = make_request(
1093+
"gpt-4o",
1094+
Some(ProviderOptions::OpenAI(OpenAIOptions::responses())),
1095+
);
1096+
req.options.temperature = Some(0.7);
1097+
req.options.top_p = Some(0.9);
1098+
1099+
let responses_req = to_responses_request(&req, false);
1100+
1101+
assert_eq!(responses_req.temperature, Some(0.7));
1102+
assert_eq!(responses_req.top_p, Some(0.9));
1103+
}
10571104
}

libs/ai/src/providers/stakpak/provider.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ impl Provider for StakpakProvider {
118118
// with stakpak/{provider}/ prefix for routing
119119
use crate::registry::models_dev::load_models_for_provider;
120120

121-
const PROVIDERS: &[&str] = &["anthropic", "openai", "google"];
121+
const PROVIDERS: &[&str] = &["anthropic", "openai" /*, "google" */];
122122

123123
let mut models = Vec::new();
124124

0 commit comments

Comments
 (0)