2025-11-17 14:49:09 -05:00
|
|
|
//! OSS provider utilities shared between TUI and exec.
|
|
|
|
|
|
|
|
|
|
use codex_core::LMSTUDIO_OSS_PROVIDER_ID;
|
|
|
|
|
use codex_core::OLLAMA_OSS_PROVIDER_ID;
|
|
|
|
|
use codex_core::config::Config;
|
|
|
|
|
|
|
|
|
|
/// 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),
|
2026-02-03 11:31:57 +00:00
|
|
|
OLLAMA_OSS_PROVIDER_ID => Some(codex_ollama::DEFAULT_OSS_MODEL),
|
2025-11-17 14:49:09 -05:00
|
|
|
_ => 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}")))?;
|
|
|
|
|
}
|
2026-02-03 11:31:57 +00:00
|
|
|
OLLAMA_OSS_PROVIDER_ID => {
|
|
|
|
|
codex_ollama::ensure_responses_supported(&config.model_provider).await?;
|
2025-11-17 14:49:09 -05:00
|
|
|
codex_ollama::ensure_oss_ready(config)
|
|
|
|
|
.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);
|
|
|
|
|
}
|
|
|
|
|
}
|