[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"}}
]
}
]
}'