Gemini 이미지 생성 마이그레이션 가이드

Gemini 이미지 생성 마이그레이션 가이드

이 변경의 영향을 받는 사람은?

/chat/completions 에서 다음 모델을 사용하는 모든 사람:

  • gemini/gemini-2.0-flash-exp-image-generation
  • vertex_ai/gemini-2.0-flash-exp-image-generation

핵심 변경

v1.77.0부터 LiteLLM은 response.choices[0].message.image 의 단일 이미지 대신 response.choices[0].message.images 에 이미지 목록을 반환합니다.

Gemini 모델은 이제 채팅 컴플리션을 통해 이미지 생성을 지원합니다. 이미지는 base64 data URL과 함께 response.choices[0].message.images 에 반환됩니다.

출처: 문서

본문

Before / After

이전:

from litellm import completion

response = completion(
    model="gemini/gemini-2.0-flash-exp-image-generation",
    messages=[{"role": "user", "content": "Generate an image of a cat"}],
    modalities=["image", "text"],
)

base_64_image_data = response.choices[0].message.content

이후:

from litellm import completion

response = completion(
    model="gemini/gemini-2.0-flash-exp-image-generation",
    messages=[{"role": "user", "content": "Generate an image of a cat"}],
    modalities=["image", "text"],
)

# Image is now available in the response
image_url = response.choices[0].message.images[0]["image_url"]["url"]  # "data:image/png;base64,..."

왜 바꾸었나?

새로운 gemini-2.5-flash-image-preview 모델이 같은 응답에서 텍스트와 이미지 응답을 모두 보내기 때문이에요. 이 인터페이스는 개발자가 응답의 이미지 또는 텍스트 구성 요소에 명시적으로 접근하게 해 줍니다. 이전에는 개발자가 모델이 생성한 이미지를 찾기 위해 메시지 콘텐츠를 뒤져야 했어요.

image 에서 images 로 바꾼 이유는 OpenRouter API와의 일관성 때문입니다. 가능한 경우 단순하고 잘 알려진 인터페이스를 사용하고자 하는 것입니다.

사용법

Python SDK 사용

핵심 변경:

# Before
-- base_64_image_data = response.choices[0].message.content

# After
++ image_url = response.choices[0].message.images[0]["image_url"]["url"]

기본 이미지 생성

from litellm import completion
import os

# Set your API key
os.environ["GEMINI_API_KEY"] = "your-api-key"

# Generate an image
response = completion(
    model="gemini/gemini-2.0-flash-exp-image-generation",
    messages=[{"role": "user", "content": "Generate an image of a cat"}],
    modalities=["image", "text"],
)

# Access the generated image
print(response.choices[0].message.content)  # Text response (if any)
print(response.choices[0].message.images[0])    # Image data

응답 형식

이미지는 message.images 필드에 반환됩니다:

{
    "image_url": {
        "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
        "detail": "auto"
    },
    "index": 0,
    "type": "image_url"
}

LiteLLM Proxy Server 사용

핵심 변경:

# Before
-- "content": "base64-image-data..."

# After  
++ "images": [{
++   "image_url": {
++     "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
++     "detail": "auto"
++   },
++   "index": 0,
++   "type": "image_url"
++ }]

구성 설정

  1. config.yaml 에서 모델 구성:
model_list:
  - model_name: gemini-image-gen
    litellm_params:
      model: gemini/gemini-2.0-flash-exp-image-generation
      api_key: os.environ/GEMINI_API_KEY
  - model_name: vertex-image-gen  
    litellm_params:
      model: vertex_ai/gemini-2.5-flash-image-preview
      vertex_project: your-project-id
      vertex_location: us-central1

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY  # Your proxy API key
  1. proxy server 시작:
litellm --config /path/to/config.yaml

# RUNNING on http://0.0.0.0:4000

요청 만들기

OpenAI SDK 사용:

from openai import OpenAI

# Point to your proxy server
client = OpenAI(
    api_key="sk-<your-litellm-api-key>",  # Your proxy API key
    base_url="http://0.0.0.0:4000"
)

response = client.chat.completions.create(
    model="gemini-image-gen",
    messages=[{"role": "user", "content": "Generate an image of a cat"}],
    extra_body={"modalities": ["image", "text"]}
)

# Access the generated image
print(response.choices[0].message.content)  # Text response (if any)
print(response.choices[0].message.image)    # Image data

curl 사용:

curl -X POST 'http://0.0.0.0:4000/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ***" \
-d '{
  "model": "gemini-image-gen",
  "messages": [
    {
      "role": "user",
      "content": "Generate an image of a cat"
    }
  ],
  "modalities": ["image", "text"]
}'

proxy의 응답 형식:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1704089632,
  "model": "gemini-image-gen",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Here's an image of a cat for you!",
        "images": [{
          "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
          "detail": "auto"
        }]
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 10,
    "completion_tokens": 8,
    "total_tokens": 18
  }
}

더 알아보기 (Learn more)