Skip to content

feat: add structured custom model editor - #5

Open
awoaCrim wants to merge 2 commits into
Wing900:masterfrom
awoaCrim:feat/structured-model-editor
Open

feat: add structured custom model editor#5
awoaCrim wants to merge 2 commits into
Wing900:masterfrom
awoaCrim:feat/structured-model-editor

Conversation

@awoaCrim

@awoaCrim awoaCrim commented Aug 9, 2026

Copy link
Copy Markdown

背景

Pi Switch 之前只能维护较少的模型字段,复杂模型配置仍需要直接编辑 Pi 的 models.json。这不仅操作成本高,也容易在导入、替换或编辑模型时丢失 Pi 新版本及服务商扩展字段。

本 PR 增加结构化自定义模型编辑器,并在持久化、Wails 传输和前端状态三个层面补齐未知字段保留、默认模型同步与并发修改保护。

改动

  • 支持添加、编辑和删除自定义模型。
  • 支持编辑模型基本信息、能力与上下文、思考级别映射、计费、请求参数、Headers 与 compat。
  • 计费、请求参数和 compat 等低频区域默认折叠。
  • 增加“其他字段 JSON”和“其他 compat 字段 JSON”,支持 Pi 新字段及服务商扩展字段。
  • 模型级 API / Base URL 不在编辑器中开放修改,但保存时保留已有值。
  • contextWindowmaxTokens 改为正整数校验。
  • 编辑模型时保持原列表位置;重命名、删除和替换时同步选中模型及默认模型状态。
  • 打开模型编辑器和删除模型前先提交 Provider 表单中的待保存修改。
  • 增加模型级和列表级 revision,外部修改配置后旧编辑器不会覆盖新内容。
  • 增加 PR / master CI,运行 Go test/vet 与前端 test/build。

实现说明

  • 将持久化模型与 Wails DTO 分离:
    • ModelInfo / Config 负责持久化语义。
    • ModelTransport / ConfigTransport 负责前端传输。
  • 未知字段使用 json.RawMessage 保存,并以原始 JSON 文本通过 extraFieldsJson / compatExtraFieldsJson 传输,避免 JavaScript Number 改写大整数。
  • 真实的顶层 extraFieldsrevisionreplaceDocumentoriginalId 等未知字段不会再与 Pi Switch 的传输元数据冲突。
  • 区分三种写入语义:
    • 增量导入保留缺失的已知字段和未知字段。
    • 列表替换删除未传入模型,同时保留 retained model 的未知扩展字段。
    • 显式编辑以表单提交文档为准,允许删除未知字段。
  • selected 仅作为前端导入选择状态,不写入 Pi 配置。
  • ReplaceModels 返回后端实际持久化后的模型和新列表 revision,保证连续编辑使用最新快照。
  • revision 校验在后端原子写入流程中执行,可阻止外部新增、删除或修改模型被旧页面覆盖。
  • 补充当前 Pi 已支持的 compat 字段:zaiToolStreamsupportsThinkingTokenBudgetsupportsAdditionalToolssupportsExplicitPromptCacheMode

测试

已通过以下完整非缓存门禁:

  • go clean -testcache
  • go test -count=1 ./...
  • go vet ./...
  • cd frontend && npm test(19 项通过)
  • cd frontend && npm run build
  • git diff --check
  • wails build -platform windows/amd64 -m -nosyncgomod -skipbindings

Windows 构建产物:

  • build/bin/PiSwitch.exe
  • SHA-256:f05056669c4da22a470b46336a7f2f8e8e8d6f2f21ed51a358372326fcc16ea8

范围说明

  • 本 PR 不开放模型级 API / Base URL 编辑,这是既定交互约束;已有值会原样保留。
  • 不修改 Pi 本身的模型 schema,仅为已知字段提供结构化入口,并为未来字段提供 JSON 扩展入口。
  • docs/pr-workflow.md 是本地流程研究文档,未包含在本 PR 中。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant