OpenAI と Ollama の互換性

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 に対応したクライアントだけである。
  • 設定できず、公式のクラウドアドレスだけを受け付けるクライアントを動作させられるサーバー側プロトコルは存在しない。