环境
- CodePilot v0.38.4 / v0.38.5,OAuth 登录(Claude Max),macOS Apple Silicon
问题
用 OAuth 登录后,模型列表一开始是正常的(Sonnet / Opus / Haiku 都在),但用一段时间后再看,只剩 Sonnet 4.6 了,Opus 直接没了。重启 CodePilot 又好了,过一会儿又没了,反复出现。
0.38.4 加的全局默认模型设置挺好的,但这个问题没解决——就算默认设了 Opus,列表被覆盖后 Opus 选项直接消失,设置也没用了。
我排查到的原因
翻了一下编译产物,问题出在 /api/providers/models 路由里:
// 先用硬编码列表初始化(Sonnet、Opus、Haiku 都有)
i[0].models = A.map(...)
// 然后从 claude SDK 的 supportedModels() 拿缓存
const o = getCachedModels("env")
// 如果缓存有东西,直接把整个列表换掉
if (o.length > 0) {
i[0].models = o.map(...) // 这里是替换,不是合并
}
问题就在 supportedModels() 返回的结果不稳定,有时候只返回一个 Sonnet,然后整个列表就被覆盖成只有 Sonnet 了。
重启后好了是因为缓存是空的,o.length 是 0,走不进覆盖逻辑,用的是完整的硬编码列表。
建议
getCachedModels 的结果应该跟硬编码列表合并,而不是直接替换。或者加个兜底:如果 SDK 返回的模型数比硬编码列表少,就不要用它。
相关
跟 #252 不同——那个是 UI 显示和实际调用不一致(已确认是预期行为),这个是模型从列表里彻底消失。
环境
问题
用 OAuth 登录后,模型列表一开始是正常的(Sonnet / Opus / Haiku 都在),但用一段时间后再看,只剩 Sonnet 4.6 了,Opus 直接没了。重启 CodePilot 又好了,过一会儿又没了,反复出现。
0.38.4 加的全局默认模型设置挺好的,但这个问题没解决——就算默认设了 Opus,列表被覆盖后 Opus 选项直接消失,设置也没用了。
我排查到的原因
翻了一下编译产物,问题出在
/api/providers/models路由里:问题就在
supportedModels()返回的结果不稳定,有时候只返回一个 Sonnet,然后整个列表就被覆盖成只有 Sonnet 了。重启后好了是因为缓存是空的,
o.length是 0,走不进覆盖逻辑,用的是完整的硬编码列表。建议
getCachedModels的结果应该跟硬编码列表合并,而不是直接替换。或者加个兜底:如果 SDK 返回的模型数比硬编码列表少,就不要用它。相关
跟 #252 不同——那个是 UI 显示和实际调用不一致(已确认是预期行为),这个是模型从列表里彻底消失。