RouteMux Docs
IntegrationsDev tool

Pi

把 RouteMux 加进 Pi 的 models.json —— 我们四个协议族它都能讲。

Pi 把 provider 放在 ~/.pi/agent/models.json,每个 provider 自己声明讲哪套协议。 这让它成为少数几个能在一份配置里够到 RouteMux 全部协议族的客户端。

配置

{
  "providers": {
    "routemux": {
      "name": "routemux",
      "baseUrl": "https://api.routemux.com/v1",
      "api": "openai-responses",
      "apiKey": "sk-...",
      "models": [
        {
          "id": "openai/gpt-5.5",
          "name": "GPT-5.5",
          "reasoning": true,
          "input": ["text", "image"],
          "contextWindow": 1000000,
          "maxTokens": 128000
        }
      ]
    }
  }
}

带上 provider 与完整模型名运行:

pi --provider routemux --model routemux/openai/gpt-5.5 "hello"

api 字段决定 base URL

api 有四个取值,每个对应不同的 base URL —— 因为 Pi 为每一种内置了不同的客户端:

apiRouteMux 的 baseUrl最终落在
openai-completionshttps://api.routemux.com/v1/v1/chat/completions
openai-responseshttps://api.routemux.com/v1/v1/responses
anthropic-messageshttps://api.routemux.com —— 裸 origin/v1/messages
google-generative-aihttps://api.routemux.com/vertex-aiVertex 系操作

为什么 anthropic-messages 反而要去掉 /v1

Pi 内置的是官方 Anthropic SDK,它的 base URL 就是裸 origin,由它自己追加 /v1/messages。 而讲同一套协议的别的 agent 恰恰相反 —— OpenCode 用的是 Vercel AI SDK,只追加 /messages, 所以那边必须带 /v1。同一个协议,字段约定相反。见兼容矩阵

Claude 模型只在 anthropic-messages 上提供;Grok 模型则完全不在它上面。 两者都要用的话,按协议各开一个 provider 块。

模型条目

id 必须与 GET /v1/models 返回的完全一致。contextWindowmaxTokens 驱动 Pi 自己的 上下文记账 —— 数字写错会产生错误的告警,不只是显示问题。reasoninginput 描述模型能力, 取值见模型页。

几个值得知道的兼容开关

Pi 默认会发一些严格上游可能拒绝的东西。如果某个 provider 拒绝了在别处正常的请求, 先看这几个旋钮:

  • 按工具的 eager input streaming,会在每个工具定义里多加一个字段
  • 开启缓存时附带的 session affinity 头
  • 长缓存保留,它假定上游接受一小时的缓存 TTL

RouteMux 对未知的 anthropic-beta 头原样透传,只清理那些上游会硬拒的参数, 所以这里的典型症状是一个干净的上游报错,而不是行为被悄悄改掉。

排查

现象原因
模型选择器里看不到 RouteMux没配 apiKey 的 provider 会被隐藏。这基本不是 URL 的问题。
每条请求都 404协议要裸 origin 而 baseUrl 带了 /v1,或者反过来。见上表。
400 MODEL_PROTOCOL_UNSUPPORTED该模型不在这个 provider 声明的协议上 —— 比如把 Claude 的 id 放在 openai-completions 下。
找不到模型idGET /v1/models 不完全一致。
422 BILLING_INSUFFICIENT_CREDITS钱包余额不足。失败请求不计费。

On this page