[Bug] Magpie 单个模型缺少 modalities.input 导致所有 Provider 验证失败
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #2110 di @wibus-wee — integrata
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 56/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
Direzione di ricerca
Start with apps/cli/src/agent/magpie-runtime.ts, especially modelSchema, readMagpieModels(), and the prepareMagpieRuntime() path. Reproduce the reported schema failure with the minimal catalog in the issue, then inspect downstream modalities?.input.includes('image') uses before changing how missing input is handled. Done means mixed catalogs with missing modalities, output-only modalities, and explicit text or image input are handled safely, with regression coverage preserving model ID and size validation.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Affected area
Agent runtime / ACP
Installation method
Desktop release
Lody version or commit
0.108.1
Operating system
macOS 27.0.1 arm64
Agent or runtime
Magpie 0.1.1725;通过 Magpie 导入的内置 Claude、Codex、Pi、Kimi、Grok Provider。
What happened?
导入 Magpie 后,设置 → Agents 中的 Claude-magpie、Codex-magpie、Pi-magpie、Kimi Code-magpie、Grok-magpie 均显示「Provider 验证失败,请重试。」;重试仍失败。
只读检查本地网关:
GET /api/hello:HTTP 200,name: "magpie"。GET /v1/models:HTTP 200,返回 91 个模型,没有重复 ID。- 第 81 个模型
commandcode-plan/zai-org/GLM-5.3的modalities只有output: ["text"],没有input。 - Lody 对整份目录执行 schema 校验,因此单个模型缺少能力元数据会阻断全部 Magpie Provider 的准备流程。
What did you expect?
缺少可选能力描述时,Lody 应能采用保守的既有回退行为,或明确处理受影响的模型,避免让无关的有效模型和所有 Magpie Provider 一起无法使用。
至少应在诊断中保留具体模型和字段,而非把非空目录统一提示为 invalid or empty。
How can we reproduce it?
- 启动 Magpie,并选择 Command Code Plan 下的
zai-org/GLM-5.3。在上述版本的现用环境中,该模型出现在/v1/models,但只返回modalities.output。 - 通过 Magpie 导入 Lody 的多个内置 Provider。
- 打开 Lody → 设置 → Agents,观察所有导入的 Provider 验证失败;点击「重试」仍失败。
- 检查日志中的
Magpie returned an invalid or empty model catalog。
模型对象中触发问题的字段摘录:
{
"id": "commandcode-plan/zai-org/GLM-5.3",
"display_name": "GLM-5.3",
"modalities": {
"output": ["text"]
}
}
维护者也可为 readMagpieModels() 注入 fetcher:让 /api/hello 返回 {"name":"magpie"},让 /v1/models 返回下面的最小目录,即可触发同一 schema 条件,无需真实账号或推理请求:
{
"object": "list",
"data": [
{
"id": "example-text-model",
"modalities": { "input": ["text"] }
},
{
"id": "example-output-only-model",
"modalities": { "output": ["text"] }
}
]
}
How often does it happen?
Every time
相同目录下,现有日志中的多次准备/重试均失败;对捕获目录的隔离 schema 校验稳定复现。未跨机器复测。
Relevant log output
以下摘录移除了工作区标识和其他无关信息:
[acp-capabilities] Refresh failed (cliType=builtin agentType=claude): Magpie returned an invalid or empty model catalog
[acp-capabilities] Refresh failed (cliType=builtin agentType=codex): Magpie returned an invalid or empty model catalog
[acp-capabilities] Refresh failed (cliType=builtin agentType=pi): Magpie returned an invalid or empty model catalog
[acp-capabilities] Refresh failed (cliType=builtin agentType=kimi): Magpie returned an invalid or empty model catalog
[acp-capabilities] Refresh failed (cliType=builtin agentType=grok): Magpie returned an invalid or empty model catalog
隔离校验给出的具体错误:
{
"expected": "array",
"code": "invalid_type",
"path": ["data", 80, "modalities", "input"],
"message": "Invalid input: expected array, received undefined"
}
Additional context
源码定位
检查 0.108.1 安装包的 resources/cli/index.js,并对照检查时的公开 main(固定在 66c9d019046951b3222ef75ee9ca321d25b011c5),两者具有相同逻辑:
- modelSchema / catalogSchema:整个
modalities可以缺省,但一旦存在,其input就是必填数组。 - readMagpieModels:整份目录一次性
safeParse,任意一项失败便抛出通用错误。 - prepareMagpieRuntime:所有支持的 Magpie runtime 都先读取并校验相同目录。
上述 main commit 用于定位公开源码,不作为 0.108.1 的精确构建 commit。
已执行的对照验证
从安装包提取该 schema 定义,配合安装包内的 Zod,对实际捕获的 91 项响应进行隔离校验:
| 输入 | 结果 |
|---|---|
| 原始响应,91 项 | 失败,唯一错误为 data[80].modalities.input 缺失 |
仅为该项补上 input: ["text"],仍为 91 项 |
通过 |
| 仅移除该项,剩余 90 项 | 通过 |
这只证明模型目录校验的触发条件;没有修改实际网关、安装包或用户配置,也没有构建 main、部署修复或验证真实对话调用。
兼容性背景与修复方向
OpenAI 的模型列表接口定义没有要求 modalities.input;这是扩展元数据。这里只报告 Lody 对缺省扩展字段的处理及失败影响范围,不据此断言双方是否另有私有协议约定。
建议兼容缺少 input 的情况,并沿用明确、保守的能力回退;保留模型 ID、大小上限等边界校验。若改为允许 input 缺省,还需一起处理下游多处 m.modalities?.input.includes('image'),否则会将验证失败变成运行时异常。回归用例应覆盖「整个 modalities 缺省」「只有 output」「显式 text/image input」及多个模型混合的目录。
Before submitting
- I searched the existing issues and did not find a duplicate.
- This report concerns an open-source component in this repository, not a hosted service, Web or mobile app, account, or billing issue.
- This is not a security vulnerability; security reports follow the repository's security policy.
- I removed credentials, private source, conversations, prompts, personal data, and other sensitive information.
- Lingua principale
- TypeScript
- Stelle
- 1.2k
- Fork
- 141
- Merge medio
- 12h 35m
- PR unite (30g)
- 664
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di LodyAI/Lody
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
[Feature Request] Default macOS UI text to SF Pro Display with native font smoothingForse già presa @Innei l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Opening a PDF in the file preview crashes with "The container must be absolutely positioned"Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
LodyAI/Lody#1141 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug] Chat landing machine picker stays loading until full doc-meta scanForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
LodyAI/Lody#496 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Northeastern-Electric-Racing/FinishLine#4660 ·
I maintainer di solito rispondono entro 2 giorni
-
BeOS .json missingAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
mihaip/infinite-mac#475 ·
-
Let TypeScript accept an initial object in ReactiveDictForse già presa @yograj-vijay-yadav l’ha presa oggi. Apertabug good first issue help wanted workshop
Difficoltà 2/5 1-3 ore Idoneità per principianti 92/100
meteor/meteor#14919 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
marmelab/atomic-crm#401 ·
I maintainer di solito rispondono entro 1 giorno
-
account: profile
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 5 giorni