omni-inference について
omni-inference は、AI エージェントなどの連携先に向けた OmniRoute の OpenAI 互換推論 API を説明するスキルです。チャットや Responses に加え、画像、音声、埋め込み、モデレーション、再ランキング、検索とモデル探索を扱います。
主な機能
- 01OpenAI 互換のチャットと Responses API
- 02画像生成と編集のエンドポイント
- 03音声合成と音声文字起こし
- 04埋め込み、モデレーション、再ランキング
- 05機能別のモデル検索
- 06ツール結果を圧縮する RTK
活用シーン
- 01チャットやコード生成のリクエストを送信
- 02API で画像を生成または編集
- 03音声の文字起こしや音声合成
- 04テキスト入力の埋め込みを作成
MCP 対応
README では OmniRoute に MCP サーバーが組み込まれていると説明されています。このスキルは推論 API のエンドポイントを扱いますが、MCP サーバーが公開するツールは記載していません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cheaper-inference/ omniroute --skill omni-inferenceインストール後、Claude Code で/omni-inferenceを入力して読み込まれたか確認します。
同梱ファイルreferences/endpoints.md
詳細
概要
OpenAI互換の推論エンドポイントの中核です。チャット補完、埋め込み、画像、音声(TTS/STT)、モデレーション、再ランキング、Responses APIを提供します。AIエージェント向けの主要な統合インターフェースです。
認証
すべてのリクエストには、有効なBearerトークンまたはセッションCookieが必要です。POST /api/auth/loginでトークンを取得するか、ローカル開発用にREQUIRE_API_KEY=falseを設定してください。
エンドポイント
POST /api/v1/session-leasesGET /api/v1/searchPOST /api/v1/searchPOST /api/v1/chat/completionsGET /api/v1/wsPOST /api/v1/providers/{provider}/chat/completionsPOST /api/v1/api/chatPOST /api/v1/messagesPOST /api/v1/messages/count_tokensPOST /api/v1/responsesPOST /api/v1/embeddingsGET /api/v1/multimodal-embeddingsPOST /api/v1/multimodal-embeddingsPOST /api/v1/providers/{provider}/embeddingsPOST /api/v1/images/generationsPOST /api/v1/providers/{provider}/images/generationsPOST /api/v1/audio/speechPOST /api/v1/audio/transcriptionsPOST /api/v1/moderationsPOST /api/v1/rerankGET /api/v1GET /api/v1/providers/{provider}/modelsGET /api/v1/management/proxy-subscriptionsPOST /api/v1/management/proxy-subscriptionsGET /api/v1/management/proxy-subscriptions/{id}PATCH /api/v1/management/proxy-subscriptions/{id}DELETE /api/v1/management/proxy-subscriptions/{id}GET /api/v1/management/proxy-subscriptions/{id}/nodesPOST /api/v1/management/proxy-subscriptions/{id}/refreshPOST /api/v1/ocrPOST /api/v1/audio/translationsGET /api/v1/voicesPOST /api/v1/speech-to-textPOST /api/v1/text-to-speech/{voiceId}GET /api/v1/explain/routingGET /api/v1/providers/suggested-modelsGET /api/v1/provider-plugin-manifestGET /api/v1/{omnirouteCatchAll}POST /api/v1/{omnirouteCatchAll}PUT /api/v1/{omnirouteCatchAll}PATCH /api/v1/{omnirouteCatchAll}DELETE /api/v1/{omnirouteCatchAll}GET /api/v1/accounts/{id}/limitsPUT /api/v1/accounts/{id}/limitsGET /api/v1/agents/credentialsPOST /api/v1/agents/credentialsGET /api/v1/agents/healthGET /api/v1/agents/tasksPOST /api/v1/agents/tasksDELETE /api/v1/agents/tasksGET /api/v1/agents/tasks/{id}POST /api/v1/agents/tasks/{id}DELETE /api/v1/agents/tasks/{id}POST /api/v1/antigravityGET /api/v1/auto-combo/{channel}/candidatesGET /api/v1/batchesPOST /api/v1/batchesGET /api/v1/batches/{id}DELETE /api/v1/batches/{id}POST /api/v1/batches/{id}/cancelDELETE /api/v1/batches/delete-completedPOST /api/v1/classifyGET /api/v1/combosPOST /api/v1/completionsGET /api/v1/filesPOST /api/v1/filesGET /api/v1/files/{id}DELETE /api/v1/files/{id}GET /api/v1/files/{id}/contentPOST /api/v1/images/editsGET /api/v1/images/upscalePOST /api/v1/images/upscaleGET /api/v1/media/{id}POST /api/v1/issues/reportGET /api/v1/management/proxiesPOST /api/v1/management/proxiesPATCH /api/v1/management/proxiesDELETE /api/v1/management/proxiesGET /api/v1/management/proxies/assignmentsPUT /api/v1/management/proxies/assignmentsPUT /api/v1/management/proxies/bulk-assignGET /api/v1/management/proxies/healthGET /api/v1/me/statusGET /api/v1/muse-code/modelsGET /api/v1/music/generationsPOST /api/v1/music/generationsGET /api/v1/providers/{provider}/limitsPUT /api/v1/providers/{provider}/limitsGET /api/v1/quotas/checkGET /api/v1/registered-keysPOST /api/v1/registered-keysGET /api/v1/registered-keys/{id}DELETE /api/v1/registered-keys/{id}POST /api/v1/registered-keys/{id}/revokePOST /api/v1/relay/chat/completionsPOST /api/v1/relay/chat/completions/bifrostPOST /api/v1/responses/{path}GET /api/v1/search/analyticsPOST /api/v1/segmentGET /api/v1/video-bridge/drilldownDELETE /api/v1/video-bridge/drilldownGET /api/v1/videos/generationsPOST /api/v1/videos/generationsGET /api/v1/vscode/{token}POST /api/v1/vscode/{token}/api/chatPOST /api/v1/vscode/{token}/api/showGET /api/v1/vscode/{token}/api/tagsGET /api/v1/vscode/{token}/api/versionPOST /api/v1/vscode/{token}/chat/completionsGET /api/v1/vscode/{token}/combosGET /api/v1/vscode/{token}/modelsPOST /api/v1/vscode/{token}/responsesPOST /api/v1/vscode/{token}/v1/chat/completionsGET /api/v1/vscode/{token}/v1/modelsGET /api/v1/vscode/combos/{token}/{{slug}}POST /api/v1/vscode/combos/{token}/{{slug}}GET /api/v1/vscode/raw/{token}POST /api/v1/vscode/raw/{token}/api/chatPOST /api/v1/vscode/raw/{token}/api/showGET /api/v1/vscode/raw/{token}/api/tagsGET /api/v1/vscode/raw/{token}/api/versionPOST /api/v1/vscode/raw/{token}/chat/completionsGET /api/v1/vscode/raw/{token}/combosGET /api/v1/vscode/raw/{token}/modelsPOST /api/v1/vscode/raw/{token}/responsesPOST /api/v1/vscode/raw/{token}/v1/chat/completionsGET /api/v1/vscode/raw/{token}/v1/modelsPOST /api/v1/web/fetch
ペイロード
詳細なリクエスト/レスポンススキーマについては、GET /api/openapi/spec または docs/openapi.yaml の OpenAPI 仕様全体を参照してください。
チャット補完
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイント SKILL を参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/chat/completions— OpenAI 形式POST $OMNIROUTE_URL/v1/messages— Anthropic Messages 形式POST $OMNIROUTE_URL/v1/responses— OpenAI Responses API
確認
curl $OMNIROUTE_URL/v1/models | jq '.data[].id'
コンボ(例:auto、cost-optimized、subscription)は、複数のプロバイダーへ自動的にフォールバックします。
OpenAI 形式の例
curl -X POST $OMNIROUTE_URL/v1/chat/completions \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"messages": [{"role": "user", "content": "Refactor this function"}],
"stream": true
}'
Anthropic 形式の例
curl -X POST $OMNIROUTE_URL/v1/messages \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"max_tokens": 4096,
"messages": [{"role": "user", "content": "Hi"}]
}'
ツールの使用
OpenAI の tools 配列と Anthropic の tools ブロックに対応しています。ツールの結果は RTK(47 種類のフィルター:git-diff、grep、test-jest、terraform-plan、docker-logs など)によって自動的に圧縮され、トークンを 20~40% 節約できます。リクエストごとに無効にするには、X-Omniroute-Rtk: off ヘッダーを指定してください。
推論/思考
Anthropic の拡張思考と OpenAI Responses の推論ブロックは、そのまま転送されます。推論キャッシュによって自動的にキャッシュされます。
エラー
401→ API キーが無効です400 invalid_model→ モデルがレジストリにありません。/v1/modelsを確認してください503 circuit_open→ プロバイダーのサーキットブレーカーが作動しました。後で再試行するか、コンボを使用してください429 rate_limited→Retry-Afterに従ってください。自動フォールバックにはコンボの使用を検討してください
画像生成
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイント SKILL を参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/images/generations— テキストから画像を生成POST $OMNIROUTE_URL/v1/images/edits— 画像編集(マスク)POST $OMNIROUTE_URL/v1/images/variations— バリエーション
確認
curl $OMNIROUTE_URL/v1/models/image | jq '.data[]'
モデルごとに { id, owned_by, sizes:[...], capabilities:[...] } を返します。
生成例
curl -X POST $OMNIROUTE_URL/v1/images/generations \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dall-e-3",
"prompt": "a red bicycle on a wet street, photoreal",
"n": 1,
"size": "1024x1024",
"response_format": "b64_json"
}'
レスポンス:{ created, data: [{ url? or b64_json, revised_prompt }] }
エラー
400 invalid_size→ このモデルではサポートされていません。/v1/models/imageを確認してください400 content_policy_violation→ プロバイダーの安全基準によりブロックされました503→ プロバイダーを利用できません。/v1/models/imageから別のモデルを試してください
テキスト読み上げ
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイント SKILL を参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/audio/speech— バイナリー音声(mp3/opus/wav/flac)を返します
確認
curl $OMNIROUTE_URL/v1/models/tts | jq '.data[]'
各エントリーには、プロバイダーごとに利用可能な音声名を示す voices:[...] が含まれます。
例
curl -X POST $OMNIROUTE_URL/v1/audio/speech \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from OmniRoute.",
"voice": "alloy",
"response_format": "mp3"
}' --output speech.mp3
音声
音声名はプロバイダーによって異なります。/v1/models/tts を確認してください。各エントリーに voices:[...] が含まれています。
一般的な OpenAI の音声:alloy、echo、fable、onyx、nova、shimmer。
エラー
400 invalid_voice→ このモデルでは音声がサポートされていません400 input_too_long→ 入力がモデルの文字数制限を超えています503→ プロバイダーを利用できません。/v1/models/ttsから別のモデルを試してください
音声テキスト変換
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイント SKILL を参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/audio/transcriptions— マルチパート形式でアップロードし、テキストを返しますPOST $OMNIROUTE_URL/v1/audio/translations— 文字起こしし、英語に翻訳します
確認
curl $OMNIROUTE_URL/v1/models/stt | jq '.data[]'
例
curl -X POST $OMNIROUTE_URL/v1/audio/transcriptions \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-F "[email protected]" \
-F "model=whisper-1" \
-F "response_format=verbose_json"
レスポンス:{ text, language, duration, segments?:[{ start, end, text }] }
対応形式
音声:mp3、mp4、mpeg、mpga、m4a、wav、webm。
レスポンス形式:json、text、srt、verbose_json、vtt。
エラー
400 invalid_file_format→ サポートされていない音声形式です400 file_too_large→ プロバイダーの上限を超えています(通常は 25MB)503→ プロバイダーを利用できません。/v1/models/sttから別のモデルを試してください
エンベディング
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイントのSKILLを参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/embeddings
検出
curl $OMNIROUTE_URL/v1/models/embedding | jq '.data[]'
各エントリー:{ id, owned_by, dimensions, max_input_tokens }。
例
curl -X POST $OMNIROUTE_URL/v1/embeddings \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-large",
"input": ["first text", "second text"],
"encoding_format": "float"
}'
レスポンス:{ data:[{ embedding:[...], index }], usage:{ prompt_tokens, total_tokens } }
バッチ入力
input には文字列または文字列の配列を指定できます(プロバイダーのバッチ上限まで。通常は2048件)。
エラー
400 input_too_long→ 入力がこのモデルのmax_input_tokensを超えています400 invalid_encoding_format→floatまたはbase64を使用してください503→ プロバイダーを利用できません。/v1/models/embeddingで別のモデルを試してください
ウェブ検索
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイントのSKILLを参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/web/search— 統一検索形式
検出
curl $OMNIROUTE_URL/v1/models/web | jq '.data[] | select(.kind == "webSearch")'
例
curl -X POST $OMNIROUTE_URL/v1/web/search \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tavily/search",
"query": "OmniRoute github latest release",
"max_results": 5,
"include_answer": true
}'
レスポンス:{ answer?, results:[{ url, title, content, score }] }
パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
model | 文字列 | /v1/models/web のプロバイダーモデル |
query | 文字列 | 検索クエリ |
max_results | 数値 | 結果の最大数(デフォルト:5) |
include_answer | ブール値 | AI が生成した回答を含めます |
search_depth | 文字列 | basic または advanced(Tavily) |
エラー
400 query_too_long→ 検索クエリを短くしてください503→ プロバイダーを利用できません。/v1/models/webで別のモデルを試してください
ウェブ取得
OMNIROUTE_URL と OMNIROUTE_KEY が必要です。セットアップについては、エントリーポイントのSKILLを参照してください。
エンドポイント
POST $OMNIROUTE_URL/v1/web/fetch
検出
curl $OMNIROUTE_URL/v1/models/web | jq '.data[] | select(.kind == "webFetch")'
例
curl -X POST $OMNIROUTE_URL/v1/web/fetch \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jina/reader",
"url": "https://anthropic.com",
"format": "markdown"
}'
レスポンス:{ url, title, markdown, links?:[...], images?:[...] }
パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
model | 文字列 | /v1/models/web のプロバイダー(例:jina/reader、firecrawl/scrape) |
url | 文字列 | 取得するURL |
format | 文字列 | markdown(デフォルト)、html、text |
エラー
400 invalid_url→ URL は http/https である必要があります403 blocked→ 対象サイトによってプロバイダーがブロックされました。別のモデルを試してください503→ プロバイダーを利用できません。/v1/models/webで別のモデルを試してください