Gemini OpenAI 형식(Chat)
대화 및 텍스트
Gemini OpenAI 형식(Chat)
OpenAI 호환 /v1/chat/completions로 Gemini 채팅 및 멀티모달 모델 호출
POST
Gemini OpenAI 형식(Chat)
Google Gemini 네이티브 프로토콜은 Gemini Native를 참조하세요. 일반 다중 모델 Chat Completions는 OpenAI Chat Completions를 참조하세요.
엔드포인트: POST https://api.gravitex.ai/v1/chat/completions
1. 모델 카테고리
2. 엔드포인트 및 인증
3. OpenAI 필드 → Gemini 매핑
messages.content는 멀티모달 배열(OpenAI v2)을 지원합니다:
type:"text"→parts[].texttype:"image_url"/type:"input_audio"/type:"file"→ 다운로드/디코딩 후 MIME 허용 목록에 따라parts[].inlineData로 변환:- 이미지:
image/png、image/jpeg、image/jpg、image/webp、image/heic、image/heif - 오디오:
audio/mpeg、audio/mp3、audio/wav - 비디오:
video/mp4、video/mov、video/mpeg、video/mpg、video/avi、video/wmv、video/mpegps、video/flv - 문서:
application/pdf、text/plain
- 이미지:
content문자열에 포함된Markdown 이미지는image_url과 동일하게inlineDatapart로 변환됩니다.
4. 도구 전달
function 항목은 functionDeclarations를 사용합니다.
5. extra_body — Gemini 네이티브 매개변수 전달
extra_body.google.* 이 네임스페이스 아래의 모든 필드는 Gemini 네이티브 API로 전달됩니다.
5.1 두 가지 전달 경로
5.2 thinking_config (snake_case 허용 목록)
extra_body.google을 전달하면 시스템 자동 사고 체인 어댑터가 비활성화되며, 모든 사고 동작은 호출자가 제어합니다.
5.3 깊은 병합 규칙
extra_body.google(위 snake_case 키 제외)을 패치로 취급합니다.- OpenAI 필드로 구성된 Gemini 요청을 base로 사용합니다.
- deep merge:
- 동일 키, 둘 다 map → 재귀 병합;
- 기타 타입(스칼라, 배열, null) → 패치가 base를 직접 덮어씀;
- base에만 있는 키는 유지됩니다.
- 병합된 본문이 업스트림으로 전송됩니다 — 네이티브 Gemini 호출과 동등합니다.
extra_body.google.generationConfig.maxOutputTokens로 OpenAI 필드max_tokens로 설정한 값을 덮어쓸 수 있고,extra_body.google.safetySettings로 플랫폼 기본 안전 설정을 완전히 교체할 수 있습니다. 향후 추가되는 Gemini 필드도 코드 변경 없이 바로 사용할 수 있습니다.
5.4 전달 예시
6. 응답 형식
6.1 비스트리밍 chat.completion
id= 업스트림responseId(로그request_id와 일치); 없으면chatcmpl-*로 폴백.reasoning_content: 사고 텍스트(include_thoughts:true일 때만).executable_code/code_execution_result: 텍스트에 markdown 코드 블록으로 삽입.- 이미지가 아닌 미디어(오디오 등)는 markdown
[media](data:...)형식으로 삽입. finish_reason매핑:STOP→stop,MAX_TOKENS→length, safety/recitation/…→content_filter,functionCall→tool_calls.
6.2 스트리밍 chat.completion.chunk
- 스트리밍에서
delta.content는 문자열입니다(배열 아님). - 이미지는
delta.content에markdown으로 삽입됩니다. id는 스트리밍 청크 전체에서 안정적입니다.
7. Usage
response.usage 전체 필드:
7.1 사고 토큰 집계 방식
reasoning_tokens는 가시성을 위해 별도 표시됩니다.completion_tokens는reasoning_tokens를 포함합니다(OpenAI 의미론; 과금은completion_tokens기준).
7.2 출력 토큰 분류
시스템이 출력에 따라 토큰 유형을 자동 분류합니다:분류는 모델명이 아닌 출력 기준입니다 — 모델명에 “image”가 있어도 순수 텍스트 응답은 텍스트로 과금됩니다.
7.3 모달리티 대소문자 처리
image / IMAGE 대소문자 변형을 모두 허용합니다.
8. 로깅 및 대조
업스트림 토큰 사용량은 요청별로 로깅됩니다:responseId는response.id및 로그request_id와 일치합니다.
9. 예시
9.1 사고 모드가 있는 텍스트 채팅
9.2 멀티모달 입력(텍스트 + 이미지 URL)
9.3 Google Search + URL 컨텍스트
9.4 스트리밍 채팅
10. OpenAI 전용 매개변수(Gemini에서 무시됨)
다음 OpenAI 표준 매개변수는 Gemini API에 대응 필드가 없어 전달해도 오류 없이 무시됩니다:11. FAQ — Thinking / Reasoning
Q1: OpenAI 형식에서 Gemini 사고 길이를 제어할 수 있나요?
예. 세 가지 방법이 있습니다:방법 1: reasoning_effort(OpenAI 표준 필드, 가장 간단)
OpenAI reasoning_effort를 전달하면 Gemini 사고 설정으로 매핑됩니다:
방법 2: 모델명 접미사
예:
gemini-3.5-flash-thinking-16384 → 사고 활성화, 예산 16384.
방법 3: extra_body.google.thinking_config(전체 제어)
thinking_budget 대신 thinking_level을 사용합니다:
우선순위:extra_body.google.thinking_config>reasoning_effort> 접미사.extra_body.google을 전달하면 시스템 자동 사고 체인 어댑터가 비활성화되며, 모든 사고 동작은 호출자가 완전히 제어합니다.
Q2: 사고 출력을 어떻게 읽나요?
include_thoughts: true로 설정하면 사고 과정이 응답의 reasoning_content 필드에 담깁니다:
delta.reasoning_content로 사고 내용이 도착합니다.
