Fix #2257 by allowing users to configure oss provider in config.toml

This commit is contained in:
Kazuhiro Sera
2025-08-18 19:25:49 +09:00
parent a269754668
commit 5daa485eea
2 changed files with 52 additions and 1 deletions

View File

@@ -535,7 +535,8 @@ impl Config {
let mut model_providers = built_in_model_providers();
// Merge user-defined providers into the built-in list.
for (key, provider) in cfg.model_providers.into_iter() {
model_providers.entry(key).or_insert(provider);
// Override the built-in provider if the same key is present ib config.toml
model_providers.insert(key, provider);
}
let model_provider_id = model_provider

View File

@@ -0,0 +1,50 @@
#![expect(clippy::unwrap_used)]
use std::collections::HashMap;
use codex_core::config::{Config, ConfigOverrides, ConfigToml};
use codex_core::model_provider_info::{ModelProviderInfo, WireApi};
use tempfile::TempDir;
#[test]
fn user_defined_provider_overrides_builtin() {
let tmp = TempDir::new().unwrap();
let mut cfg = ConfigToml::default();
cfg.model_provider = Some("oss".to_string());
cfg.model = Some("gpt-oss:20b".to_string());
let mut providers = HashMap::new();
providers.insert(
"oss".to_string(),
ModelProviderInfo {
name: "Custom".into(),
base_url: Some("https://example.com/v1".into()),
env_key: None,
env_key_instructions: None,
wire_api: WireApi::Chat,
query_params: None,
http_headers: None,
env_http_headers: None,
request_max_retries: None,
stream_max_retries: None,
stream_idle_timeout_ms: None,
requires_openai_auth: false,
},
);
cfg.model_providers = providers;
let config = Config::load_from_base_config_with_overrides(
cfg,
ConfigOverrides::default(),
tmp.path().to_path_buf(),
)
.unwrap();
assert_eq!(config.model_provider.name, "Custom");
assert_eq!(
config.model_provider.base_url.as_deref(),
Some("https://example.com/v1")
);
}