mirror of
https://github.com/openai/codex.git
synced 2026-09-09 15:58:47 +00:00
## Why Ollama requests need to honor Codex's configured outbound proxy policy and custom CA handling. ## What changed - Replace Ollama's direct `reqwest` client with a route-aware client created by `codex-http-client`. - Preserve the five-second connection timeout and legacy system-root fallback for default-routed requests. - Reuse one Ollama client for connectivity, version, model discovery, and model-pull checks. - Surface HTTP transport initialization errors instead of replacing them with the generic Ollama connection error. ## Testing - Cover system-proxy routing and invalid `CODEX_CA_CERTIFICATE` and `SSL_CERT_FILE` values under both outbound proxy policies. - Verify that version and model checks reuse the existing Ollama client. GitOrigin-RevId: c7cc36845a9bceb57ce5524b9e1b3cbe317897a3
63 lines
2.1 KiB
Rust
63 lines
2.1 KiB
Rust
//! OSS provider utilities shared between TUI and exec.
|
|
|
|
use codex_core::config::Config;
|
|
use codex_model_provider_info::LMSTUDIO_OSS_PROVIDER_ID;
|
|
use codex_model_provider_info::OLLAMA_OSS_PROVIDER_ID;
|
|
|
|
/// Returns the default model for a given OSS provider.
|
|
pub fn get_default_model_for_oss_provider(provider_id: &str) -> Option<&'static str> {
|
|
match provider_id {
|
|
LMSTUDIO_OSS_PROVIDER_ID => Some(codex_lmstudio::DEFAULT_OSS_MODEL),
|
|
OLLAMA_OSS_PROVIDER_ID => Some(codex_ollama::DEFAULT_OSS_MODEL),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
/// Ensures the specified OSS provider is ready (models downloaded, service reachable).
|
|
pub async fn ensure_oss_provider_ready(
|
|
provider_id: &str,
|
|
config: &Config,
|
|
) -> Result<(), std::io::Error> {
|
|
match provider_id {
|
|
LMSTUDIO_OSS_PROVIDER_ID => {
|
|
codex_lmstudio::ensure_oss_ready(config)
|
|
.await
|
|
.map_err(|e| std::io::Error::other(format!("OSS setup failed: {e}")))?;
|
|
}
|
|
OLLAMA_OSS_PROVIDER_ID => {
|
|
let client = codex_ollama::OllamaClient::try_from_oss_provider(config).await?;
|
|
codex_ollama::ensure_responses_supported(&client).await?;
|
|
codex_ollama::ensure_oss_ready(config, &client)
|
|
.await
|
|
.map_err(|e| std::io::Error::other(format!("OSS setup failed: {e}")))?;
|
|
}
|
|
_ => {
|
|
// Unknown provider, skip setup
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_get_default_model_for_provider_lmstudio() {
|
|
let result = get_default_model_for_oss_provider(LMSTUDIO_OSS_PROVIDER_ID);
|
|
assert_eq!(result, Some(codex_lmstudio::DEFAULT_OSS_MODEL));
|
|
}
|
|
|
|
#[test]
|
|
fn test_get_default_model_for_provider_ollama() {
|
|
let result = get_default_model_for_oss_provider(OLLAMA_OSS_PROVIDER_ID);
|
|
assert_eq!(result, Some(codex_ollama::DEFAULT_OSS_MODEL));
|
|
}
|
|
|
|
#[test]
|
|
fn test_get_default_model_for_provider_unknown() {
|
|
let result = get_default_model_for_oss_provider("unknown-provider");
|
|
assert_eq!(result, None);
|
|
}
|
|
}
|