Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 0 additions & 122 deletions crates/goose/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,125 +295,3 @@ impl ModelConfig {
.unwrap_or_else(|_| panic!("Failed to create model config for {}", model_name))
}
}

#[cfg(test)]
mod tests {
use super::*;
use serial_test::serial;
use temp_env::with_var;

#[test]
#[serial]
fn test_model_config_context_limits() {
// Clear all GOOSE environment variables to ensure clean test environment
with_var("GOOSE_TEMPERATURE", None::<&str>, || {
with_var("GOOSE_CONTEXT_LIMIT", None::<&str>, || {
with_var("GOOSE_TOOLSHIM", None::<&str>, || {
with_var("GOOSE_TOOLSHIM_OLLAMA_MODEL", None::<&str>, || {
let config = ModelConfig::new("claude-3-opus")
.unwrap()
.with_context_limit(Some(150_000));
assert_eq!(config.context_limit(), 150_000);

let config = ModelConfig::new("claude-3-opus").unwrap();
assert_eq!(config.context_limit(), 200_000);

let config = ModelConfig::new("gpt-4-turbo").unwrap();
assert_eq!(config.context_limit(), 128_000);

let config = ModelConfig::new("unknown-model").unwrap();
assert_eq!(config.context_limit(), DEFAULT_CONTEXT_LIMIT);
});
});
});
});
}

#[test]
#[serial]
fn test_invalid_context_limit() {
with_var("GOOSE_CONTEXT_LIMIT", Some("abc"), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
if let Err(ConfigError::InvalidValue(var, val, msg)) = result {
assert_eq!(var, "GOOSE_CONTEXT_LIMIT");
assert_eq!(val, "abc");
assert!(msg.contains("positive integer"));
}
});

with_var("GOOSE_CONTEXT_LIMIT", Some("0"), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
assert!(matches!(
result.unwrap_err(),
ConfigError::InvalidRange(_, _)
));
});
}

#[test]
#[serial]
fn test_invalid_temperature() {
with_var("GOOSE_TEMPERATURE", Some("hot"), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
});

with_var("GOOSE_TEMPERATURE", Some("-1.0"), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
});
}

#[test]
#[serial]
fn test_invalid_toolshim() {
with_var("GOOSE_TOOLSHIM", Some("maybe"), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
if let Err(ConfigError::InvalidValue(var, val, msg)) = result {
assert_eq!(var, "GOOSE_TOOLSHIM");
assert_eq!(val, "maybe");
assert!(msg.contains("must be one of"));
}
});
}

#[test]
#[serial]
fn test_empty_toolshim_model() {
with_var("GOOSE_TOOLSHIM_OLLAMA_MODEL", Some(""), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
assert!(matches!(
result.unwrap_err(),
ConfigError::InvalidValue(_, _, _)
));
});

with_var("GOOSE_TOOLSHIM_OLLAMA_MODEL", Some(" "), || {
let result = ModelConfig::new("test-model");
assert!(result.is_err());
});
}

#[test]
#[serial]
fn test_valid_configurations() {
// Test with environment variables set
with_var("GOOSE_CONTEXT_LIMIT", Some("50000"), || {
with_var("GOOSE_TEMPERATURE", Some("0.7"), || {
with_var("GOOSE_TOOLSHIM", Some("true"), || {
with_var("GOOSE_TOOLSHIM_OLLAMA_MODEL", Some("llama3"), || {
let config = ModelConfig::new("test-model").unwrap();
assert_eq!(config.context_limit(), 50_000);
assert_eq!(config.temperature, Some(0.7));
assert!(config.toolshim);
assert_eq!(config.toolshim_model, Some("llama3".to_string()));
});
});
});
});
}
}
Loading