Skip to content

Provider 级 compat 配置不可见,模型编辑器也未展示继承后的有效值 #8

Description

@goodenn

环境

  • PiSwitch:v0.0.0.17
  • Pi:v0.84.4
  • 操作系统:Windows 10 19044 x64
  • Pi 配置文件:~/.pi/agent/models.json

问题概述

Pi 支持在 Provider 和 Model 两个层级配置 compat,但 PiSwitch 目前只在模型编辑器中提供 Model 级 compat 设置。

Provider 级 compat 在 PiSwitch 重写 models.json 时目前能够被保留,但无法在 Provider 设置页面中查看或编辑。模型编辑器也不会展示从 Provider 继承后的有效值。

因此,PiSwitch UI 显示的配置与 Pi 实际生效的配置不完全一致,用户无法通过界面判断某个兼容性选项是否已经启用。

复现配置

models.json 中添加 Provider 级兼容性配置:

{
  "providers": {
    "custom-responses-provider": {
      "api": "openai-responses",
      "baseUrl": "https://example.com/v1",
      "compat": {
        "supportsStrictMode": true
      },
      "models": [
        {
          "id": "example-model",
          "name": "example-model",
          "reasoning": true,
          "input": ["text"]
        }
      ]
    }
  }
}

复现步骤

  1. 启动 PiSwitch。
  2. 打开 custom-responses-provider 的 Provider 设置。
  3. Provider 页面中没有 compatsupportsStrictMode 配置项。
  4. 打开 example-model 的模型编辑器。
  5. supportsStrictMode 显示为“继承/未设置”,但没有显示继承后的有效值。
  6. 检查 models.json,可以确认 Provider 级配置仍然存在,并且 Pi 实际会使用该值。

当前行为

  • 无法查看或编辑 Provider 级 compat
  • 模型编辑器只显示模型自身显式设置的值。
  • 不显示模型从 Provider 继承后的有效值。
  • 不显示配置值的来源,例如 Provider、Model 或 Pi 默认值。
  • 用户可能误以为配置不存在或尚未生效。
  • 隐藏字段在导入、删除并重建 Provider、版本迁移等操作中的保留行为不明确。

期望行为

  1. 在 Provider 编辑器中增加“高级兼容性 / compat”区域。
  2. Provider 层支持与模型编辑器相同的兼容性配置项。
  3. 模型级兼容性选项使用三态设置:
    • 继承
    • 启用
    • 禁用
  4. 选择“继承”时,显示解析后的有效值及来源,例如:
supportsStrictMode:继承
有效值:已启用
来源:Provider
  1. UI 应正确反映 Pi 的配置优先级:
Model compat > Provider compat > Pi 默认值
  1. 所有配置读写操作都应无损保留 PiSwitch 当前版本不认识的 Provider 和 Model 字段。
  2. 建议提供 Provider 级原始 JSON 编辑入口,作为未来新增兼容性字段的兜底。

实际影响

部分兼容 OpenAI Responses API 的代理服务,在 function tool 没有显式携带 strict 字段时,会采用与 OpenAI/Pi 不同的默认行为。

此时需要配置:

"compat": {
  "supportsStrictMode": true
}

该配置的含义是告诉 Pi:此端点支持 strict 参数。对于普通工具,Pi 随后会显式发送:

"strict": false

当同一个 Provider 下的所有模型都使用相同端点和兼容行为时,Provider 层是更合理的配置位置。若只能在 Model 层配置,就需要为每个模型重复设置,后续新增模型也容易遗漏。

目前 PiSwitch 虽然能够保留该 Provider 级字段,但由于 UI 完全不可见,用户很难确认配置是否存在、是否生效,以及是否会在后续操作中被保留。

建议验收测试

  • 导入包含 Provider 级 compatmodels.json
  • 在 Provider 编辑器中正确展示相应配置。
  • 修改无关 Provider 字段后,仍保留全部 compat 和未知字段。
  • 编辑或替换模型后,仍保留 Provider 级 compat
  • 模型编辑器能显示继承后的有效值及来源。
  • Model 级显式值能够覆盖 Provider 级值。
  • 新增模型后能正确继承 Provider 级配置。
  • 读取并重新保存配置后,未知 Provider/Model 字段能够无损往返。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions