OpenAI Passthrough
OpenAI Passthrough
OpenAI API를 직접 호출하기 위한 패스스루 엔드포인트를 소개할게요. OpenAI 고유 엔드포인트를 네이티브 형식 그대로(변환 없이) 호출할 수 있는 기능이에요.
출처: 문서
본문
개요 (Overview)
사용 가능한 엔드포인트 (Available Endpoints)
/openai_passthrough (권장)
/v1/responses같은 최신 엔드포인트를 지원해요.
/openai (레거시)
/openai/v1/responses형태로 동작하는 이전 방식이에요.
WebSocket 엔드포인트는 기본적으로 꺼져 있어요 (WebSocket Endpoints are Off by Default)
/openai_passthrough/v1/realtime 같은 WebSocket 엔드포인트는 기본적으로 비활성화돼 있어요. 사용하려면 config.yaml에서 enable_openai_websocket_passthrough: true를 설정해야 해요. (WebSocket 엔드포인트의 경우 /openai/v1/responses 같은 주소는 지원되지 않을 수 있어요.)
general_settings:
enable_openai_websocket_passthrough: true
WebSocket 활성화 시 error 또는 HTTP 1008 상태 코드가 반환될 수 있어요. 또한 모델 목록에 store_model_in_db: true를 설정하고 POST /config/field/update로 model_list를 갱신해야 WebSocket 엔드포인트가 동작할 수 있어요. (/v1/realtime 경로를 기준으로 동작합니다.)
언제 사용하나요? (When to use this)
이 기능은 OpenAI의 비 OpenAI 호환 엔드포인트(즉 /chat/completions, /embeddings, /completions, /images, /batches 같은 네이티브 OpenAI 형태)에 접근할 필요가 있을 때 유용해요. OpenAI 호환 /v1/... 엔드포인트를 쓴다면 OpenAI 프로바이더 가이드를 참고하는 게 좋아요.
네이티브 OpenAI 형식으로 호출 가능한 엔드포인트는 다음과 같아요.
/assistants
/threads
/vector_stores
/responses
연결 대상 호스트는 다음과 같아요.
https://api.openai.com
프록시를 통한 주소는 이렇게 구성돼요.
LITELLM_PROXY_BASE_URL/openai_passthrough
사용 예시 (Usage Examples)
OPENAI_API_KEY 환경 변수로 OpenAI 키를 설정해요.
Embeddings
curl http://0.0.0.0:4000/openai_passthrough/v1/embeddings \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-small",
"input": "hello world"
}'
Assistants API
OpenAI 클라이언트 생성
base_url에 LiteLLM 프록시 URL(LITELLM_PROXY_BASE_URL/openai_passthrough)을 넣고, api_key에는 LiteLLM API 키(LITELLM_API_KEY)를 넣어요.
import openai
client = openai.OpenAI(
base_url="http://0.0.0.0:4000/openai_passthrough", # <your-proxy-url>/openai_passthrough
api_key="sk-anything" # <your-proxy-api-key>
)
어시스턴트(Assistant) 생성
# Create an assistant
assistant = client.beta.assistants.create(
name="Math Tutor",
instructions="You are a math tutor. Help solve equations.",
model="gpt-5.6-terra",
)
스레드(Thread) 생성
# Create a thread
thread = client.beta.threads.create()
스레드에 메시지 추가
# Add a message
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="Solve 3x + 11 = 14",
)
어시스턴트 실행(Run)
# Create a run to get the assistant's response
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
)
# Check run status
run_status = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id)
메시지 조회
# List messages after the run completes
messages = client.beta.threads.messages.list(
thread_id=thread.id)
어시스턴트 삭제
# Delete the assistant when done
client.beta.assistants.delete(assistant.id)