opencodex Provider Context-Cap Toggle 设计解析为 Codex 模型目录实现可逆的上下文窗口上限【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址: https://gitcode.com/gh_mirrors/ope/opencodex本设计文档系列00_design.md、10_implementation.md、20_global-cap-and-set-all.md完整记录了 opencodex 中Provider 级上下文上限开关从设计、实现到全局化演进的完整过程。读完本文你将掌握该开关如何以最小的侵入性修改 Codex 可见的模型目录catalog、为什么把上限存放在根级配置而非 provider 元数据中、Cap 350k开关的 API 契约与目录降级语义以及后来如何演进为全局可配置的100k–950k上限值与一键Set all控制。功能定位一个 provider 级、非 Kiro 专属的开关opencodex 的 Models 页面原本已经允许用户逐个开关模型以及按 provider 批量启用/禁用。本次改动在其之上新增一个 provider 级开关当开关打开时opencodex 会把该 provider 的大上下文模型context window 超过上限的模型向 Codex 通告为最多 350k 上下文小于等于上限的模型保持不变上游请求路径完全不修改设置持久化在 opencodex 配置中开关每次切换后刷新 Codex 模型目录。设计文档特别强调该设置是provider 通用的而不是 Kiro 专用。若某个 provider 没有任何超过 350,000 上下文的模型打开开关是安全的 no-op——目录封顶只会降低已知上下文窗口绝不会凭空捏造数值。核心设计决策根级配置而非 provider 元数据设计文档给出了一个明确的架构决策——把 provider 上下文上限存为根级配置而不是放进providers[provider].modelContextWindows内部providerContextCaps?: Recordstring, number;该决策的推理在 00_design.md 中列出四点保留原始 provider/model 元数据不被污染关闭是可逆的无需重建旧的modelContextWindows映射UI 只需切换一个 provider 开关不必逐行编辑每个模型未来若要支持不同的上限值无需数据迁移。该字段的最终落点可在 src/types/config.ts 中看到providerContextCaps?: Recordstring, number;配置 schema 侧src/config/schema/config-schema.ts增加了显式校验保证手写的config.json也诚实合规providerContextCaps: z.record(z.string(), z.number().int().positive()).optional(),从源码实现看src/providers/context-cap.ts上限值必须满足有限的正数才有效export const DEFAULT_PROVIDER_CONTEXT_CAP 350_000; function isValidContextCap(value: unknown): value is number { return typeof value number Number.isFinite(value) value 0; }行为契约/api/models扩展与新增/api/provider-context-caps设计文档为管理 API 定义了完整契约全部在 src/server/management/model-rows.ts 等实现中得到印证GET /api/models返回每个模型的同时附带三个新字段contextWindow?: numbercontextCap?: numbercontextCapped?: boolean新增端点GET /api/provider-context-caps返回{ caps: Recordstring, number }PUT /api/provider-context-caps接收{ provider: string, enabled: boolean }。启用时保存caps[provider] 350000禁用时从映射中移除该 provider。端点拒绝未知/无效的 provider 名称。每次 PUT 保存配置、清除该 provider 的模型缓存并像模型可见性变更一样尽力刷新 Codex 目录clearModelCache(provider)refreshCodexCatalogBestEffort()。Models 页面在每个 provider 标题旁All on/All off旁边显示Cap 350k开关。没有超过 350k 模型的 provider 也显示开关启用无害因为目录封顶只会降低已有上下文窗口。目录封顶语义只降不升、绝不凭空捏造给定模型解析后的上下文窗口封顶逻辑是if providerContextCaps[provider] is a positive number: contextWindow min(resolvedContextWindow, cap)关键边界情况如果模型完全没有上下文元数据cap 不会发明出350000仍由现有目录默认行为负责。这保持了用户没有模型超过上限就是 no-op的预期。设计文档用三条规则锁定了applyProviderContextCap的行为00_design.mdapplyProviderContextCap(undefined, 350000)返回undefinedapplyProviderContextCap(500000, 350000)返回350000applyProviderContextCap(64000, 350000)返回64000。最终实现在 src/providers/context-cap.ts 中完全一致export function applyProviderContextCap(contextWindow: number | undefined, cap: number | undefined): number | undefined { if (!isValidContextCap(cap)) return contextWindow; if (!isValidContextCap(contextWindow)) return contextWindow; return contextWindow cap ? cap : contextWindow; }实现文档进一步确认封顶被线程化贯穿了所有模型解析路径10_implementation.md配置的静态模型、实时/models结果、新缓存、过期缓存回退、以及 jawcode 增强路径——cap 在既有 provider/model 提示hints之后应用确保它只能降低已知上下文窗口绝不发明数值。全局上限值与 Set All从固定 350k 到用户可控第三阶段20_global-cap-and-set-all.md将硬编码的 350k 演进为全局可配置值但上限依然是所有 provider 共享的单一全局值而非 per-provider在 Models 页面页头与第一个 provider 区块之间新增一行可点击控件cap 值下拉框100k–950k50k步进外加Custom...数值输入与一个Set all开关。contextCapValue?: number存入根配置src/types/config.tsschema 校验为z.number().int().positive().optional()src/config/schema/config-schema.ts未设置时回退到DEFAULT_PROVIDER_CONTEXT_CAP。全局值变更时所有已启用 provider 被重新指向新值保证开关视觉状态一致D2 决策。Set all on以当前全局值写入目录中每个 providerSet all off清空整个providerContextCaps。API 演进GET /api/provider-context-caps返回{ cap, value, caps }cap保持兼容性回退值value为生效全局值PUT按请求体形态分支{ value }全局值变更、{ setAll }全量开关、{ provider, enabled }单 provider 切换启用时写入当前全局值而非硬编码常量。无效value非有限、≤0以400拒绝并强转为正整数。实现侧src/providers/context-cap.ts新增globalContextCapValue、setGlobalContextCapValue可带applyToAll重定向所有已启用 provider、setAllProviderContextCaps三个辅助函数setProviderContextCap在启用时写入生效的全局值。UI 侧使用fmtK辅助函数把350000渲染为350k非 50k 网格的自定义值按其自身k值或原始 token 数展示provider 开关标签与封顶行标记Cap 500k、500k cap都显示实际生效值而非字面350k。验证计划与交付物三个阶段的验证命令保持一致贯穿始终bun test tests/config.test.ts tests/codex-catalog.test.ts tests/server-auth.test.ts bun x tsc --noEmit cd gui bun run build测试覆盖在 tests/codex-integration/codex-catalog.test.ts、tests/server/config.test.ts 与 tests/server/management-provider-validation.test.ts 中均有印证核心断言包括cap 将实时元数据从500_000降至350_000cap 不会抬高64_000cap 不会为无上下文的静态模型发明数值过期的缓存元数据同样被施加 capjawcode 目录元数据不得在 provider cap 逻辑之后恢复 1M 上下文窗口B 阶段回归修正10_implementation.mdGET 返回 caps 映射PUT 启用并持久化、禁用并移除 provider未知 provider 被拒绝/api/models包含 cap 元数据contextCapValue接受合法正整数并 round-trip非法值0/负数/非整数被 schema 拒绝。提交记录遵循设计→实现→测试的节奏docs(models): design provider context cap toggle、feat(models): add provider context cap toggles、feat(models): global context cap value set-all toggle以及后续的 backend/UI/test 拆分提交。设计过程还特意划定了脏文件红线——src/adapters/kiro.ts与tests/kiro-stream.test.ts等与本次改动无关的既有未提交修改不得被触碰、暂存、回退或用作完成证据后续阶段的红线文件为 cursor adapter 相关文件。总结可逆、无损、贯穿全链路的目录封顶从设计到落地的完整演进可以概括为一条主线用根级、可逆、只降不升的配置统一控制 Codex 可见目录中 provider 模型的上下文窗口。核心可复用结论有三点其一上限独立于 provider 元数据存储使开关可逆且无需迁移其二封顶语义严格限定为min(resolved, cap)未知窗口不被发明、小窗口不被抬高天然保证 no-op 安全性其三cap 贯穿静态配置、实时获取、缓存与 jawcode 增强全部路径且 API 提供单 provider 切换、全局值变更与 Set all 三档控制粒度。这份设计文档与其最终实现src/providers/context-cap.ts、src/codex/catalog/为 opencodex 的模型可见性控制提供了一个最小侵入、最大可逆的范本。【免费下载链接】opencodexUniversal provider proxy for OpenAI Codex Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code项目地址: https://gitcode.com/gh_mirrors/ope/opencodex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
我是歌手梁博入门到精通性能优化避坑指南 我是歌手梁博入门到精通性能优化避坑指南 看了一堆教程还是不会写项目,这是不是你的真实写照? 别慌,你不是一个人。 很多开发者在从【入门到精通】的进阶路上,都卡在了“原理懂但手废”的死胡同里。… · 2026/9/23 3:30:27
二维条形码存储管技术解析与市场应用 1. 二维条形码存储管市场概述二维条形码存储管作为现代数据存储与识别技术的重要载体,正在经历从传统工业标识向智能化数据媒介的转型。这种直径通常在5-15mm之间的微型存储装置,通过激光蚀刻或喷墨打印技术将二维码图案永久固定在管体内壁,单… · 2026/9/23 3:30:27
基于Python的校园消费行为分析与经济评估系统实战解析 简介:面向高校数据分析学习者、管理决策者及相关课题开发者,这份基于Python的校园消费行为分析与经济评估系统提供完整可运行的源码与数据。系统依托校园智能卡消费记录,运用pandas、numpy进行数据处理,借助seaborn、plotly等完成… · 2026/9/23 3:30:21
Atlas 300I 驱动安装避坑指南:为何 Ubuntu 20.04 翻车而 18.04 稳如磐石 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 7:54:13
嵌入式C++在STM32上的实战:打破“跑不动”的刻板印象 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 7:54:13
高通410随身WiFi刷Debian后驱动与网络配置实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 7:54:07
35+ 架构师的技术广度与深度平衡:如何构建不可替代的“T 型”知识结构 35 架构师的技术广度与深度平衡:如何构建不可替代的“T 型”知识结构在技术职业生涯迈入 35 岁之后,很多资深工程师常常会陷入一种极其迷茫的“能力边界焦虑”:
过于追求深度(I 型盲区):十几年只死磕某一个… · 2026/9/23 7:54:07
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29