@yueby/pi-fast-mode0.1.1
Toggle priority service tier for Pi models with /fast and persistent provider model scopes.
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
@yueby/pi-fast-mode
为 Pi 提供 /fast 开关,向当前 provider/model 的请求 body 注入:
{ "service_tier": "priority" }
适用于官方和自定义 provider,包括 OAuth 中转,只要其请求经过 Pi 的标准 before_provider_request hook。默认关闭,不按模型名称判断是否为 GPT。
安装
pi install npm:@yueby/pi-fast-mode
安装后重启 Pi,或在 Pi 中执行 /reload。同一时间仅启用一个注册 /fast 的扩展。
使用
先选择要使用的 provider 和模型:
/fast # 切换当前模型的开关
/fast on # 开启当前模型
/fast off # 关闭当前模型
/fast status # 查看当前模型的开关与适用范围
/fast models # 打开当前 provider 的模型范围面板
只有同时满足“已开启”和“在适用范围内”的模型,才会注入 service_tier: "priority"。开启时覆盖请求中已有的 tier。
关闭行为
| 请求 API | OFF、被范围排除或范围加载失败时 |
|---|---|
openai-responses、openai-completions |
明确写入 service_tier: "default",覆盖上游调用方已有的 priority,请求标准处理 |
| Codex 与其他 API | 移除已有的 priority / fast / ultrafast 字段,不发送可能不兼容的 default;其余 tier 保持原样 |
开关按当前会话的 provider/model 独立控制,不会关闭其他模型或其他 Pi 进程的开关。
开关作用于之后经过 hook 的新请求。已经构造、发送或由 provider 内部复用请求体的重试,不会被后续 /fast off 追回;本扩展不会擅自中断正在进行的任务。若需要排除在途请求的干扰,请先停止当前运行,再关闭 Fast。
default 是客户端请求值,不是收费保证。后续 hook、中转或服务端仍可能修改或忽略它;Codex 和其他 API 移除字段后也可能采用服务端默认 tier。中转若拒绝 default,应先核对兼容性,不会自动降级回可能使用 Priority 的默认值。
模型范围面板
默认允许全部模型,包括自定义模型 ID 和别名。每个 provider 的范围独立,面板列出当前 provider 的已注册模型,并保留当前模型和已有选择。
| 按键 | 操作 |
|---|---|
↑ / ↓ 或 k / j |
移动光标 |
PageUp / PageDown、Home / End |
翻页、移到首尾 |
Space |
切换勾选 |
a |
选择当前列表中的全部具体模型 |
n |
清空范围:该 provider 下所有模型均不注入 |
u |
恢复无限制:允许全部模型,包括后续新增模型 |
Enter |
保存并应用 |
Esc / q |
取消并保留原设置 |
设置范围不会自动开启 Fast。已开启的模型如果被移出范围,会暂停注入;重新纳入范围后恢复生效,/fast status 会说明当前状态。
状态显示
生效时,通过 Pi 的标准状态接口发布 ⚡ fast。显示位置由当前 footer 决定:
- Pi 默认 footer:显示在普通扩展状态行。
- 自定义 footer:需要读取
footerData.getExtensionStatuses();如果不显示扩展状态,请用/fast status检查。 - Aurora footer 可读取状态键
pi-fast-mode,将其布局在最底部路径/状态行右端。Aurora 的布局集成由用户自己的 footer 提供,不属于本 npm 包。
状态表示插件已启用参数注入,不代表中转或上游已确认 Priority。
持久化
模型范围持久化,Fast 开关保持会话级。 重启、新会话或 /reload 后会恢复过滤范围,但需要重新 /fast on。
默认配置:
~/.pi/agent/extensions/pi-fast-mode/config.json
设置 PI_CODING_AGENT_DIR 时,配置跟随该目录,支持 ~/ 和 ~\ 展开。各项目共用用户级范围。
{
"version": 1,
"providerScopes": {
"my-oauth-relay": ["gpt-5.4", "custom-alias"],
"another-relay": []
}
}
- provider 没有条目:无限制。
- 非空数组:只允许精确匹配的模型 ID。
- 空数组:该 provider 下所有模型均不注入。
- 保存面板中的“无限制”:删除该 provider 的限制。
取消面板不会写盘。保存时重新读取并合并其他 provider 的条目,使用同目录事务文件和重命名替换;保存失败不会更新当前生效范围,损坏配置不会被覆盖。配置加载失败会阻止 Fast 注入,直到配置恢复可读。
其他已运行的会话在重载后读取更新。配置没有跨进程写入锁,请避免在多个 Pi 进程中同时保存模型范围。
兼容性与费用
- Node.js
>=22.18.0;以 Pi1.4.0接口开发并验证,需要宿主支持before_provider_request。 - 模型面板需要交互式 TUI;请求参数注入本身不依赖 footer。
- 本扩展不替换 OAuth 认证、headers、baseUrl 或 provider 请求实现,不存储凭据,不发送探测请求。
- 中转必须接受并转发
service_tier,上游必须支持 Priority。Priority 可能额外收费,以中转和上游规则为准。 - 不调整 Pi 内部的费用倍率;不向子代理自动传递 Fast 开关。
- 自定义 provider 若绕过标准请求 hook,本扩展不能拦截它;后续 hook 也可能再次修改参数。
本地开发
Pi 通过 package.json 的 pi.extensions 加载 TypeScript 源码,无需构建。
pi -e ./
npm test
离线测试不依赖真实用户配置,文件读写仅使用测试创建的系统临时目录并在结束后清理。
真实 Pi 加载、面板和最终 HTTP body 的离线截获测试:
PI_FAST_MODE_TEST_HOST="<Pi package directory>" \
node --test test/pi-host.integration.mjs test/request-wire.integration.mjs
可选的用户 Aurora footer 集成测试:
PI_FAST_MODE_TEST_HOST="<Pi package directory>" \
PI_FAST_MODE_TEST_FOOTER="$HOME/.pi/agent/extensions/aurora-footer.ts" \
node --test test/aurora-footer.integration.mjs
HTTP body 测试使用内存中的模拟 fetch 和合成 SSE,不访问中转或上游。覆盖 ON/OFF、继承的 Priority、范围排除、后续变换,以及关闭时已有请求重试的边界。其他测试也不发送模型请求。本 npm 包仅包含运行时源码、README、manifest 和许可证。
License
MIT — see LICENSE.