[BETA] Google AI Studio

[BETA] Google AI Studio (Gemini) Files API

Gemini의 /generateContent 엔드포인트에 대용량 미디어 파일을 전달하기 위해 Google AI Studio(Gemini)에 파일을 업로드해요.

출처: 문서

본문

지원 동작 (Supported)

동작 지원
create
delete 아니오
retrieve 아니오
list 아니오

사용법 (Usage)

SDK

import base64
import requests
from litellm import completion, create_file
import os

### UPLOAD FILE ###
# Fetch the audio file and convert it to a base64 encoded string
url = "https://cdn.openai.com/API/docs/audio/alloy.wav"
response = requests.get(url)
response.raise_for_status()
wav_data = response.content
encoded_string = base64.b64encode(wav_data).decode('utf-8')

file = create_file(
    file=wav_data,
    purpose="user_data",
    extra_headers={"custom-llm-provider": "gemini"},
    api_key=os.getenv("GEMINI_API_KEY"),
)
print(f"file: {file}")
assert file is not None

### GENERATE CONTENT ###
completion = completion(
    model="gemini-3.8-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "What is in this recording?"
                },
                {
                    "type": "file",
                    "file": {
                        "file_id": file.id,
                        "filename": "my-test-name",
                        "format": "audio/wav"
                    }
                }
            ]
        },
    ]
)
print(completion.choices[0].message)

PROXY

config.yaml 설정:

model_list:
  - model_name: "gemini-3.8-flash"
    litellm_params:
      model: gemini/gemini-3.8-flash
      api_key: os.environ/GEMINI_API_KEY

Proxy 시작:

litellm --config config.yaml

테스트:

import base64
import requests
from openai import OpenAI

client = OpenAI(
    base_url="http://0.0.0.0:4000",
    api_key="sk-<your-litellm-api-key>",
)

# Fetch the audio file and convert it to a base64 encoded string
url = "https://cdn.openai.com/API/docs/audio/alloy.wav"
response = requests.get(url)
response.raise_for_status()
wav_data = response.content
encoded_string = base64.b64encode(wav_data).decode('utf-8')

file = client.files.create(
    file=wav_data,
    purpose="user_data",
    extra_body={"target_model_names": "gemini-3.8-flash"}
)
print(f"file: {file}")
assert file is not None

completion = client.chat.completions.create(
    model="gemini-3.8-flash",
    modalities=["text", "audio"],
    audio={"voice": "alloy", "format": "wav"},
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "What is in this recording?"
                },
                {
                    "type": "file",
                    "file": {
                        "file_id": file.id,
                        "filename": "my-test-name",
                        "format": "audio/wav"
                    }
                }
            ]
        },
    ],
    extra_body={"drop_params": True}
)
print(completion.choices[0].message)

Azure Blob Storage 통합

LiteLLM은 Gemini 파일 업로드의 대상 스토리지 백엔드로 Azure Blob Storage를 지원해요. Google 관리 스토리지 대신 Azure Data Lake Storage Gen2에 파일을 저장할 수 있게 해줘요.

Step 1: Azure Blob Storage 설정

# Required
AZURE_STORAGE_ACCOUNT_NAME - Your Azure Storage account name
AZURE_STORAGE_FILE_SYSTEM - The container/filesystem name where files will be stored
AZURE_STORAGE_ACCOUNT_KEY - Your account key

# Optional
AZURE_STORAGE_ENDPOINT_SUFFIX - The storage endpoint suffix, e.g. core.usgovcloudapi.net for Azure Government. Defaults to core.windows.net

Step 2: 대상 스토리지로 Azure Blob Storage 전달

파일 업로드 시 기본 스토리지 대신 Azure Blob Storage를 사용하려면 target_storage: "azure_storage"를 지정해요.

지원 파일 유형 (Gemini 호환 모두):

  • 이미지: PNG, JPEG, WEBP
  • 오디오: AAC, FLAC, MP3, MPA, MPEG, MPGA, OPUS, PCM, WAV, WEBM
  • 비디오: FLV, MOV, MPEG, MPEGPS, MPG, MP4, WEBM, WMV, 3GPP
  • 문서: PDF, TXT

참고: 총 요청 크기 한도가 20MB이므로 소형 파일만 인라인 데이터로 보낼 수 있어요.

Proxy 사용:

model_list:
  - model_name: "gemini-3.8-flash"
    litellm_params:
      model: gemini/gemini-3.8-flash
      api_key: os.environ/GEMINI_API_KEY
export AZURE_STORAGE_ACCOUNT_NAME="your-storage-account"
export AZURE_STORAGE_FILE_SYSTEM="your-container-name"
export AZURE_STORAGE_ACCOUNT_KEY="your-account-key"
litellm --config config.yaml

OpenAI SDK로 Azure Blob Storage에 업로드:

from openai import OpenAI

client = OpenAI(
    base_url="http://0.0.0.0:4000",
    api_key="sk-<your-litellm-api-key>",
)

# Upload file to Azure Blob Storage
file = client.files.create(
    file=open("document.pdf", "rb"),
    purpose="user_data",
    extra_body={
        "target_model_names": "gemini-3.8-flash",
        "target_storage": "azure_storage"  # 👈 Use Azure Blob Storage
    }
)
print(f"File uploaded to Azure Blob Storage: {file.id}")

# Use the file with Gemini
completion = client.chat.completions.create(
    model="gemini-3.8-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Summarize this document"},
                {"type": "file", "file": {"file_id": file.id,}}
            ]
        }
    ]
)
print(completion.choices[0].message.content)

cURL:

# Upload file with Azure Blob Storage
curl -X POST "http://0.0.0.0:4000/v1/files" \
  -H "Authorization: Bearer ***" \
  -F "[email protected]" \
  -F "purpose=user_data" \
  -F "target_storage=azure_storage" \
  -F "target_model_names=gemini-3.8-flash" \
  -F "custom_llm_provider=gemini"

# Use the file with Gemini
curl -X POST "http://0.0.0.0:4000/v1/chat/completions" \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.8-flash",
    "messages": [
      {
        "role": "user",
        "content": [
          {"type": "text", "text": "Summarize this document"},
          {"type": "file", "file": {"file_id": "file-id-from-upload", "format": "application/pdf"}}
        ]
      }
    ]
  }'

더 알아보기 (Learn more)