Skip to content

Responses (OpenAI)

OpenAI Responses 형식 인바운드 어댑터. OpenAI의 Codex CLI는 /v1/responses만 사용하므로, 이 엔드포인트로 Codex와 Responses SDK를 연결합니다.

OpenAI의 Codex CLI/v1/responses 형식만 말합니다. PleumRouter는 이 형식을 받아 내부 모델 호출로 변환하는 인바운드 어댑터를 제공하므로, Codex CLI(및 OpenAI Responses SDK)를 PleumRouter에 그대로 붙일 수 있습니다.

POST/v1/responses

연결하기#

base URL을 https://router.pleum.ai/v1로, API 키를 plm_ 키로 설정하세요. Codex에서는 wire_api = "responses"로 지정하면 이 엔드포인트로 호출됩니다.

connect
export OPENAI_BASE_URL="https://router.pleum.ai/v1"
export OPENAI_API_KEY="plm_..."

요청 본문#

파라미터타입필수설명
modelstring필수모델 ID. GET /v1/models에서 전체 목록 확인.
inputstring | array필수문자열, 또는 항목 배열(message / function_call / function_call_output).
instructionsstring선택system 메시지로 앞에 추가됩니다.
max_output_tokensinteger선택기본값 4096. 내부 max_tokens로 매핑됩니다.
temperaturenumber선택샘플링 온도.
top_pnumber선택누클리어스 샘플링.
streamboolean선택true면 Responses SSE 스트리밍 응답.
toolsarray선택Responses 플랫 함수 도구({type:"function", name, description, parameters})는 변환됩니다. 함수가 아닌 도구(예: web_search)는 조용히 무시됩니다.
tool_choicestring | object선택문자열 auto | none | required, 또는 {type:"function", name}.
parallel_tool_callsboolean선택병렬 도구 호출 허용 여부.
metadataobject선택임의의 키-값 메타데이터.
request
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 배열에 어시스턴트 메시지를 담아 반환합니다. 각 메시지의 contentoutput_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)는 수용되지만 무시됩니다.

200 OK
{
  "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.createdresponse.in_progress output_item.added / content_part.added / output_text.deltaoutput_text.done / output_item.done → 전체 usage가 담긴 response.completed. Codex는 완성된 항목을 output_item.done에서 읽고, 종료는 response.completed로 판단합니다.

Responses SSE stream
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"} 도구만 변환되어 모델로 전달됩니다.