Skip to content

Commit 68e2177

Browse files
committed
fix: narrow max_completion_tokens remap to explicit provider list
Address review feedback: instead of remapping max_completion_tokens to max_tokens for all non-OpenAI providers, use an explicit allowlist of providers known to reject max_completion_tokens. This prevents silently breaking future providers that may support the field natively. Signed-off-by: fre <anonwurcod@proton.me>
1 parent 675c828 commit 68e2177

1 file changed

Lines changed: 31 additions & 1 deletion

File tree

crates/goose/src/providers/openai.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,22 @@ impl OpenAiProvider {
251251
Self::is_responses_model(model_name)
252252
}
253253

254+
/// Providers known to reject `max_completion_tokens` and require
255+
/// the legacy `max_tokens` field instead.
256+
const PROVIDERS_NEEDING_MAX_TOKENS_REMAP: &[&str] = &[
257+
"cerebras",
258+
"custom_deepseek",
259+
"groq",
260+
"inception",
261+
"kimi",
262+
"lmstudio",
263+
"mistral",
264+
"moonshot",
265+
"ovhcloud",
266+
];
267+
254268
fn sanitize_request_for_compat(&self, mut payload: serde_json::Value) -> serde_json::Value {
255-
if self.name == OPEN_AI_PROVIDER_NAME {
269+
if !Self::PROVIDERS_NEEDING_MAX_TOKENS_REMAP.contains(&self.name.as_str()) {
256270
return payload;
257271
}
258272

@@ -648,6 +662,22 @@ mod tests {
648662
assert!(!obj.contains_key("max_tokens"));
649663
}
650664

665+
#[test]
666+
fn sanitize_noop_for_unknown_provider() {
667+
let provider = make_provider("some_future_provider");
668+
let payload = json!({
669+
"model": "future-model",
670+
"messages": [],
671+
"max_completion_tokens": 16384
672+
});
673+
674+
let result = provider.sanitize_request_for_compat(payload);
675+
let obj = result.as_object().unwrap();
676+
677+
assert!(obj.contains_key("max_completion_tokens"));
678+
assert!(!obj.contains_key("max_tokens"));
679+
}
680+
651681
#[test]
652682
fn sanitize_no_token_params() {
653683
let provider = make_provider("groq");

0 commit comments

Comments
 (0)