@each1024/pi-final-model0.2.5
Rewrite Pi's final answer with a dedicated model, with settings, diagnostic logs, and a verified completion sparkle.
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
pi-final-model
让 Pi 用工作模型执行任务,再由指定模型整理最终答复;工作模型、思考强度和工具保持原选择。
安装与设置
要求 Node.js 22.19+、Pi 1.2.0。
pi install npm:@each1024/pi-final-model
已有会话执行 /reload。升级已安装版本使用 pi update npm:@each1024/pi-final-model,之后再执行 /reload;本地开发仍可通过 pi install /path/to/pi-final-model 加载,避免同时安装两份。首次在交互式 Pi 中加载时自动打开设置网页;以后只有一个入口:
/pi-final-model 设置
在页面中搜索并选择最终答复模型,打开“使用独立的最终答复模型”即可;改动自动保存,当前会话立即读取新配置。其他已打开会话在下次普通任务开始时读取。新安装默认关闭,原有配置升级后保留。
页面采用单列设置面板、颗粒云雾背景与带白边的磨砂玻璃标识,使用系统字体。背景和图标随插件分发,不加载第三方脚本、字体或图片。
- 只列出已登记、已配置认证的具体模型;排除 Magpie
group/路由组和 Pi 虚拟模型。列表为空时,先在 Pi 登记模型和认证,再重新打开设置。 - 模型列表与“执行任务”模型读取当前 Pi 会话;页面每 5 秒同步磁盘配置与注册表,点击“刷新”才请求供应商目录,按钮提示显示最近刷新时间。保存中、未保存修改或连接失败时暂停轮询;跨会话配置冲突会要求重新加载。任务执行期间允许查看,保存需等任务结束。
- 设置页只监听本机随机端口;刷新页面保留当前标签的访问凭据。连续 30 分钟没有有效设置请求、Pi 退出、重载或切换会话后链接失效,可从设置入口重新打开。
- 首次自动打开仅限 TUI;RPC、SDK 的非 TUI 模式、JSON、print 和子代理不会弹出浏览器。系统无法自动打开时在 Pi 内提供链接,并在下次交互式加载时重试。
- 0.2.0 起移除
status / set / on / off / recover子命令及两个专用 CLI 参数,统一在设置页操作。
配置存于 ~/.pi/agent/final-model.json,遵循 PI_CODING_AGENT_DIR;插件不修改模型目录、认证或全局工作模型。settingsOpened 记录是否已成功启动过设置页,旧配置无需手动迁移:
{
"enabled": true,
"model": "magpie-groups/codex/gpt-6-luna",
"settingsOpened": true
}
执行过程
- 当前模型照常处理用户任务,工具调用、重试、压缩和排队消息由 Pi 管理。
- 任务正常完成后,插件在同一轮次内直接调用最终模型,不新增用户消息或切换工作模型;移除历史工具声明,保留执行证据,并在末尾明确最新用户要求与本轮答复。成功后只替换文本,不写入另一模型的思考签名;校验会话文件中的编辑与回执一致后,在正文前后各显示一组粉、蓝、紫闪光:开头一组由 Markdown 显示层按答复文本哈希命中后注入,末尾一组来自仅供显示的自定义条目;两组都不进入模型上下文。标记不进入模型上下文,失败或未替换时不显示。
- 最终模型根据原始需求、执行过程和工具结果整理文本;成功后通过 Pi 的上下文编辑替换原助手答复内容。失败、中断或上下文不足时保留原答复。
已处理的助手消息记录存在当前会话分支,不发送给模型。重载、续接和树导航会读取该记录,避免重复整理。
pi-subagents 子会话保留自己的模型和输出约定;PI_SUBAGENT_CHILD=1 或 PI_FINAL_MODEL_DISABLED=1 时不注册插件能力。第三方子代理可设置后者显式禁用。
行为边界
- 用户只看到一条最终助手答复;原模型的草稿内容被上下文编辑替换,不另起一条用户或助手消息。会话记录仍显示该答复由工作模型产生。
- 每个正常用户轮次最多整理一次。A 报错、中断、输出截断、无助手答复或工具终止时不整理;其他扩展 custom message 单独启动的轮次也不触发。
- B 未登记、认证未配置、上下文容量不确定或不足时保留 A 的答复。插件不丢弃工具证据,可先压缩上下文或换更大模型;容量仍以服务端实际限制为准。
- 请求沿用当前 Pi 的 provider 设置,并限制总耗时最多 5 分钟、provider 重试最多 2 次、退避最多 10 秒;提交前复查取消、待处理消息、分支与配置修订。模型缺失时尝试有时限的刷新,仍缺失就提示重选;不自动换供应商。图片不受支持、上下文不足和无效正文均保留原答复。
- 保留其他扩展已有草稿,同一答复发生编辑冲突时跳过;模型别名的实际路由由供应商控制,闪光证明调用和替换完成,不保证底层身份或回答事实正确。
- RPC/SDK 消费者应等待完整 prompt/idle,读取
context_edit与pi-final-model/claim回执;提供pi-final-model:applied和pi-final-model:usage扩展事件。print 只输出正文,HTML 是否展示自定义记录由宿主决定;不能根据无图标或原消息模型字段判断是否调用。 - B 用量独立保存为
pi-final-model/usage,不修改 A 的用量。Pi 1.2.0 没有向扩展开放独立 usage 写入 API,内置总计暂不包含这部分,集成方可消费独立事件并按 requestId 去重。
诊断日志
日志默认写入 ~/.pi/agent/logs/final-model.jsonl,遵循 PI_CODING_AGENT_DIR。记录加载版本、每轮 skip 原因、request、response_received、applied/not_applied、会话与答复编号、模型、耗时、结束原因、响应编号及用量;调用返回与答复实际提交分开记载。成功核验后清除旧错误。
不记录提示词、答复正文、思考正文或工具参数;新请求失败只记录错误分类,不记录供应商错误全文。日志文件以 0600 权限创建,达到 5 MiB 后轮转至 .jsonl.1,只保留一份旧文件。日志写入失败会在 stderr 提示,不阻断原答复。开始记录后没有对应响应记录,可能表示进程在请求期间退出。
自动发布
推到 main(含 PR 合并)且 src/、package.json 或 lockfile 有变化时,.github/workflows/release.yml 自动发布:package.json 版本高于 npm 已发布的最高版本就用它,否则在最高版本上末位 +1;发布 npm 后把版本号以 [skip ci] 提交回 main,并创建同名标签和 GitHub Release。只改文档或 CI 不发布;同一版本不会重复发布。
Pi 插件目录 从 npm 发现带 pi-package 关键词的包,没有第二次上传;收录刷新由 Pi 控制。发布不会自动更新用户已安装的插件。
npm 认证使用仓库 Secret NPM_TOKEN(当前令牌有效期至 2026-12-08),也可改为给 release.yml 配置 Trusted Publisher。凭据不进入源码和发布包。
28 项边界跟进结果及宿主限制保存在源码仓库的 BOUNDARY-REVIEW.md。
开发与卸载
npm install --ignore-scripts
npm run check
npm run pack:check
pi remove npm:@each1024/pi-final-model
check 检查 TypeScript 与前端脚本语法,不运行测试用例。卸载时建议保持空闲、恢复工作模型;配置文件保留。