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 하나의 실행 코어

호환 계층은 데이터 변환만 수행해야 한다. 모델 관리 로직을 별도로 만들어서는 안 된다. 호환 인터페이스의 요청은 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를 지원하는 클라이언트뿐이다.
  • 설정할 수 없고 공식 클라우드 주소만 받아들이는 클라이언트를 동작하게 만들 수 있는 서버 측 프로토콜은 없다.