模型与执行环境

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。

刷新策略:

  • Online
  • Offline
  • OnlineIfUncached

模型缓存文件是 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 环境解析:

  1. 从 thread 的 environment selections 读取 environment id 和 cwd。
  2. 查找 EnvironmentManager 中对应 environment。
  3. 等待 environment ready。
  4. remote environment 通过 environment.info() 获取 shell。
  5. 为每个 environment 构造 shell snapshot。
  6. snapshot 可配置为 blocking 或 non-blocking。

这让 Codex 不必假设所有执行都发生在本机当前目录。

可学习的设计

模型 provider 与执行 environment 都采用“运行时抽象 + 可缓存元数据”的模式:

  • provider 负责认证和 API shape。
  • model manager 负责列表、缓存、默认选择。
  • environment 负责文件系统和进程执行边界。
  • turn context 把模型和环境拍成本轮固定快照。