We are removing feature-gated shared crates from the `codex-rs` workspace. `codex-common` grouped several unrelated utilities behind `[features]`, which made dependency boundaries harder to reason about and worked against the ongoing effort to eliminate feature flags from workspace crates. Splitting these utilities into dedicated crates under `utils/` aligns this area with existing workspace structure and keeps each dependency explicit at the crate boundary. ## What changed - Removed `codex-rs/common` (`codex-common`) from workspace members and workspace dependencies. - Added six new utility crates under `codex-rs/utils/`: - `codex-utils-cli` - `codex-utils-elapsed` - `codex-utils-sandbox-summary` - `codex-utils-approval-presets` - `codex-utils-oss` - `codex-utils-fuzzy-match` - Migrated the corresponding modules out of `codex-common` into these crates (with tests), and added matching `BUILD.bazel` targets. - Updated direct consumers to use the new crates instead of `codex-common`: - `codex-rs/cli` - `codex-rs/tui` - `codex-rs/exec` - `codex-rs/app-server` - `codex-rs/mcp-server` - `codex-rs/chatgpt` - `codex-rs/cloud-tasks` - Updated workspace lockfile entries to reflect the new dependency graph and removal of `codex-common`.
61 lines
2 KiB
Rust
61 lines
2 KiB
Rust
//! 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),
|
|
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 => {
|
|
codex_ollama::ensure_responses_supported(&config.model_provider).await?;
|
|
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);
|
|
}
|
|
}
|