このプロジェクトについて
llama-swapは、1台のマシンで複数の生成AIモデルを実行し、必要に応じて切り替えるためのプロキシです。OpenAIまたはAnthropic API互換の任意の推論サーバーの前に位置し、受信リクエストごとに`model`フィールドを読み取り、それを処理するために必要な上流サーバーを起動または置き換えます。このプロジェクトはGoで書かれており、1つのバイナリと1つの設定ファイルとして配布され、外部依存関係はないとされています。
対応する上流には、llama.cppとそのフォーク、vllm、stable-diffusion.cpp、whisper.cpp、audio.cpp、ComfyUIが含まれます。このプロキシは特定のエンジンに縛られずプロトコルレベルで動作するため、READMEでは推論サーバーを独立してアップグレードできると述べられています。
APIサーフェス
- OpenAI形式のエンドポイント: `v1/completions`、`v1/chat/completions`、`v1/responses`、`v1/embeddings`、`v1/models`、`v1/audio/speech`、`v1/audio/transcriptions`、`v1/audio/voices`、`v1/images/generations`、`v1/images/edits`。
- Anthropic形式のエンドポイント: `v1/messages`、`v1/messages/count_tokens`。
- llama-serverの追加機能: `v1/rerank`、`v1/reranking`、`/rerank`、`/infill`、`/completion`、`/models`、`/props`。
- stable-diffusion.cppのサーバーによるSDAPIエンドポイント、およびaudio.cppのタスクエンドポイントと`/comfyui/`カスタムエンドポイント。
- 管理エンドポイント: `/ui`、`/upstream/:model_id`、`/running`、`POST /api/models/unload`(全モデル)、`POST /api/models/unload/:model_id`、`/api/profiles`によるプロファイル一覧と有効化、`/health`、PrometheusのシステムおよびGPUメトリクス用の`/metrics`。
- ログエンドポイント: バッファリングされたプレーンテキストログ用の`/logs`、ライブストリーミング用の`/logs/stream`、および`/logs/stream/proxy`、`/logs/stream/upstream`、`/logs/stream/{model_id}`のバリアント。`?no-history`を付けると新しい行のみをストリーミングします。
設定と機能
最小限の設定では、各エントリがIDと`cmd`を持つ`models`マップを宣言します。`${PORT}`は自動的に割り当てられたポートに置換されます。オプション設定には、非アクティブ後に自動アンロードする`ttl`、`unloadTimeout`、馴染みのあるモデル名のための`aliases`、`env`変数、Docker/Podmanを正常にシャットダウンするための`cmdStop`、`useModelName`、リクエスト`filters`(`stripParams`、`setParams`、`setParamsByID`)、起動時のプリロード用`hooks`、`macros`、カスタムのスワップロジックで同時モデルを実行するための`matrix` DSLがあります。APIキーを定義してエンドポイントアクセスを制限でき、プロファイルにより実行時にモデルIDルーティングを切り替えられます。
同梱のWeb UIは、プレイグラウンド、トークンメトリクス、リクエスト/レスポンスの検査、手動でのモデルロードとアンロード、リアルタイムのログストリーミングを提供します。Helpページはllama-swap自身のドキュメントに対してローカルのツール対応モデルを実行し、同じツールは`/api/mcp`のMCPエンドポイントとして公開されます。
インストール
記載されているオプションは、Docker、Homebrew、MacPorts、WinGet、リリースバイナリ(Linux、macOS、Windows、FreeBSD)、およびGoとNode.jsを使ったソースからのビルドです。ナイトリDockerイメージには2つの系統があります。llama-server、ik-llama-server、stable-diffusion.cpp、whisper.cpp、audio.cpp、llama-swapを同梱した統合イメージ(CUDA 12、CUDA 13、Vulkanのバリアント、推奨)と、llama.cpp自身の`llama-server`コンテナをベースにしたレガシーイメージです。統合イメージは、コマンドラインフラグに対応する`LLAMA_SWAP_*`環境変数を通じて設定できます。
運用上の注意
READMEでは、llama-swapをnginxの背後に配置する際にレスポンスバッファリングを無効にすることを推奨しています。バッファリングはSSEとストリーミングチャット補完を壊すためです。またllama-swapはSSEレスポンスに`X-Accel-Buffering: no`を設定します。vllmやtabbyAPIのようなPythonベースのサーバーについては、環境の分離と正しい`SIGTERM`処理のためにPodmanまたはDockerで実行することが推奨されています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.