十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

marimo 的 LLM Info 数据包:模型目录结构、codegen 与 models.dev 同步机制详解

marimo 的 LLM Info 数据包:模型目录结构、codegen 与 models.dev 同步机制详解 marimo 的 LLM Info 数据包模型目录结构、codegen 与 models.dev 同步机制详解【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimomarimo 是一个 AI 原生的响应式 Python notebook其编辑器内的 AI 补全、聊天等能力需要一份模型与供应商元数据清单来驱动模型选择、能力展示与价格提示。packages/llm-info正是承载这份数据的专用包它以 YAML 为唯一事实来源通过pnpm codegen生成 JSON 产物并通过pnpm sync-models从 models.dev 增量同步最新模型。阅读本文后你将掌握该数据包的目录结构、models.yml/providers.yml的字段契约与写法、如何手工新增一个模型以及如何安全地执行上游同步并理解其去重、过滤与幂等语义。一、包定位marimo 里的模型情报中心marimo-team/llm-info定义于 packages/llm-info/package.json版本 0.1.0、private: true是一个 TypeScript 数据包不包含业务组件逻辑只负责维护两类数据模型数据来自各家 provider 的 LLM 条目含名称、模型 ID、能力thinking / tool_calling、输入输出模态text / image / pdf、发布日期与每百万 token 的价格供应商数据OpenAI、Anthropic、Google、Amazon Bedrock、Azure、Ollama、DeepSeek、OpenRouter、xAI、Weights Biases、OpenCode Go 等 provider 的名称、ID、描述与官网地址。该包通过exports字段对外暴露多个入口见 package.json.→src/index.tsTypeScript 类型定义./icons/*→ 各供应商的 SVG 图标./models.json→ 生成的模型 JSON./providers.json→ 生成的供应商 JSON。也就是说data/generated/*.json是运行时真正被消费的产物而 YAML 只是便于人工维护的源文件。从当前仓库的packages/llm-info/data/目录结构看仅提交了models.yml与providers.yml两个源文件generated/目录由 codegen 在本地生成并未入库。二、数据结构models.yml与providers.yml2.1models.yml按 provider 分组的模型清单文件顶层是一个以provider id 为键、模型数组为值的映射。以 data/models.yml 中 Anthropic 一节为例anthropic: - name: Claude Fable 5.1 model: claude-fable-5-1 description: Anthropics most capable generally available model for ambitious, long-running coding, agentic, research, and enterprise workflows roles: [chat, edit] capabilities: [thinking, tool_calling] input_types: [text, image, pdf] output_types: [text] release_date: 2026-09-01 cost: {input: 10, output: 50}每个模型条目包含以下字段字段契约定义于 src/index.ts 的AiModel接口运行时由 src/generate.ts 中的LLMInfoSchema用 zod 强校验字段类型说明namestring展示名称如Claude Opus 5modelstring实际调用的模型 ID如claude-opus-5同一模型可出现在多个 provider 下作为独立条目descriptionstring一段人类可读的能力描述由sync-models新插入的条目此字段为空字符串等待人工补充rolesstring[]模型扮演的角色合法值chat、edit、rerank、embed、autocompletecapabilitiesstring[]能力标记合法值thinking推理、tool_calling工具调用默认[]input_typesstring[]支持的输入模态合法值text、image、pdf默认[]output_typesstring[]支持的输出模态同上默认[]release_datestringISOYYYY-MM-DD格式的发布日期存为字符串以便在 YAML/JSON 间无损往返costobject可选每百万 token 的价格USD{input, output}对应 models.dev 的cost块开源权重/自托管模型通常没有此项roles的五个取值在 src/index.ts 中以ROLES常量定义并在generate.ts中作为 zodz.enum的候选项参与校验capabilities与两种模态同理。这意味着任何不在枚举内的取值都会在pnpm codegen阶段直接报错从源头阻止脏数据进入产物。2.2providers.yml供应商元数据列表与models.yml不同这是一个数组每个元素含name、id、description、url四个字段见 data/providers.yml- name: OpenAI id: openai description: OpenAIs API for GPT models, including GPT-3.5 and GPT-4. url: https://platform.openai.com/其 schema 定义在 src/generate.ts 的ProviderSchemaurl必须是合法 URLz.string().url()id需与models.yml顶层键保持一致这样模型条目才能正确归属到供应商。三、新增一个模型YAML 编辑 pnpm codegen两步走根据 packages/llm-info/README.md为 marimo 添加新的 LLM 模型或 provider 的标准流程是编辑data目录下的models.yml或providers.yml然后运行pnpm codegen。3.1 操作步骤在 data/models.yml 中找到目标 provider 的段落若 provider 尚不存在则新建一个顶层键在该 provider 的模型数组中追加一个条目按上文字段表填写name、model、description、roles、capabilities、input_types、output_types、release_date价格信息按需写入cost运行pnpm codegen该命令定义于 package.json实际执行node --experimental-transform-types src/generate.ts检查生成的data/generated/models.json与data/generated/providers.json确认条目已序列化且字段合法。3.2 维护原则宁缺毋滥README 中特别强调了一条约束为了让用户更容易选择请将模型数量保持在最低限度聚焦于各家 provider 最新或推荐的模型。这是该数据包的核心产品哲学模型目录的价值在于帮用户做减法而不是照搬上游全量目录。marimo 的 AI 功能界面展示的是一份经过筛选的精简清单因此维护者不应盲目堆砌所有历史模型。3.3codegen的源码级流程generate.ts的main()函数src/generate.ts完整执行如下管线加载data/models.yml与data/providers.yml用yaml库解析校验loadAndValidateModels要求 YAML 顶层必须是provider id → 数组的映射否则抛错Models YAML must be a map keyed by provider id每个条目经LLMInfoSchema.parse校验。loadAndValidateProviders则要求文件必须是数组并逐项校验ProviderSchema失败时输出失败的索引号与原始条目便于排查序列化将{ models }与{ providers }分别写入data/generated/models.json和data/generated/providers.jsonmkdirSync递归确保目录存在失败时process.exit(1)汇报打印生成的总模型数、provider 数与供应商条目数。值得注意的细节是ReleaseDateSchemasrc/generate.tsYAML 解析器可能把2026-09-01这类标量解析成Date对象schema 会将其统一规整回YYYY-MM-DD的 ISO 字符串保证release_date字段的格式契约在所有产物中一致。四、从models.dev同步最新模型pnpm sync-modelsmodels.yml的人工维护无法跟上各家厂商的发布节奏因此该包提供了增量同步脚本pnpm sync-models从 models.dev 拉取全量模型目录将每个 provider 的最新模型追加到models.yml对应段落顶部同时完整保留已有的人工维护条目。4.1 命令形态与参数README 给出了四种典型用法pnpm sync-models # all providers, 10 newest each pnpm sync-models --provideranthropic # one provider pnpm sync-models -p openai,google -n 5 # multiple providers, 5 each pnpm sync-models --replace # destructive rebuild参数解析实现在 src/cli.ts 的parseCliArgs中支持--namevalue与--name value两种写法参数别名默认值说明--provider/--providers-p全部限定同步的 provider id多个用逗号分隔未知 id 会被警告并忽略若全部无效则直接报错退出防止在--replace模式下误清空文件--max-per-provider--max/-n10MAX_MODELS_PER_PROVIDER每个 provider 最多新增的条数即上游当前最新鲜的 N 个模型--mode-r等价于--replaceappend同步模式append为增量合并replace为破坏性重建--replace的破坏性语义在 src/sync-models.ts 中有明确实现该模式假装现有文件为空直接用上游数据重新渲染整份models.yml会覆盖所有人工编写的description与筛选结果因此仅建议用于初始化或整体重建场景。4.2 增量合并的底层语义同步的核心在mergeModelssrc/sources/merge.ts其逐 provider 的处理管线如下收集上游候选遍历PROVIDER_MAPmerge.ts将 models.dev 的 provider id 映射到 marimo 的 provider id。注意google-vertex会映射进google段、amazon-bedrock映射到bedrock、ollama-cloud映射到ollama——多个上游 id 可能汇聚到同一个 marimo provider按模型 id 去重先到者胜三道过滤状态为deprecated的模型被跳过价格超限的模型被跳过输入价格 30美元/百万 tokenMAX_COST_INPUT或输出价格 100美元/百万 tokenMAX_COST_OUTPUT即被过滤merge.ts命中MODEL_DENYLIST的模型被显式跳过——例如 OpenAI 的gpt-5.3-codex-spark仅存在于 ChatGPT 内、未开放 API、gpt-realtime-2.1与 marimo 的 OpenAI 集成不兼容以及 bedrock 下与全局目录重复的区域别名merge.ts按新到旧排序并截断以release_date降序排列缺失日期回退到哨兵值1970-01-01排到末尾同日期按模型 id 字典序决胜保证确定性随后截取前 N 个去重追加在 top-N 中剔除本地已存在的(provider, model)对剩余才是真正新增的条目新条目description置为空字符串等待人工填写合并写回insertIntoDocumentsync-models.ts用 YAML AST 操作将新条目前插到对应 provider 段顶部且保留原文件注释、条目顺序与段落间空行roles、capabilities、input_types、output_types以 flow 风格[a, b]渲染cost以{a: 1}风格渲染与现有文件排版保持一致。deriveRoles、deriveCapabilities等派生逻辑merge.ts会从上游字段自动推断模型 id 含embed/embedding则归入embed角色含rerank则归入rerank否则默认[chat, edit]上游reasoning字段映射为thinking能力tool_call映射为tool_calling能力输入/输出模态则只保留text、image、pdf三种已知值。4.3 幂等性与零新增行为mergeModels的注释merge.ts明确了三个值得了解的行为人工维护永不被动覆盖已有条目按(provider, model)匹配绝不会被修改所有人工 curation 得到保留幂等同样的输入连续跑两次第二次不会产生任何新增条目不回溯补缺如果 top-N 里的模型全部已被本地收录本次同步新增数为 0不会用更旧的缺失模型回填。命令结束后sync-models.ts的主流程sync-models.ts会打印added N new model(s), preserved M existing entries并提示用git diff packages/llm-info/data/models.yml审阅改动后提交 PR若无变化则提示models.yml is up to date。4.4 关于google-vertex的特例README 专门提醒google-vertex上游会映射进google段落因此 Anthropic 在 Vertex 上以default后缀暴露的模型 ID如claude-opus-5default仅适用于 Vertex若决定保留这些条目务必在description中注明Vertex-only这一限制避免用户在通用 Google 接入下误选。五、同步后的收尾codegen 与验证sync-models只改写models.yml源文件不会重新生成 JSON 产物。因此 README 明确要求同步后必须再次运行pnpm codegen让data/generated/models.json与providers.json与更新后的 YAML 保持一致。此外仓库为这套数据管线配备了完整的测试守护packages/llm-info/src/tests/cli.test.ts覆盖--provider、-n、--replace、--mode等参数的解析与非法输入拒绝逻辑schema.test.ts校验模型/供应商条目是否符合LLMInfoSchema与ProviderSchemajson-structure.test.ts验证生成的 JSON 结构符合预期形状sync-models.test.ts用预加载的 models.dev 数据而非实时请求验证增量合并、去重与幂等行为syncModels函数的modelsDev参数正是为此设计的测试注入点sync-models.ts。六、小结packages/llm-info是 marimo AI 功能的模型情报层YAML 源文件 zod 强校验 codegen 生成 JSON 产物的设计保证了模型目录既能被人工精修、又能在发布时被可靠消费而pnpm sync-models则通过 provider 映射、成本上限、显式 denylist、按日期排序截断与幂等增量合并把跟上最新模型这件事做成了可重复、可审阅、可回滚的工程流程。对想要为 marimo 扩展模型支持的开发者而言维护路径非常清晰改 YAML →pnpm codegen→ 审阅 diff → 提交对想要跟进上游的维护者而言pnpm sync-models必要时限定-p与-n→ 补全 description →pnpm codegen→ 提交即是一条完整的安全链路。【免费下载链接】marimoA reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.项目地址: https://gitcode.com/GitHub_Trending/ma/marimo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表