@astrolimit/opencode-peak-guard
v0.1.0
Published
opencode 插件:模型高峰期自动降级——在配置的时间段内把拥堵模型的请求切换到备用模型
Maintainers
Readme
@astrolimit/opencode-peak-guard
opencode 插件:模型高峰期自动降级。在配置的时间段内,把发往「拥堵模型」的请求自动切换到备用模型;高峰一过,自动恢复。
工作原理
- 插件通过 opencode 的
chat.message钩子,在每条用户消息处理前判断**当前时刻(北京时间)**是否处于该模型配置的高峰窗口; - 命中则把该消息的模型改写为规则指定的
fallback,未命中则完全不动——无状态、按请求实时切换、高峰结束自动恢复; - 每次实际降级都会 toast 提醒 + 写入结构化日志(
client.app.log,service 为peak-guard); - 降级目标未在 opencode 中配置时 fail open:保持原模型并警告,绝不中断工作。
安装
在 opencode 配置(全局 ~/.config/opencode/opencode.json 或项目级 opencode.json)中加入:
{
"plugin": ["@astrolimit/opencode-peak-guard"]
}配置
配置文件为全局唯一的 ~/.config/opencode/peak-guard.jsonc(遵循 $XDG_CONFIG_HOME;无 jsonc 时回退 peak-guard.json,两者并存以 jsonc 为准,文件在插件启动时确定)。支持 JSONC 语法——// 行注释、/* */ 块注释、尾逗号均可。修改后即时生效,无需重启。
{
// key:高峰时要避开的模型,格式 "providerID/modelID",支持 * 通配
"deepseek/*": {
// 高峰窗口,HHMM 整数,半开区间 [start, end);支持多条;start > end 表示跨午夜
"windows": [
{ "start": 900, "end": 1200 },
{ "start": 1400, "end": 1800 }
],
// 可选:仅工作日(按北京时间周一~周五)生效
"weekdaysOnly": true,
// 命中高峰时切换到的备用模型
"fallback": "zhipuai-coding-plan/glm-5.2"
},
"zhipuai-coding-plan/glm-5.2": {
"windows": [{ "start": 1400, "end": 1800 }],
"weekdaysOnly": true,
"fallback": "deepseek/deepseek-v3"
}
}规则要点:
- 时区固定为北京时间(UTC+8),与运行机器的时区无关;
- 时间段为 HHMM 整数(
900= 09:00,1400= 14:00),半开区间[start, end); - 多条规则同时命中时,最具体(非通配字符最多)的模式优先;
- 不做链式解析:fallback 即终点,即使它自己也处于高峰;
- 配置错误(非法 JSON/JSONC、规则缺字段等)不会中断 opencode——坏规则被跳过并 toast/日志告警;
- 作用于主会话与 task 子代理的请求;标题生成等小模型调用不受影响。
许可证
本项目基于 SFR 许可证(第二版)开源,详见 LICENSE 与 http://www.shared-future.ren/licenses/。
