mcpField
O
omni-inference

omni-inference

github.com/cheaper-inference開発82.3k1.1k 回インストール今日更新
リポジトリ

omni-inference について

omni-inference は、AI エージェントなどの連携先に向けた OmniRoute の OpenAI 互換推論 API を説明するスキルです。チャットや Responses に加え、画像、音声、埋め込み、モデレーション、再ランキング、検索とモデル探索を扱います。

主な機能

  1. 01OpenAI 互換のチャットと Responses API
  2. 02画像生成と編集のエンドポイント
  3. 03音声合成と音声文字起こし
  4. 04埋め込み、モデレーション、再ランキング
  5. 05機能別のモデル検索
  6. 06ツール結果を圧縮する RTK

活用シーン

  1. 01チャットやコード生成のリクエストを送信
  2. 02API で画像を生成または編集
  3. 03音声の文字起こしや音声合成
  4. 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を設定してください。

エンドポイント

ペイロード

詳細なリクエスト/レスポンススキーマについては、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 で別のモデルを試してください

コメント