콘텐츠로 이동
ABTO 가이드

연동 가이드

Gateway OpenAI 호환 범위

Node.js와 Python SDK가 사용하는 OpenAI Chat Completions 요청의 지원 필드와 거절되는 기능을 설명합니다.

ABTO Gateway의 데이터 경로는 POST /v1/chat/completions 하나이며, OpenAI Chat Completions 형식으로 요청을 받습니다. OpenAI SDK의 모든 API와 필드를 지원한다는 뜻은 아닙니다. 이 경로를 쓰는 SDK는 Node / Server JavaScriptPython입니다.

영역지원 범위
메시지system, developer, assistant role의 text content. user role은 text 문자열 또는 순서를 보존하는 text, 인라인 image_url, 인라인 PDF file part 배열
출력 길이max_completion_tokens, 레거시 별칭 max_tokens
응답 개수n 생략 또는 1
Streamingstream 생략 또는 false
구조화 출력response_format: { type: 'text' }, schema가 포함된 json_schema, 도구 없이 보낸 json_object
Tool callingtoolstype: 'function' 도구(name, description, parameters, strict), tool_choicenone, auto, required, { type: 'function', function: { name } }, { type: 'allowed_tools', allowed_tools: { mode, tools } }, parallel_tool_calls 생략 또는 true. 레거시 functions, function_call, role: 'function'도 받으며 그 요청의 응답은 message.function_callfinish_reason: 'function_call'로 돌아옵니다. 그 외 응답은 message.tool_callsfinish_reason: 'tool_calls'로 돌아오며 id는 Gateway가 발급한 값입니다. 다음 턴에는 그 assistant 메시지와 role: 'tool' 결과(tool_call_id는 응답의 id 그대로)를 이어 보내면 됩니다. Gemini에는 도구별 strict가 없어 하나라도 strict: true면 요청의 모든 도구가 schema 검증을 받습니다(검증이 느는 방향의 차이만 있고 풀리는 방향은 없습니다)
품질 파라미터temperature, top_p, frequency_penalty, presence_penalty, seed, reasoning_effort, verbosity

Node.js와 Python SDK는 원본 요청 body를 Gateway로 전달합니다. 기능 정책이 적용된 요청에서는 model, system instructions, 품질 파라미터를 옵션이 대체할 수 있고, 정책이 없는 요청은 원본 값을 사용합니다.

미디어 content part는 user 메시지에서만 지원합니다. 이미지는 image_url.urldata:image/png;base64,..., data:image/jpeg;base64,..., data:image/webp;base64,..., data:image/gif;base64,... 중 하나를 넣어야 합니다. PDF는 file.file_datadata:application/pdf;base64,...를 넣고 선택적으로 file.filename을 함께 보낼 수 있습니다.

POST /v1/chat/completions 이외의 경로는 Responses API를 포함해 404를 반환하고, 지원 경로에 다른 HTTP method를 사용하면 405를 반환합니다.

올바른 경로와 method로 보낸 다음 요청은 조용히 무시하지 않고 400으로 거절합니다.

  • stream: true, n1이 아닌 요청
  • assistant 메시지의 refusal. tool 메시지의 tool_call_id와 assistant tool_callsid는 응답이 준 값을 그대로 되돌려야 하며, 다른 값이면 unknown tool_call_id로 거절합니다
  • type: 'custom' 도구, tool_choicecustom, tools 없이 보낸 tool_choice, functionstools를 함께 보낸 요청, parallel_tool_calls: false
  • audio와 text, image_url, file 이외의 content part
  • system, developer, assistant 메시지의 미디어 part
  • HTTP(S) 이미지 URL, image_url.detail, file.file_id, 지원하지 않는 MIME type, 잘못된 data URL
  • schema가 없는 json_schema, tools와 함께 보낸 response_format: { type: 'json_object' }. json_object는 도구 없이 보낼 때만 지원합니다
  • stop, logprobs, modalities, metadata, service_tier 등 allowlist 밖 필드
  • 오타나 새 provider 필드를 포함한 알 수 없는 필드

지원하지 않는 입력을 제거하거나 다른 의미로 바꿔 보내지 않기 때문에, Gateway가 수용한 요청만 실험과 운영 기록에 남습니다.

POST /v1/chat/completions 응답에는 성공과 실패, 문전 거절을 가리지 않고 x-abto-request-id가 포함됩니다. SDK에서 raw response header를 읽어 요청 상세와 연결하세요. Provider, transport, internal 오류에는 x-abto-error-source가 포함될 수 있습니다. Routing 단계의 404405 응답에는 x-abto-request-id가 없습니다.

OpenAI direct fallback으로 처리된 호출은 Gateway를 지나지 않으므로 ABTO telemetry, 옵션 정책, x-abto-request-id가 없습니다.