@shelken/pi-dynamic-models0.2.6
从 models.dev 自动发现并补全 models.json 中的远端模型
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
@shelken/pi-dynamic-models
从 provider 自身的 /models 端点自动发现模型,并补全 models.json 中尚未声明的条目。
安装
pi install npm:@shelken/pi-dynamic-models
配置
路径(后者覆盖前者):
{pi-agent-dir}/extensions/pi-dynamic-models/config.json.pi/extensions/pi-dynamic-models/config.json
{
"enable": true,
"enableProviders": ["cpa"],
"excludePatterns": ["gpt-image-*", "sora-*"],
"debug": false
}
| 字段 | 说明 |
|---|---|
enable |
总开关 |
enableProviders |
要发现的 provider。省略、"*" 或 ["*"] = models.json 里所有带 baseUrl 的 provider;[] = 不启用 |
excludePatterns |
glob(* / ?),匹配的 AUTO id 不注册;不碰手写模型 |
debug |
为 true 时逐模型写入详细文件日志,不向终端回显 |
行为
- 请求 provider 的
/models,读取网关自报的能力:上下文长度、输出上限、输入模态、思考档位。缺这些字段时才回退 models.dev 目录与 pi 默认值。 - 支持裸数组、
{ "data": [...] }、{ "models": [...] }三种枚举响应;缺id或字段类型异常的行只跳过该行。探测/models与/v1/models时,只有所有候选都返回空才视为权威空结果并移除旧 AUTO 模型,空列表不会抢先覆盖非空结果。 - 不覆盖
models.json手写模型,也不覆盖 pi 内置 同 id 模型参数;只追加缺失 id。registerProvider会整表替换,实现上会合并:内置 → models.json → 新 AUTO。 - 注册时保留
models.json的 provider 级compat(如sessionAffinityFormat),并交给宿主解析$VAR凭据。 - 发现请求会带
apiKey与 provider 级headers;authHeader: false时不额外拼Authorization。值按宿主模板语义解析:$VAR/${VAR}展开,$$是字面量$,未设置的变量直接跳过而不发送。 - 非对话输出(图片、向量)不注册。思考档位按网关自报项写入
thinkingLevelMap,未自报的档位显式标为null,避免选择器暴露网关不接受的档位。 - registry(models.dev)只是可选的数据源:不可达时仍会注册网关模型;缓存 6h,过期后台刷新。
- provider 列表缓存 6h;缓存与端点、协议、账户标识绑定,换端点或账户会重新发现。
- factory 同步用磁盘 cache 注册(session restore 能找到上次的
provider/id),不在启动时联网;联网发生在session_start或/dynamic-models refresh。 - 同一次 runtime 内模型内容 hash 未变则跳过重注册;每次扩展 factory 会清空 hash(
/new会换 ModelRegistry,必须重新 register)。 - 发现结果变化时
notify;发现错误只写日志,包含手动刷新异常;其他 provider 继续更新。debug与status均不向终端输出错误详情。 - 日志:
{pi-agent-dir}/logs/pi-dynamic-models.log
命令
/dynamic-models # status:上次摘要 + provider cache 列表
/dynamic-models status
/dynamic-models refresh # 强制拉网并重注册(忽略 freshness)
缓存
- registry:
{pi-agent-dir}/cache/models-registry.json - provider:
{pi-agent-dir}/cache/provider-models/<name>.json
缓存文件只保存模型能力与端点/账户摘要,不保存密钥或请求头值。