[Windows/Linux] TypeScript build error: missing 'thinking.budget' and compat fields in catalog.ts #5749
环境
问题描述执行 packages/llm/llm-pi-ai/src/catalog.ts:242:12 - error TS1360: packages/llm/llm-pi-ai/src/catalog.ts:267:12 - error TS1360: 原因分析问题源于 复现步骤
修复建议在
|
Replies: 3 comments
|
你的诊断方向需要修正——这三个 TS 错误不是「catalog.ts 缺字段」要补, 而是 deliberate 的 drift gate 在报警, 报错位置 这三个报错到底是什么
于是 为什么不是补字段如果是「补字段」, 你会误把 :223 maxTokensField: 'offer',
:228 thinkingFormat: 'offer',这些也是 pi-ai 的 compat 字段, dsh 用 正确的修法(参考)在新 pi-ai 下, 给三个门各补一个「分类」键即可(具体值取决于 dsh 想不想 profile 暴露这些能力): @@ packages/llm/llm-pi-ai/src/catalog.ts @@
const CHAT_TEMPLATE_VAR_GATE: Record<PiAiChatTemplateVar, true> = {
'thinking.enabled': true,
'thinking.effort': true,
+ 'thinking.budget': true, // 若 dsh 允许 profile 配置 thinking budget; 否则删这行但需另想办法
}
// OpenAICompletionsCompat gate:
maxTokensField: 'offer',
thinkingFormat: 'offer',
+ thinkingTokenBudgetField: 'withhold', // 或 'offer', 视 profile 是否暴露
// AnthropicMessagesCompat gate:
// ...
+ allowedFallbackModels: 'withhold',
真正的根因(重要)
建议
|
|
This one is worth re-checking before it gets patched: the three fields are missing because step 2 of your repro deletes
So the fix is to keep the lockfile rather than to add the fields: git checkout pnpm-lock.yaml # if it is already gone
pnpm install --frozen-lockfile
pnpm run build
Adding If you deleted the lockfile deliberately because you need a newer SDK for some other reason, say so and the ask becomes "please update the AI SDK dependency", which is a fair request and a different thread. 中文 这一条在动手打补丁之前值得重新核对:那三个字段之所以"缺失",是因为复现步骤的第 2 步删除了
因此修复方式是保留锁文件,而不是补上字段: git checkout pnpm-lock.yaml # 如果它已被删除
pnpm install --frozen-lockfile
pnpm run build
补上 如果您是出于其他原因、有意删除锁文件以使用更新的 SDK,请说明——那么诉求就变成"请升级 AI SDK 依赖",这是一个合理的请求,也是另一个议题。 |
|
@Saidoua 你的指正是对的, 我接受——锁文件是关键。我上一轮的「给门补分类」是在**没先问「到底想不想升级 SDK」**的前提下给的, 那确实是把「可撤销的构建错误」换成了「会发布出去的不匹配」, 这不该是首选。让我把两个层面分开: 我上一轮哪对、哪需要修正对的部分(我们一致): 这三个 TS 报错不是「catalog.ts 缺字段」要补——字段来自代码未针对其编写的 pi-ai 类型定义; 报错位 需要修正的部分(你点得对): 我该在确定要升级到新 pi-ai 之后才推荐「在门里分类」——那只适用于「决定 move to newer SDK」的场景。若只是「想 build 过」, 正确做法是保留锁文件, 而不是去动 gate。 所以正确的决策树
一个补充:漂移门 vs 锁文件是两件独立的事即使保留锁文件, 这些 drift gate 依然是有意的——它们保护的是「当 maintainer 主动升级 pi-ai 时, 类型不同步会 fail loud, 逼它分类」; 不是给「第三方删锁文件」预备的。所以:
感谢你的澄清——这个「lockfile 是 pin」的提醒让讨论更准确。会建议 OP 先跑你的方案; 若他确认需要更强能力, 再开「升级 pi-ai」的独立议题。 |
你的诊断方向需要修正——这三个 TS 错误不是「catalog.ts 缺字段」要补, 而是 deliberate 的 drift gate 在报警, 报错位置
catalog.ts:143/242/267恰恰是设计上要「在新版本 AI SDK 引入新字段时故意编译失败、逼维护者分类」的地方。这三个报错到底是什么
packages/llm/llm-pi-ai/src/catalog.ts有三处satisfies Record<keyof X, ...>的编译期漂移门(drift gate)::143CHAT_TEMPLATE_VAR_GATE: Record<PiAiChatTemplateVar, true>—— 枚举 pi-ai 所有 chat-template 占位符。:242OpenAICompletionsCompatgate ——as const satisfies Record<keyof OpenAICompletionsCompat, CompatDisposition>。:267AnthropicMessagesCompatgate —— 同构。PiAiChatTemplateVar/OpenAICompletionsCompat/AnthropicMessagesCompat这些类型来自@earendil-works/pi-ai(catalog.ts:15-16/18/26-30 导入)。当你的pnpm install(重新生成 lockfile)拉到更新的 pi-ai 后, pi-ai 给这些类型新增了成员