ドキュメント
Pi
Pi — Inflection のチャットボットでもコインでもない、Earendil のターミナル型コーディングエージェント — では、カスタムプロバイダーを models.json の1つのブロックとして設定します。必要なのは baseUrl、api、key、および使用するモデル ID です。4つのフィールドを設定すれば、1つのキーで Claude と GPT を利用できます。
~/.pi/agent/models.jsonのカスタムプロバイダーブロック — baseUrl、api、モデルID — で、EarendilのPiターミナルコーディングエージェントから1つのキーを通じてClaudeとGPTを利用できます。
{
"providers": {
"kunavo": {
"baseUrl": "https://api.kunavo.com/v1",
"api": "openai-completions",
"apiKey": "$KUNAVO_API_KEY",
"models": [
{
"id": "claude-sonnet-5",
"name": "Claude Sonnet 5",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1000000,
"maxTokens": 128000
},
{
"id": "claude-haiku-4-5",
"name": "Claude Haiku 4.5",
"input": ["text", "image"],
"contextWindow": 200000,
"maxTokens": 64000
}
]
}
}
}/v1 は openai-completions プロバイダーで指定してください。 Pi のモデルページにある互換エンドポイントの例では、この値と http://localhost:11434/v1 を組み合わせています。9月22日にドキュメントが書き換えられる前は、OpenRouter、Vercel AI Gateway、llama.cpp の例にも同じバージョンパスが含まれていました。ルールを明記した文はないため、例から判断できます。サフィックスのない Base URL は認証エラーではなく 404 になります。cost は、デフォルトですべてゼロです。このデフォルト値は Pi のソース (v0.99.2) にありますが、ドキュメントにはもう記載されていません。そのため、追加したプロバイダーはフッターと /session に $0 と表示され、料金を自分で入力するまで変わりません。その下にある2つの暗黙のデフォルト設定は、さらに大きな問題を引き起こします。contextWindow は 128000 に、maxTokens は 16384 にフォールバックするため、空欄のままにしたモデルでは、本来の上限よりはるかに短い長さで圧縮や切り捨てが行われます。上のブロックではカタログの値を両方に設定しています。下の表から追加する ID にも同じように設定してください。--api-key、次に保存済みの auth.json 認証情報、models.json の apiKey、最後にプロバイダーの環境変数」の順で使用します。そのため、/login で保存した古いキーがファイル内の新しいキーより優先されることがあります。編集したばかりのブロックなのに別の認証情報で接続される場合、通常はこれが原因です。同じページには、カスタムモデルは「models.json から読み込めますが、Pi が認証情報を解決するまで /model では利用できません」とも記載されています。モデル選択画面に表示されない場合は、構文ではなく認証情報に問題があります。api の値 — は、同じ日に Pi の v0.99.2 のソースを確認しました。Kunavo は Pi を自社のエンドポイントに接続して実行していません。セッション、ストリーミングを使ったターン、ツールの往復処理、リクエストが実際にどのモデルに届いたかの確認も行っていません。公開された設定ページは設定の参考資料であり、互換性テストではありません。ここに記載された内容を互換性テストとして受け取らないでください。以下の curl は10秒で確認できる部分です。クライアントの動作については、利用者自身と Pi の間で確かめる必要があります。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Pi設定が表示されます。手順
/app/keysでキーを作成してコピーします。キーは一度だけ表示されます。KUNAVO_API_KEYとして環境変数に設定してください。Pi はapiKeyフィールド内の"$NAME"または"${NAME}"に加えて、直接指定した値や、先頭に!commandを付けた値も解決します。変数名の後に文字列を直接続ける場合は、波括弧付きの形式を使用してください。~/.pi/agent/models.jsonを作成または編集し、上のブロックを貼り付けます。組み込みではないプロバイダーでは、baseUrlと、プロバイダーまたはモデルのどちらかの階層にapiの値が必要です。Pi のソースでは、これらがないとモデルを読み込めません。その他はすべて任意です。/modelを開くとファイルが再読み込みされます。piを起動して/modelを実行し、宣言した ID のいずれかを選択します。表示されない場合は、JSON より先にキーを確認してください。上記の解決順序に関する注記をご覧ください。- 実際のファイルを読み取って編集するタスクを与えてください。Piはほぼすべての処理でツール呼び出しに依存しているため、ファイルシステムに触れる初回実行なら、単なる挨拶より多くのことが分かります。また、ストリーミングやツールスキーマの不整合もこの実行で表面化します。まさにKunavoがまだテストしていない種類の問題です。
Piの「モデルを選択」ドキュメントで2026年10月1日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがPiで機能します。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."フィールドに入力するモデルID
すべてのテキストモデルにはモデルIDでアクセスできます。現在の一覧はGET /v1/models、価格付きのカタログはモデルページにあります。料金は100万トークンあたりのUSDで、入力 / 出力の順です。
| モデル ID | Kunavo 入力 / 出力 | Piでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | ファイルを編集するセッションの標準モデル |
claude-opus-5 | $3.50 / $17.50 | 失敗のコストが大きい変更を計画する |
claude-haiku-4-5 | $0.70 / $3.50 | トリアージ、要約、終日繰り返す処理など、安価に済ませたい応答 |
gpt-5-6-sol | $2.00 / $12.00 | 同じキーと同じbaseUrlを使い、別のファミリーからセカンドオピニオンを得る |
別の方法: anthropic-messages
2026年9月22日のドキュメント更新まで、Piはカスタムプロバイダーのapiとして4つの値、openai-completions、openai-responses、anthropic-messages、google-generative-aiを記載していました。更新後のモデルページでは値の一覧は示されておらず、1つの例でopenai-completionsが示され、このケースは「OpenAI、Anthropic、またはGoogle互換のエンドポイント」と説明されています。v0.99.2のPiソースでは、このフィールドは任意の文字列として型定義されており、組み込み実装10種類のうち一致するものへ振り分けられます。その10種類は、前述の4つに加えてopenai-codex-responses、azure-openai-responses、google-vertex、mistral-conversations、bedrock-converse-stream、pi-messagesです。カスタムプロバイダー向けにドキュメントで説明されていたのは前述の4つだけで、ほかの6つはここではテストしていません。このページのどこにも、それらがサードパーティのエンドポイントで動作するとは書かれていません。
anthropic-messagesはドキュメントに記載された4つの値の1つであり、KunavoはOpenAI互換のインターフェースに加え、Anthropic Messagesのインターフェースにも応答します。そのため、このルートは設定として表現できます。ただし、このページでは、貼り付けて使う設定ブロックに、このルートのbase URLを記載しません。Piのドキュメントでは、このapi用のbase URL欄に何を指定するかが一度も明確に定まっていないためです。9月22日までは、ある例ではhttps://proxy.example.com/v1、別の例ではパスの付いていないhttps://proxy.example.comという2通りが示されていましたが、同日のドキュメント更新では、どちらかを選ぶことなく両方が削除されました。このルートを使う場合は、どちらか一方を試してください。最初の呼び出しで401ではなく404が返る場合は、その行を変更してください。
このapiについて、Piのcompatスキーマにある3つのフィールドは、設定に取りかかる前に知っておくと役立ちます(ソース、v0.99.2)。これらすべてに関するドキュメント上の唯一のルールを、まず引用します。互換性設定は「エンドポイントのリクエストまたはレスポンスの動作における、検証済みの差異を表すものである必要があります。エンドポイントがOpenAI互換またはAnthropic互換をうたっているという理由だけで有効にしないでください。」
compat.supportsEagerToolInputStreaming— ツールごとの入力を先行ストリーミングすると拒否するバックエンド向け。compat.supportsStrictTools— エンドポイントが厳密なJSONスキーマのツール定義を受け付けるかどうかを示します。カスタムモデルは、組み込みAnthropicモデルが宣言する設定を引き継ぎません。compat.supportsMidConvoEffort— 会話の途中で推論の強度を変更します。このエンドポイントが該当するかどうかは実行時に判断する必要があり、Kunavoは実際に動かして確認していません。
このページ上部のopenai-completionsブロックでは、これら3つすべてを設定していません。より良い結果が得られるという主張ではなく、ここから始めるのが誠実な理由はそこにあります。
よくある質問
PiコーディングエージェントをカスタムAPIプロバイダーに接続するには?
~/.pi/agent/models.jsonにプロバイダーブロックを追加します。Piのモデルページでは、「エンドポイントがPiの対応済みAPIを使用している場合」にmodels.jsonを使うよう案内されています。スキーマ(ソース、v0.99.2)では、プロバイダーレベルでbaseUrl、apiKey、api、headers、authHeader、models、modelOverridesを指定できます。組み込みではないプロバイダーには、baseUrlと、プロバイダーまたはモデルレベルのいずれかにあるapi値が必要です。スキーマではapiはリストではなく任意の文字列として型定義されています。2026年9月22日のドキュメント更新まで、Piはカスタムプロバイダー向けにopenai-completions、openai-responses、anthropic-messages、google-generative-aiの4つの値を記載していました。v0.99.2のソースではこのフィールドが組み込み実装10種類のいずれかに振り分けられますが、残り6つはこの用途について記載がなく、ここでもテストしていません。OpenAI互換エンドポイントの場合、更新後のドキュメントにも記載されている値はopenai-completionsです。models内の各項目には少なくともidが必要で、これはエンドポイントにそのまま渡されます。そのため、同じ形式でゲートウェイ、ローカルのOllamaまたはvLLMサーバー、その他の互換ホストを設定できます。
PiコーディングエージェントはどこからAPIキーを取得しますか?
Piのモデルページに記載された順序で、4つの場所から取得します。まず実行時の--api-key、次に保存済みのauth.json認証情報、続いてmodels.jsonのapiKey、最後にプロバイダーの環境変数です。そのため、以前に/loginで保存したキーは、models.jsonに今編集したキーより優先されます。apiKeyフィールドには環境変数の展開 — 「$NAME」または「${NAME}」 —、リテラル値、先頭に「!」を付けたシェルコマンドの出力を指定できます。そのため、秘密情報をファイル内に置く必要はありません。利用可能な認証情報がない場合、ドキュメントによると、カスタムモデルはmodels.jsonから読み込まれますが、/modelでは利用できません。
PiのbaseUrlの末尾には/v1が必要ですか?
openai-completionsプロバイダーの場合は必要です。Piのドキュメントにはルールが文章で明記されていませんが、互換エンドポイントの例ではOllamaにhttp://localhost:11434/v1を使用しています。また、2026年9月22日のドキュメント更新前は、OpenRouter、Vercel AI Gateway、llama.cppの例にも同じバージョンパスが付いていました。そのため、OpenAI互換エンドポイントには/v1をルートとして指定します。たとえばhttps://api.kunavo.com/v1です。anthropic-messagesの場合は実際に未確定です。旧ドキュメントでは/v1ありとなしの両方が示され、更新時にはどちらかを選ぶことなく両方の例が削除されました。
カスタムPiプロバイダーのフッターに$0と表示されるのはなぜですか?
Piではカスタムモデルのcostオブジェクトが既定ですべてゼロになるためです(ソース、v0.99.2)。フッターにはエンドポイントの請求額ではなく、カタログに記載された値が表示されます。無料という意味ではありません。プロバイダー独自の料金表に基づいて、100万トークンあたりの入力、出力、cacheRead、cacheWriteの各料金と、該当する料金階層を設定するまでは、数値の参照元がありません。ファイルを開いたついでに、隣接する2つの既定値も確認してください。contextWindowは128000、maxTokensは16384にフォールバックするため、より大きなコンテキストウィンドウを持つモデルでも、両方を明示的に設定しなければ早い段階で圧縮され、応答も途中で切られます。
KunavoはPiコーディングエージェントをテストしましたか?
いいえ。このページの設定は、表示された日付にPi自身のドキュメントを読み、9月22日のドキュメント更新で詳細が削除された箇所についてはPiのリリース済みソースも読んで確認しました。ただし、このクライアントでこのエンドポイントに接続して、セッション、ストリーミングでのターン、ツールの往復、モデルルーティングの確認は実施していません。このセクションにあるすべてのクライアントについても同様です。設定ブロックはPiのスキーマで受け付けられる内容を示す参考情報として扱い、上記のcurlでエンドポイントとキーを確認し、試す間は現在動作している接続経路も利用できるようにしておいてください。