ドキュメント
Oh My Pi
Oh My Piではプロバイダーを1つのYAMLファイルで管理します。任意の名前の下にbaseUrl、api、apiKeyの3行を追加すれば、ompは1つのキーを使ってClaudeとGPTへルーティングできます。モデル一覧は手入力ではなく取得します。
~/.omp/agent/models.ymlのプロバイダーブロック — baseUrl、api、apiKey — でOh My PiをKunavoに接続し、GET /v1/modelsからモデル一覧を自動取得します。
providers:
kunavo:
baseUrl: https://api.kunavo.com/v1
api: openai-completions
apiKey: KUNAVO_API_KEY # an env-var name; literal text also works
discovery:
type: openai-models-list # reads GET /v1/models
# Prefer a fixed list to a discovered one? Drop the discovery block and
# declare ids instead. Omitted metadata defaults to a 128,000-token context
# window and a 16,384-token output limit, so set the real numbers from
# /models when they differ.
#
# models:
# - id: claude-sonnet-5
# name: Claude Sonnet 5
# contextWindow: ...
# maxTokens: .../v1を付けます。ompではbaseUrlを「Endpoint root」、openai-completionsを「OpenAI-compatible Chat Completions」と説明しています。また、独自の404トラブルシューティング項目には「一般的なOpenAI互換ベースURLは、末尾が/v1であることが多い」とあります。両ページにあるカスタムプロバイダーの例もすべて同じ形式です。「多い」という表現には断定を避ける含みがありますが、Kunavoは/v1/chat/completionsを提供しているため、それを利用できるルートはhttps://api.kunavo.com/v1です。これは、オリジンのみを指定するAnthropic形式のクライアントとは逆です。authHeaderを省略してください。ompの説明では、Authorization: Bearerを通常のヘッダーとして明示的に挿入する必要があるゲートウェイ向けの設定です。また、「標準のプロバイダークライアントは通常の認証方式をすでに適用する」とも記載されています。OpenAI互換クライアントもその方式を適用し、Kunavoもそれを受け付けます。下記のcurlで再現できない401が発生した場合に限り、追加してください。curlで確認できる部分は10秒で確認できます。それ以外は、ユーザーとompとの間で確認することになります。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Oh My Pi設定が表示されます。手順
/app/keysでキーを作成してコピーします。キーは一度だけ表示されます。- ompを起動するシェルで
KUNAVO_API_KEYとしてエクスポートします。ompはまずapiKeyを環境変数名として解決し、見つからない場合は文字列をキーそのものとして扱います。そのため、変数名を誤って入力しても気付かないまま読み込まれ、最初のリクエストで失敗します。!で始まる値は代わりにシェルコマンドとして実行されます。これは1Password形式の方法です。 - 上記のブロックを
~/.omp/agent/models.ymlに記述します。ここでのプロバイダーID —kunavo— は任意に選べ、すべてのセレクターの前半部分になります。 omp models kunavoを実行してファイルを読み込み、このプロバイダーだけを一覧表示します。YAMLまたはスキーマに問題がある場合は、models.yml validation failedと失敗したフィールドが表示されます。omp models refresh kunavoを指定すると、キャッシュ済みのカタログを使わずに新たに検出リクエストを行います。- 正確なセレクターで動作を確認します。
omp -p --model kunavo/claude-sonnet-5 "Reply with only OK"。次にompを起動し、/modelと入力して、使いたいIDをDefaultに設定します。モデルハブを開くとmodels.ymlが再読み込みされます。/switchが変更するのは現在のセッションだけです。
ompのProvidersページで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがOh My 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 入力 / 出力 | Oh My Piでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | defaultロール — ほとんどのセッションで実際に使うモデル |
claude-opus-5 | $3.50 / $17.50 | planロール — 誤った計画のコストがトークン代を上回る用途 |
claude-haiku-4-5 | $0.70 / $3.50 | smolロール:トリアージ、要約、絶えず呼び出される処理 |
gpt-5-6-sol | $2.00 / $12.00 | 同じプロバイダーブロックを使う、別系統のモデルからのセカンドオピニオン |
モデル検出:どのタイプを使うか、モデル選択欄に何が表示されるか
ompには6種類のdiscovery.typeがあり、そのうち2つはゲートウェイに適しているように見えますが、使えるのは1つだけです。proxyは「各モデルの行でsupported_endpoint_typesを通知する、OpenAI/Anthropic混在プロキシ」向けとされ、そのフィールドに基づいて各モデルのワイヤ形式が決まります。KunavoのGET /v1/modelsではこのフィールドを公開していないため、proxyではすべてのモデルがプロバイダーレベルのapiにフォールバックするか、未設定なら除外されます。「汎用のOpenAI互換GET /v1/modelsエンドポイント」と説明されているopenai-models-listを使ってください。そのため、上記の設定にはapi: openai-completionsを指定しています。ompの規則では、「proxyを除き、検出にはプロバイダーレベルのapiが必要」です。
モデル選択欄を開く前に、知っておきたい点が1つあります。Kunavoのモデル一覧には、有効になっているカタログ全体が表示されます。そのため、検出したプロバイダーにはチャットモデルとともに画像、動画、音楽のIDも表示されますが、チャット用の通信方式ではこれらを呼び出せません。チャットモデルではKunavoがcontext_lengthを公開しており、モデルに関するドキュメントによると、ompの汎用検出はmax_model_lenの後でこのフィールドを読み取ります。一方、メディアモデルではこれが省略されるため、実際の値ではなくompのデフォルトである128,000トークンとして扱われます。短く正確なモデル一覧が必要なら、検出ブロックを削除し、実際に使う3~4個のIDを宣言してください。
ompはanthropic-messagesにも対応しており、Kunavoは/v1/messagesで応答します。この組み合わせの設定ブロックはこのページには掲載していません。ここで引用する2つのページでは、OpenAI互換ルートのベースURL形式は確認できますが、Anthropicルートで末尾の/v1がどう扱われるかは説明されていません。設定ブロックは読者がそのまま貼り付けられることが目的です。この方法を使う場合、Anthropic互換エンドポイントでツール呼び出しが400エラーになるときの対処法として、ドキュメントではdisableStrictTools: trueを指定するよう案内しています。
よくある質問
Oh My PiにカスタムAPIプロバイダーを追加するには?
設定はすべて~/.omp/agent/models.ymlで行います。`providers:`の下にキーを追加します。名前は任意で、セレクターのプロバイダー部分になります。baseUrl、api、apiKeyを指定します。この順序はomp独自の「Add a custom provider」例と同じです。`models:`の下にモデルを手動で列挙するか、`discovery:`ブロックを追加してompに取得させます。次に`omp models <your-provider-id>`を実行してファイルが読み込まれたことを確認し、`omp --model <provider>/<model-id>`またはセッション内の/modelハブでモデルを選択します。
Oh My PiのbaseUrlの末尾に/v1は必要ですか?
OpenAI互換エンドポイントの場合は必要です。ompではbaseUrlをエンドポイントのルートと呼び、指定されたapiファミリーのルートを付加します。そのため、`api: openai-completions`の場合は、指定したルートの下にあるチャット補完エンドポイントへリクエストします。omp独自の404トラブルシューティングの説明では、一般的なOpenAI互換ベースURLは末尾が/v1であることが多く、ドキュメントにあるカスタムプロバイダーの例もすべてそうなっています。Kunavoが提供するのは/v1/chat/completionsなので、指定するルートはhttps://api.kunavo.com/v1です。/v1を省くと、認証エラーではなく404または「unsupported endpoint」が返ります。
Oh My PiはAPIキーをどこから取得しますか?優先順位はどうなっていますか?
models.ymlのapiKeyは3段階で解決されます。!で始まる値はシェルコマンドとして実行され、前後の空白を取り除いた標準出力が使われます。それ以外では、まず同じ名前の環境変数を検索し、見つからなければ文字列自体をキーとして扱います。最後の代替処理には注意が必要です。環境変数名を誤って入力してもエラーにならず読み込まれ、最初のリクエストで失敗します。全体の優先順位では、models.ymlのキーが保存済みOAuthより優先されます。ompのドキュメントではこれを意図的な仕様と説明しているため、ゲートウェイ用に設定したキーが上流のログイン情報で上書きされることはありません。
ompではゲートウェイにどの検出タイプを使うべきですか?
モデルごとの行でゲートウェイがsupported_endpoint_typesを通知しない限り、proxyではなくopenai-models-listを使ってください。proxyはこのフィールドを読み取り、モデルを/v1/messagesと/v1/chat/completionsのどちらに送るかを判断します。これがない場合、モデルはプロバイダーレベルのapiにフォールバックするか、除外されます。Kunavoの/v1/modelsはこのフィールドを公開しないため、汎用のOpenAI一覧が適切なタイプです。また、ompではproxyを除くすべての検出タイプにプロバイダーレベルのapiが必要です。キャッシュ済みカタログを使わず新たに取得するには、`omp models refresh <provider>`を実行します。
KunavoではOh My Piをエンドポイントに接続してテストしましたか?
いいえ。2026年9月21日に確認したのはomp独自のドキュメントです。フィールド名とその順序、キー解決の規則、検出タイプは同ドキュメントから引用しており、さらに2点は推測せずKunavo独自の/v1/modelsルートで確認しました。ここではapi.kunavo.comに接続してompのセッションを実行しておらず、クライアント内でのストリーミング、ツールの往復、モデルのルーティングについても何も主張していません。単独で確認できるのは、エンドポイントとキーが機能するかどうかです。このページのcurlで確認できます。