模型与执行环境¶
Codex 同时支持多种模型 provider 和多种执行环境。模型侧通过 provider/model manager 抽象,执行侧通过 exec-server environment 抽象。
ModelProviderInfo¶
codex-rs/model-provider-info/src/lib.rs 定义 provider 元数据:
- display name
- base URL
- env key 和设置说明
- bearer token 或 command-backed auth
- AWS SigV4 auth
- wire API,目前只支持
responses - query params、HTTP headers、env HTTP headers
- request/stream retry
- stream idle timeout
- websocket connect timeout
- 是否需要 OpenAI auth
- 是否支持 websocket
源码里明确拒绝旧的 wire_api = "chat" 和 ollama-chat provider,引导用户迁移到 Responses API。
Provider Auth 冲突¶
ModelProviderInfo::validate 会阻止互斥 auth 同时出现:
aws不能和env_key、bearer token、command auth、OpenAI auth、websocket 混用。- command-backed
auth不能和env_key、bearer token、OpenAI auth 混用。
这减少 provider 配置的模糊行为。
ModelsManager¶
codex-rs/models-manager/src/manager.rs 把 model discovery 拆成:
ModelsEndpointClient:provider-specific auth 和远程/models请求。ModelsManager:刷新策略、缓存、catalog 合并、picker filtering。
刷新策略:
OnlineOfflineOnlineIfUncached
模型缓存文件是 models_cache.json,默认 TTL 是 300 秒。
默认模型选择¶
ModelsManager::get_default_model 的逻辑是:
- 如果配置显式传入 model,就直接使用。
- 否则按 auth mode 和可用模型列表选择默认。
build_available_models 会按 priority 排序,并根据是否使用 Codex backend 过滤模型可见性。
执行环境¶
codex-rs/exec-server 提供 environment 抽象:
- local environment
- remote environment
- local/remote file system
- local/remote process
- HTTP proxy helpers
- Noise channel / relay
- exec protocol
EnvironmentManager 让一个 turn 可以选择多个 TurnEnvironmentSelection。
TurnEnvironment¶
codex-rs/core/src/environment_selection.rs 做 turn 环境解析:
- 从 thread 的 environment selections 读取 environment id 和 cwd。
- 查找
EnvironmentManager中对应 environment。 - 等待 environment ready。
- remote environment 通过
environment.info()获取 shell。 - 为每个 environment 构造 shell snapshot。
- snapshot 可配置为 blocking 或 non-blocking。
这让 Codex 不必假设所有执行都发生在本机当前目录。
可学习的设计¶
模型 provider 与执行 environment 都采用“运行时抽象 + 可缓存元数据”的模式:
- provider 负责认证和 API shape。
- model manager 负责列表、缓存、默认选择。
- environment 负责文件系统和进程执行边界。
- turn context 把模型和环境拍成本轮固定快照。