尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

oh-my-pi Model Catalog:面向 Coding Agent 的模型数据库、兼容性规则引擎与动态发现体系

oh-my-pi Model Catalog:面向 Coding Agent 的模型数据库、兼容性规则引擎与动态发现体系 oh-my-pi Model Catalog面向 Coding Agent 的模型数据库、兼容性规则引擎与动态发现体系【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi导读oh-my-pi/pi-catalog是 oh-my-piOMP⌥ 代号驱动的编码 Agent内置的模型目录包它同时承载三件事随包分发、可离线查询的模型数据库models.json用 KDL 声明式编写、再编译为rules.json的模型身份/兼容性策略树以及面向 OpenAI 兼容端点、Gemini、Codex、Cursor、Antigravity、Ollama 等形态的运行期模型发现。读完本文你将掌握该包的模块划分与子路径导入方式、gen:compat/gen:models两条生成流水线的边界、KDL 规则树的层级结构与核心语法以及带分时定价peak/off-peak、历史费率卡的成本计算 API 的完整调用方式。包的定位模型目录为什么值得做成独立模块oh-my-pi/pi-catalog仓库内位于 packages/catalog版本见 package.json解决的是一类很容易被低估的问题一个长期运行的编码 Agent 会面对成百上千个模型标识符——同一模型在不同提供商含各种代理/网关/转售商下有不同的 SKU 名称、限速、上下文窗口、定价甚至“思考thinking”能力标注。如果这些信息散落在各模块的硬编码里任何一处上游改价、改名或推出新 SKU都需要改代码、发版本。该包把这类信息收敛为三层数据层models.json内置模型数据库记录每个模型的定价、上下文窗口、模态modality、thinking 支持等策略层compat/rules下的 KDL 策略树描述模型身份taxonomy、类/提供商级联规则cascade、运行期行为词汇表runtime behavior vocabulary并编译为提交进仓库的rules.json执行层compat模块的规则引擎classifyModel分类、resolveModelPolicy级联解析以及行为访问器与 OpenAI/Anthropic 线协议wire构造器。包的全部入口由 src/index.ts 统一导出同时支持从子路径按需导入oh-my-pi/pi-catalog/module这在 package.json 的exports字段中有完整映射如./models.json、./discovery/*、./compat/*、./wire/*等。包直接分发 TypeScript 源码、无构建步骤要求 Bun ≥ 1.3.14安装方式为bun add oh-my-pi/pi-catalog。模块全景一张表看懂 Whats inside原文档给出的模块职责表是该包的索引地图逐项展开如下模块职责关键源码models.jsonmodels内置模型数据库定价、上下文窗口、模态、thinking 支持src/models.tsprovider-models提供商目录描述符CATALOG_PROVIDERS以及按提供商的模型解析规则src/provider-models/index.tsdiscovery针对 OpenAI 兼容端点、Gemini、Codex、Cursor、Antigravity、Ollama 的运行期模型发现src/discovery/index.tscompat/rules已检入的 KDL 策略树由bun run gen:compat编译为rules.jsonsrc/compat/rulescompat规则引擎classifyModel、resolveModelPolicy、行为访问器、collapse、OpenAI/Anthropic wire 构造器src/compat/axes.ts 等identity机械性 id 工具基于内置索引的引用解析、方言、选择优先级、tokenizer 家族src/identity/index.tsmodel-thinking基于已解析模型记录的 thinking 运行期助手getSupportedEfforts、effort 钳制/映射、wire-id 路由src/model-thinking.tsmodel-manager/model-cache运行期模型注册表带发现刷新与磁盘缓存src/model-manager.tswire线级助手Codex、Gemini headers、GitHub Copilotsrc/wireeffort推理 effort 级别定义src/effort.ts其中effort模块定义了面向用户的六个思考级别按强度升序为minimal → low → medium → high → xhigh → maxTHINKING_EFFORTS常量这一枚举贯穿分类 override、级联 thinking 轴与运行期 effort 钳制是整个包的基础词汇。两条生成流水线models.json 与 rules.json 是产物而非手写源包内最重要的工程约定写在原文档第一节永远不要手改src/models.json和src/compat/rules.json。它们是生成产物bun run gen:compat # src/compat/rules/**/*.kdl - src/compat/rules.json bun run gen:models # upstream sources rules - src/models.jsongen:compat由 scripts/compile-compat.ts 执行把 KDL 策略树编译成规则引擎消费的 JSONgen:models由 scripts/generate-models.ts 执行从上游来源stencil.so、提供商目录发现、OpenCode 文档结合rules.json重新“烘焙”模型库脚本目录中还包含 scripts/equivalence.ts负责等价模型候选的生成与打分但候选生成和打分算法所需的全部作者维护 token 都声明在 KDL 的discovery词汇表里。配套的测试 test/compat-compile.test.ts 会在rules.json与 KDL 源漂移时失败test/compat-parity.test.ts 则证明引擎能复现models.json里所有已烘焙的 compat/thinking 值。变更纪律模型或提供商的条件策略身份、effort 阶梯、wire 怪癖、模态/限额/定价修正、API 路由、名册排除一律写在 KDL 树里TypeScript 改动只允许涉及“传输机制”——即provider-models/descriptors.ts中的提供商条目、provider-models/openai-compat.ts中的发现/请求管道、以及scripts/generate-models.ts中的生成器接线。改完.kdl必须同时提交重新生成的rules.json以及值变化时重新烘焙的models.json。KDL 策略树身份分类、级联规则与运行期行为三类所有权分层ownership stratasrc/compat/rules/目录按职责划分文件规则作者被明确要求“不要把统计上常见的提供商行为挪进类文件也不要把血统事实挪进提供商文件”。四个目录的职责如下taxonomy/*.kdl定义身份——类成员关系、产品家族、修订版本提取、人工复核的精确修正override、后缀折叠collapseclasses/*.kdl定义模型血统事实——模型线固有的行为可限定到建立该事实的提供商或请求适配器providers/*.kdl定义部署契约——宿主强加的行为以及 taxonomy 无法精确表达的各模型残留residueruntime/behavior.kdl精确模型查找之前/之外的启发式——responses 路由、API 路由、配额档位、计划要求、模型限额、名册排除、托管默认、定价对等auth/provider.kdl提供商的身份认证契约供oh-my-pi/pi-ai的注册表引擎解释。分类的三大概念class / family / revisionclass类厂商血统如gemini、anthropicfamily家族类内的产品线如flash、pro、sonnet、opusrevision修订版从模型名提取的major.minor.patch三元组缺失的 minor/patch 按 0 处理。分类时会对完整模型标识符做 trim 与小写化bare name是最后一个/之后的段。类成员匹配器按以下排名竞争数值越大越优先同分按匹配 token 字节长度仍并列则报歧义错误全部不匹配时归入unknown类节点排名匹配语义exact token4整个 bare name 等于 tokenbounded token3bare name 等于 token或以-_.:或 ASCII 数字开头namespace token2完整标识符的某个非空/分段等于 tokennamespace token bounded#true2按/.:切分某段满足 bounded 规则唯一带属性的匹配器prefix token1bare name 以 token 开头glob pattern0基于 bare name 的锚定*通配家族规则含必填glob属性与可选的有符号整数priority默认 0按(priority, glob 非通配字节数)排序如family lite glob*flash-lite* priority10优先于family flash glob*flash*。修订提取通过revision prefix...anywhere#true允许出现在 bare name 任意位置、skip-bare显式声明不带修订的 bare name完成提取从第一个 ASCII 数字开始最多读取三个无符号 8 位数字分量缺失分量补 0——因此claude-opus-4-6得到4.6.0。复核过的身份修正overrideoverride节点只含属性、无子块必填id稳定且全局唯一的复核 ID、model精确 bare 标识符、rationale、provenance溯源可选provider、logical修正后的逻辑标识符、class、family、revision、effortoff/minimal/low/medium/high/xhigh/max、thinking-variant、expires-at-msUnix 毫秒过期时间观测时间达到或超过该值后 override 失效。带provider的 override 优先于全局 override(provider, model)组合必须唯一。代码注释里通常带有 census 溯源provenance例如frozen census case identity-01。后缀折叠与发现词汇表collapse节点是整个清单中唯一、必有的一个定义处理thinking-suffix如-thinking、pair-token声明 thinking 孪生兄弟 token如sonar-reasoning-pro与sonar-pro、effort-suffix如-minimal/-max可带except-bare-prefix、effort-lane-suffix、routing-variant-suffix、variant-family可带{rev}占位符的模板化家族如gemini-{rev}-flash、provider-alias。discovery节点则声明recover-canonical-params、borrow-responses-route、billing-variant-suffix、trailing-marker、pro-reasoning-alias、canonical-family-token、wrapper-prefix/synthetic-prefix如hf:等发现期词汇。这些词汇全部服务于 scripts/equivalence.ts 的候选生成但所有作者维护的 token 都集中声明在 KDL 里。级联cascade与行为轴级联文档以class或provider开头选择器可嵌套class根/提供商下→on按部署提供商仅根 class 下→on-api按请求适配器→family→revision如2.5 4→models精确 id 或vendor/*锚定通配也可用tokenname。每条规则按(model-selector exactness, constrained-dimension count, priority)字典序取最高分同分且赋同一轴即歧义错误文件与声明顺序从不充当决胜因素。轴的词汇表是封闭的、集中定义在 src/compat/axes.ts一张表把每个 kebab-case 指令映射到解析后的 camelCase 字段、所属命名空间wire/thinking/catalog、值形状与可选枚举值编译器据此拒绝未知指令。值形状有三种标量、数组、对象。一个实用细节long-context-cost对象轴支持绝对费率或input-threshold multiplier两种写法后者在构建时按行内实时基础价推导阶梯费率从而自动跟随上游价目表例如 xAI SuperGrok 200K 档。运行期行为词汇runtime/behavior.kdl的根节点是behavior其子节点形状严格覆盖openai-responses-heuristic、model-operations、cursor-effort、cursor-model-parameter、quota-tiers、hosted-default、api-routes可带strip-prefix#true、model-limits、exclude-models、plan-requirement、pricing-peer。这些值直接从它们替代的 TS 常量逐字复制而来运行期访问器在 src/compat/behavior.ts。仓库中 auth 契约auth/*.kdl还声明了每种提供商唯一一个auth id节点支持api-key、oauth-code、device-code、custom四种登录形态OAuth 客户端 id 以 base64 混淆存储、运行期解码——这是为了让密钥扫描器保持安静同时仍可在运行期还原。动态发现从 OpenAI 兼容端点到各厂商形态discovery模块src/discovery负责把运行期环境中的真实模型“找出来”与静态内置库互补openai-compatible.ts面向 OpenAI 兼容端点的通用发现gemini.ts / gemini-cli.tsGemini 与 Gemini CLIcodex.ts、cursor.ts含 cursor-proto.ts、antigravity.ts、devin.ts含 protobuf 支持、gitlab-duo-workflow.ts、ollama.tsprotobuf.ts若干厂商发现协议依赖的 protobuf 解析。本地模型服务在用户侧文档 docs/models.md 有具体约定Ollama 未显式配置时注册表自动添加隐式可发现提供商base URL 取OLLAMA_BASE_URL→OLLAMA_HOST→http://127.0.0.1:11434上下文窗口取OLLAMA_CONTEXT_LENGTH→/api/show元数据 → 128000无鉴权llama.cpp 默认http://127.0.0.1:8080LM Studio 默认http://127.0.0.1:1234/v1也可借道/v1/models发现其他 OpenAI 兼容本地服务LiteLLM 则按GET /model_group/info→/v2/model/info→/model/info→/v1/model/info依次探测管理元数据全部不可用时回退GET /models。发现结果交给model-manager/model-cachesrc/model-manager.ts做运行期注册、刷新与磁盘缓存。对应的大量发现测试可从 test/codex-discovery.test.ts、test/cursor-discovery.test.ts、test/gemini-cli-discovery.test.ts 等文件查看。成本计算时间感知的定价 APImodels子路径根导出同样可用提供一组时间戳感知的定价助手这是原文档表格的完整 APIAPI结果calculateCost(model, usage, timestamp?)用model.cost更新并返回usage.costcalculateUsageCost(cost, usage, timestamp?)用ModelCost更新并返回usage.costcalculateUncachedInputCost(cost, promptInputTokens, timestamp?)返回完全未缓存提示的计价结果getTimeBasedPricingPeriod(cost, timestamp?)返回peak、off-peak或无调度时undefinedgetNextTimeBasedPricingTransition(cost, timestamp?)返回时间戳之后严格意义上的下一个 peak/off-peak 切换时刻或undefined实现位于 src/models.ts时间戳语义时间戳为 Unix 毫秒省略时对带调度的价格使用当前时间。平坦的 token 价格不受影响。选择顺序先取“时间戳之前最新生效”的费率卡resolveTokenCost遍历effectiveRates取effectiveFrom timestamp且最晚者再取其长上下文档位longContext.inputThresholdinputThresholdInclusive决定阈值是否含等号最后应用 peak/off-peak 倍率。分时判定isPeakPricingPeriod用纯算术Unix 纪元是周四逐分钟判定是否落在某个 peak 窗口内全程不分配Date对象窗口 start 包含、end 排除跨午夜窗口必须拆到两天。cache-write 特例cacheWriteCost在 provider 上报 TTL 明细usage.cttl时按 5 分钟档与 1 小时档分别计价1h 写入按input * 2推导未归属的残差按平坦费率计价保证部分/过期明细永远不会让写入 token“免费”。验证前置src/pricing.ts 里的isTimeBasedCost/materializeTimeBasedCost会在缓存模型行被接纳前严格校验调度——周几必须是0-6去重、窗口分钟须满足0 start end 1440、effective-from必须是合法的 ISO UTC 时间戳且全局去重。ModelCost.timeBased 的类型化元数据ModelCost.timeBased是可选类型化元数据TimeBasedCostoffPeakMultiplier非负倍率、peakWindowsUTC 周几weekdays数组、Sunday 0start-inclusive/end-exclusive 的startMinute/endMinute以及可选effectiveRates——每个生效费率都是一个完整的TokenCost带effectiveFromUnix 毫秒和可选longContext档位从该时刻起整体替换基础卡。KDL 侧的语法在 src/compat/rules/README.mdtime-based-cost使用具名子对象morning、afternoon、flash-pricing等任意唯一名weekdays是逗号分隔的无空格 UTC 周几串。用户侧的计价约定以 DeepSeek 为例KDL 中的调度会物化为ModelCost.timeBased但不会给编码 Agent 的models.yml增加timeBased输入字段。用户侧行为见 docs/models.mdOMP 以助理消息的请求开始时间戳为整次请求选择费率卡与档位跨边界请求如何计费是“估算约定”而非对服务端账单的断言——能拿到 provider 上报的货币成本时优先用它。已完成的会话保留已记录的金额跨定价边界、切换模型或重开会话都不会重估历史。状态栏的cost段在当前激活的 provider/model 上按墙钟追加↑peak或↓off-peak箭头并在档位切换时即使空闲也刷新无调度价格的模型不显示箭头。models.yml显式cost含modelOverrides是平坦价格覆盖会禁用该模型继承的分时定价省略cost则保留目录定价。自定义模型省略cost时会继承其参考行的费率卡与调度按模型 id 查表并优先取限额最宽的行。真实的 DeepSeek 规则就在 providers/deepseek.kdldeepseek-flash、deepseek-v4-flash、deepseek-v4-flash-vision-exp共享 Flash 费率卡——peak 时段为周一至周五 UTC 01:00–04:00 与 06:00–10:00其余时间含周末5 折deepseek-v4-pro初始按 $1.32/$0.044/$3.96输入/缓存读/输出每百万 token计费自2026-09-14 04:00 UTC起改用 Flash 费率卡effective-rates的flash-pricing条目调度不变。文件内以residue:注释保留了“为什么这些残留必须存在”的证据如 Flash 定价名称不是 taxonomy 家族、上游发现未播种 bare alias 限额需limits-patch补足 1M 上下文/384K 输出。由于这是目录策略元数据它并非编码 Agentmodels.yml支持的调度语法——两者边界清晰。测试与质量保障gen:compat之后可用以下命令验证规则树与引擎的一致性语法详见 src/compat/rules/README.mdcd packages/catalog bun run gen:compat # compiles rules/ → src/compat/rules.json (committed) bun test test/compat-compile.test.ts test/compat-conformance.test.ts \ test/compat-taxonomy.test.ts test/compat-cascade.test.ts test/compat-parity.test.ts测试目录 packages/catalog/test 覆盖面极广compat-compile防漂移、compat-parity证明引擎复现全部已烘焙值、time-based-pricing/long-context-pricing覆盖计价、model-thinking/model-tokenizer覆盖运行期推理辅助还有一批issue-NNNN-repro.test.ts回归用例如github-copilot-model-limits、codex-discovery、nanogpt-model-limits以及海量单提供商测试Azure、Bedrock、Cerebras、Fireworks、Groq、Moonshot、Ollama、SiliconFlow、Together、xAI 等说明每个 provider 的发现与 wire 行为都有专门用例守护。小结oh-my-pi/pi-catalog是 oh-my-pi 的“模型常识层”静态内置库保证离线可用与确定性KDL 策略树把身份/兼容性/定价/鉴权等易变事实集中为可审计、可生成的声明式源运行期发现则负责把真实世界的端点映射回这套语义。对使用者而言最需要记住的三件事是不要手改models.json/rules.json改.kdl后重跑gen:compat/gen:models并一起提交定价 API 一律传请求开始时间戳并在显示时保留金额以及KDL 调度只是目录元数据models.yml的timeBased并不存在——需要调整分时定价时正确的位置是src/compat/rules/下的 KDL 文件。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表