影响范围
供应商切换 / 配置写入
当前行为
config.toml 中的 model_context_window 对自定义供应商不生效
Codex CLI 版本: 0.142.2
问题描述
使用自定义模型供应商(如本地代理转发的 mimo-v2.5-pro、deepseek-v4-pro 等)时,在 config.toml 中设置 model_context_window = 1000000 无效。Codex 会忽略该值,回退到默认上下文窗口 "context_window": 272000。
根本原因
Codex 的实际上下文窗口从 ModelInfo.context_window(模型目录中的字段)解析,而非 config.toml 的 model_context_window。解析链路如下:
models_cache.json(远程模型目录)
↓ 按 slug 查找
↓ 失败 — "mimo-v2.5" 不在 OpenAI 官方目录中
↓ 回退到默认上下文窗口
config.toml 中的 model_context_window 未被使用
运行时限制变量(full_context_window_limit、auto_compact_scope_limit,定义于 core/src/session/turn.rs)完全由 ModelInfo.context_window 计算得出。model_context_window 虽然存在于 ConfigToml 结构体中,但对于目录中不存在的模型,它不会覆盖目录解析结果。
这可以通过 config lockfile 中的 save_fields_resolved_from_model_catalog 机制确认——模型目录解析出的字段作为最终生效值被保存。
当前的 Workaround
创建自定义模型目录文件 ~/.codex/model_catalog_custom.json,显式定义模型的 context_window 以及必填的 base_instructions 字段,然后在 config 中指向它:
# config.toml
model_catalog_json = "~/.codex/model_catalog_custom.json"
// model_catalog_custom.json
{
"models": [
{
"slug": "mimo-v2.5",
"display_name": "Mimo v2.5",
"base_instructions": "You are Codex, a coding agent...",
"context_window": 1000000,
"max_context_window": 1000000,
"effective_context_window_percent": 95
}
]
}
补充信息
- 自定义目录 JSON 中
base_instructions 为必填字段,缺失时会报 missing field 'base_instructions' 解析错误,但文档中未提及此要求
- 官方目录(
models_cache.json)包含完整的 ModelInfo 定义(含 context_window),但自定义/本地模型除非通过 model_catalog_json 手动提供,否则没有等价定义
预期行为
以下任一方案均可:
model_context_window 应作为硬覆盖,无论模型是否存在于目录中都生效
- 当模型 slug 在所有目录中都找不到时,Codex 应回退使用 config.toml 中的
model_context_window,而非静默使用默认值
- 至少在
model_context_window 被设置但因目录解析优先级而被忽略时,输出一条警告日志
复现步骤
- 在
~/.codex/config.toml 中配置自定义供应商和非 OpenAI 模型:
model = "mimo-v2.5"
model_provider = "custom"
model_context_window = 1000000
[model_providers.custom]
name = "custom"
wire_api = "responses"
requires_openai_auth = true
base_url = "http://127.0.0.1:57321/v1"
- 启动 Codex 会话
- 观察到上下文窗口只有258k
日志 / 配置片段
Codex++ 版本
1.2.24
系统
macOS
提交前确认
影响范围
供应商切换 / 配置写入
当前行为
config.toml中的model_context_window对自定义供应商不生效Codex CLI 版本: 0.142.2
问题描述
使用自定义模型供应商(如本地代理转发的 mimo-v2.5-pro、deepseek-v4-pro 等)时,在
config.toml中设置model_context_window = 1000000无效。Codex 会忽略该值,回退到默认上下文窗口 "context_window": 272000。根本原因
Codex 的实际上下文窗口从
ModelInfo.context_window(模型目录中的字段)解析,而非 config.toml 的model_context_window。解析链路如下:运行时限制变量(
full_context_window_limit、auto_compact_scope_limit,定义于core/src/session/turn.rs)完全由ModelInfo.context_window计算得出。model_context_window虽然存在于ConfigToml结构体中,但对于目录中不存在的模型,它不会覆盖目录解析结果。这可以通过 config lockfile 中的
save_fields_resolved_from_model_catalog机制确认——模型目录解析出的字段作为最终生效值被保存。当前的 Workaround
创建自定义模型目录文件
~/.codex/model_catalog_custom.json,显式定义模型的context_window以及必填的base_instructions字段,然后在 config 中指向它:补充信息
base_instructions为必填字段,缺失时会报missing field 'base_instructions'解析错误,但文档中未提及此要求models_cache.json)包含完整的ModelInfo定义(含context_window),但自定义/本地模型除非通过model_catalog_json手动提供,否则没有等价定义预期行为
以下任一方案均可:
model_context_window应作为硬覆盖,无论模型是否存在于目录中都生效model_context_window,而非静默使用默认值model_context_window被设置但因目录解析优先级而被忽略时,输出一条警告日志复现步骤
~/.codex/config.toml中配置自定义供应商和非 OpenAI 模型:日志 / 配置片段
Codex++ 版本
1.2.24
系统
macOS
提交前确认