问题描述
为一个自定义(OpenAI 兼容)provider 显式选择了 API 风格「Responses」,但当模型 id 命中内置 catalog(models.dev 数据)里的同名条目时,该设置会被 catalog 静默覆盖,请求实际发往 /v1/chat/completions,而不是 /v1/responses。
影响:用户在自定义 provider 上显式选择的接口风格被忽略;对于只实现单一端点的中转/网关,会导致请求打到错误的端点。
复现步骤
- 新建自定义 provider:Base URL =
https://<host>/v1,API 风格 = Responses
- 添加模型,模型 id 填
glm-5.3
- 将该 provider 的 Base URL 指向一个记录出站请求的本地代理(便于观察实际请求路径)
- 新建会话,向该模型发一条消息
预期行为
POST /v1/responses(与配置的 apiStyle=responses 一致)
实际行为
POST /v1/chat/completions,且请求体使用 max_tokens 字段
应用版本
0.16.0
操作系统
Windows
其他环境信息
Windows 11 · protocol 11 · host 0.16.0 · NSIS 安装
日志
代理抓到的出站请求:
--> POST /v1/chat/completions
<-- 200 text/event-stream
provider 配置:vendorKey=custom、apiStyle=responses、baseUrl=https:///v1
根因(来自打包后的 bundle)
providerRequestTransport:const apiStyle = resolveApiStyle(provider.modelConfig?.api) ?? provider.apiStyle;
—— catalog 提供的 api 优先于用户配置的 provider.apiStyle。
- 自定义 provider 不在 catalog 中,
findModelOfType 会回退到 relayChatMetadata(models, "glm-5.3"),命中内置条目 {"id":"glm-5.3","api":"openai-completions", ...},从而覆盖用户显式选择的 responses。
建议修复
自定义/非 catalog provider 应优先采用用户配置的 provider.apiStyle,或至少不要让基于模型 id 的 relay 匹配覆盖用户的显式选择。
问题描述
为一个自定义(OpenAI 兼容)provider 显式选择了 API 风格「Responses」,但当模型 id 命中内置 catalog(models.dev 数据)里的同名条目时,该设置会被 catalog 静默覆盖,请求实际发往
/v1/chat/completions,而不是/v1/responses。影响:用户在自定义 provider 上显式选择的接口风格被忽略;对于只实现单一端点的中转/网关,会导致请求打到错误的端点。
复现步骤
https://<host>/v1,API 风格 = Responsesglm-5.3预期行为
POST /v1/responses(与配置的 apiStyle=responses 一致)实际行为
POST /v1/chat/completions,且请求体使用max_tokens字段应用版本
0.16.0
操作系统
Windows
其他环境信息
Windows 11 · protocol 11 · host 0.16.0 · NSIS 安装
日志
代理抓到的出站请求:
provider 配置:vendorKey=custom、apiStyle=responses、baseUrl=https:///v1
根因(来自打包后的 bundle)
providerRequestTransport:const apiStyle = resolveApiStyle(provider.modelConfig?.api) ?? provider.apiStyle;—— catalog 提供的
api优先于用户配置的provider.apiStyle。findModelOfType会回退到relayChatMetadata(models, "glm-5.3"),命中内置条目{"id":"glm-5.3","api":"openai-completions", ...},从而覆盖用户显式选择的responses。建议修复
自定义/非 catalog provider 应优先采用用户配置的
provider.apiStyle,或至少不要让基于模型 id 的 relay 匹配覆盖用户的显式选择。