fix: have option for cli providers to use their configured or default model (#3683)

This commit is contained in:
Michael Neale
2025-07-29 10:27:53 +10:00
committed by GitHub
parent fe7aed0c0b
commit 2382763568
2 changed files with 55 additions and 11 deletions
+28 -6
View File
@@ -332,12 +332,14 @@ impl ClaudeCodeProvider {
cmd.arg("-p") cmd.arg("-p")
.arg(messages_json.to_string()) .arg(messages_json.to_string())
.arg("--system-prompt") .arg("--system-prompt")
.arg(&filtered_system) .arg(&filtered_system);
.arg("--model")
.arg(&self.model.model_name) // Only pass model parameter if it's in the known models list
.arg("--verbose") if CLAUDE_CODE_KNOWN_MODELS.contains(&self.model.model_name.as_str()) {
.arg("--output-format") cmd.arg("--model").arg(&self.model.model_name);
.arg("json"); }
cmd.arg("--verbose").arg("--output-format").arg("json");
// Add permission mode based on GOOSE_MODE setting // Add permission mode based on GOOSE_MODE setting
let config = Config::global(); let config = Config::global();
@@ -541,4 +543,24 @@ mod tests {
std::env::remove_var("GOOSE_MODE"); std::env::remove_var("GOOSE_MODE");
} }
#[test]
fn test_claude_code_invalid_model_no_fallback() {
// Test that an invalid model is kept as-is (no fallback)
let invalid_model = ModelConfig::new("invalid-model".to_string());
let provider = ClaudeCodeProvider::from_env(invalid_model).unwrap();
let config = provider.get_model_config();
assert_eq!(config.model_name, "invalid-model");
}
#[test]
fn test_claude_code_valid_model() {
// Test that a valid model is preserved
let valid_model = ModelConfig::new("sonnet".to_string());
let provider = ClaudeCodeProvider::from_env(valid_model).unwrap();
let config = provider.get_model_config();
assert_eq!(config.model_name, "sonnet");
}
} }
+27 -5
View File
@@ -170,11 +170,13 @@ impl GeminiCliProvider {
} }
let mut cmd = Command::new(&self.command); let mut cmd = Command::new(&self.command);
cmd.arg("-m")
.arg(&self.model.model_name) // Only pass model parameter if it's in the known models list
.arg("-p") if GEMINI_CLI_KNOWN_MODELS.contains(&self.model.model_name.as_str()) {
.arg(&full_prompt) cmd.arg("-m").arg(&self.model.model_name);
.arg("--yolo"); }
cmd.arg("-p").arg(&full_prompt).arg("--yolo");
cmd.stdout(Stdio::piped()).stderr(Stdio::piped()); cmd.stdout(Stdio::piped()).stderr(Stdio::piped());
@@ -370,4 +372,24 @@ mod tests {
// Context limit should be set by the ModelConfig // Context limit should be set by the ModelConfig
assert!(config.context_limit() > 0); assert!(config.context_limit() > 0);
} }
#[test]
fn test_gemini_cli_invalid_model_no_fallback() {
// Test that an invalid model is kept as-is (no fallback)
let invalid_model = ModelConfig::new("invalid-model".to_string());
let provider = GeminiCliProvider::from_env(invalid_model).unwrap();
let config = provider.get_model_config();
assert_eq!(config.model_name, "invalid-model");
}
#[test]
fn test_gemini_cli_valid_model() {
// Test that a valid model is preserved
let valid_model = ModelConfig::new(GEMINI_CLI_DEFAULT_MODEL.to_string());
let provider = GeminiCliProvider::from_env(valid_model).unwrap();
let config = provider.get_model_config();
assert_eq!(config.model_name, GEMINI_CLI_DEFAULT_MODEL);
}
} }