OpenAI と Ollama の互換性
- 規範的
- ドラフト 1.0
- 更新日
- Markdown で表示
8.1 OpenAI 互換エンドポイント
サービスは、LMSP インターフェースと並べて OpenAI 互換インターフェースを提供し、interfaces に kind を openai として宣言するべきである。既存のクライアントをカバーするため、そうするサービスは、/v1 プレフィックスの下に少なくとも次のエンドポイントを実装しなければならない。
| エンドポイント | 備考 |
|---|---|
GET /v1/models |
LMSP カタログのモデルを一覧する。各 id は LMSP のモデル ID である。 |
POST /v1/chat/completions |
Chat Completions。ストリーミングあり・なしの両方。 |
POST /v1/responses |
OpenAI Responses の形式。 |
POST /v1/embeddings |
LMSP 1.0 のコアインターフェースには embeddings エンドポイントがない。アダプターが、capabilities.embeddings が true のモデル向けに、このエンドポイントを直接提供する。 |
これらのエンドポイントは、LMSP インターフェースと同じベアラートークンを受け付ける。OpenAI プロトコルを話すクライアントは、LMSP トークンを API キーとして設定する。
最初の実装は、/v1/models と /v1/chat/completions から始めてよい(第 12 章)。
8.2 Ollama 互換エンドポイント
サービスは、Ollama 向けに書かれたクライアントも動作するよう、次のエンドポイントも提供するべきである。
| エンドポイント | 備考 |
|---|---|
GET /api/tags |
LMSP カタログのモデルを一覧する。 |
POST /api/chat |
チャット。 |
POST /api/generate |
プレーンテキスト生成。 |
これらを提供するサービスは、kind を ollama としたインターフェースを宣言する。
8.3 1 つの実行コア
互換層は、データの変換だけを行わなければならない。モデル管理のロジックを第 2 の系統として作ってはならない。互換インターフェース上のリクエストは LMSP レスポンスにマッピングされ、ネイティブのリクエストと同じコアとアダプターの上で実行され、同じモデルカタログと認証を使う。
OpenAI Chat Completions
| リクエストのマッピング
v
LMSP Response
| バックエンドへの適応
v
llama.cpp / Ollama / vLLM / その他のランタイム
/v1 と /api のエンドポイントでは、サービスは、変更されていないクライアントが解析できるよう、対応する API が定義する形式でエラーを報告するべきである。LMSP インターフェースは常に application/problem+json を使う。
8.4 境界
互換性には限界がある。それをはっきり述べておく価値がある。
- 既存の OpenAI 互換クライアントに必要なのは、通常
base_urlの変更だけである。LMSP の発見が自動的に使えるようになるわけではない。 - サービスを自動的に発見し、詳細な機能を読み取り、イベントストリームを再開し、非同期タスクを管理できるのは、LMSP に対応したクライアントだけである。
- 設定できず、公式のクラウドアドレスだけを受け付けるクライアントを動作させられるサーバー側プロトコルは存在しない。