Responses (OpenAI)
OpenAI Responses 형식 인바운드 어댑터. OpenAI의 Codex CLI는 /v1/responses만 사용하므로, 이 엔드포인트로 Codex와 Responses SDK를 연결합니다.
OpenAI의 Codex CLI는 /v1/responses 형식만 말합니다. PleumRouter는 이 형식을 받아 내부 모델 호출로 변환하는 인바운드 어댑터를 제공하므로, Codex CLI(및 OpenAI Responses SDK)를 PleumRouter에 그대로 붙일 수 있습니다.
연결하기#
base URL을 https://router.pleum.ai/v1로, API 키를 plm_ 키로 설정하세요. Codex에서는 wire_api = "responses"로 지정하면 이 엔드포인트로 호출됩니다.
export OPENAI_BASE_URL="https://router.pleum.ai/v1"
export OPENAI_API_KEY="plm_..."요청 본문#
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
| model | string | 필수 | 모델 ID. GET /v1/models에서 전체 목록 확인. |
| input | string | array | 필수 | 문자열, 또는 항목 배열(message / function_call / function_call_output). |
| instructions | string | 선택 | system 메시지로 앞에 추가됩니다. |
| max_output_tokens | integer | 선택 | 기본값 4096. 내부 max_tokens로 매핑됩니다. |
| temperature | number | 선택 | 샘플링 온도. |
| top_p | number | 선택 | 누클리어스 샘플링. |
| stream | boolean | 선택 | true면 Responses SSE 스트리밍 응답. |
| tools | array | 선택 | Responses 플랫 함수 도구({type:"function", name, description, parameters})는 변환됩니다. 함수가 아닌 도구(예: web_search)는 조용히 무시됩니다. |
| tool_choice | string | object | 선택 | 문자열 auto | none | required, 또는 {type:"function", name}. |
| parallel_tool_calls | boolean | 선택 | 병렬 도구 호출 허용 여부. |
| metadata | object | 선택 | 임의의 키-값 메타데이터. |
curl https://router.pleum.ai/v1/responses \
-H "Authorization: Bearer $PLEUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4.1",
"instructions": "You are a helpful assistant.",
"input": [
{
"type": "message",
"role": "user",
"content": "Hello"
}
],
"max_output_tokens": 4096,
"stream": false
}'응답#
비스트리밍 응답은 output 배열에 어시스턴트 메시지를 담아 반환합니다. 각 메시지의 content는 output_text 파트로 구성되고,usage에는 input_tokens / output_tokens / total_tokens가 포함됩니다. 비용은 본문이 아니라 X-Cost-Krw / X-Cost-Usd 응답 헤더로 반환됩니다. Codex가 보내는 추가 필드(reasoning, text, store, previous_response_id, include, prompt_cache_key)는 수용되지만 무시됩니다.
{
"id": "resp_gpt-4.1-841ms",
"object": "response",
"created_at": 1735689600,
"status": "completed",
"model": "gpt-4.1",
"output": [
{
"id": "msg_abc123",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{"type": "output_text", "text": "Hi!", "annotations": []}
]
}
],
"usage": {
"input_tokens": 12,
"output_tokens": 5,
"total_tokens": 17
}
}스트리밍#
stream: true로 요청하면 Responses SSE 이벤트가 전송됩니다 — response.created → response.in_progress → output_item.added / content_part.added / output_text.delta → output_text.done / output_item.done → 전체 usage가 담긴 response.completed. Codex는 완성된 항목을 output_item.done에서 읽고, 종료는 response.completed로 판단합니다.
data: {"type":"response.created","response":{"id":"resp_abc","status":"in_progress"}}
data: {"type":"response.in_progress","response":{"id":"resp_abc"}}
data: {"type":"output_item.added","item":{"id":"msg_abc","type":"message","role":"assistant"}}
data: {"type":"content_part.added","item_id":"msg_abc","part":{"type":"output_text","text":""}}
data: {"type":"response.output_text.delta","item_id":"msg_abc","delta":"Hi"}
data: {"type":"response.output_text.delta","item_id":"msg_abc","delta":"!"}
data: {"type":"response.output_text.done","item_id":"msg_abc","text":"Hi!"}
data: {"type":"output_item.done","item":{"id":"msg_abc","type":"message","role":"assistant","content":[{"type":"output_text","text":"Hi!"}]}}
data: {"type":"response.completed","response":{"id":"resp_abc","status":"completed","usage":{"input_tokens":12,"output_tokens":5,"total_tokens":17}}}web_search 같은 내장 도구는 전달되지 않고 조용히 제거됩니다. 오직 {type:"function"} 도구만 변환되어 모델로 전달됩니다.