Obrolan
Input gambar, PDF, audio dan video
Sertakan gambar, PDF, audio, dan video dalam pesan untuk model yang dapat membacanya. Kirim file langsung (base64) atau tautan: kami mengambil file dari tautan tersebut, jadi tautan https publik apa pun ke file berukuran hingga 20 MB dapat digunakan.
Sekilas
Setiap bagian menerima tautan https publik atau file langsung sebagai URL data base64, seperti data:application/pdf;base64,JVBERi0.... Beberapa file dapat disertakan dalam satu pesan, dengan kombinasi apa pun yang dapat dibaca model.
Jenis input yang dibaca setiap model
Semua model chat dapat membaca teks. Tabel ini diperbarui secara langsung: isinya menunjukkan jenis input yang dapat dibaca setiap model saat ini. Jika diberi input yang tidak dapat dibaca, model langsung menolaknya dengan unsupported_content, sehingga model tidak akan menjawab tentang file yang tidak dilihatnya.
Gambar
Tambahkan bagian image_url dengan tautan atau URL data. PNG, JPEG, WebP dan GIF. Beberapa gambar dalam satu pesan didukung oleh semua model yang dapat membaca gambar.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gemini-3.7-flash", messages=[ { "role": "user", "content": [ { "type": "text", "text": "What's in this picture? One sentence." }, { "type": "image_url", "image_url": { "url": "https://zurelay.com/examples/gpt-image-2.5-flare/watch-800.webp" } } ] } ],)print(response.choices[0].message.content)Untuk mengirim file dari disk, enkode file tersebut dengan base64 menjadi URL data:
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("receipt.jpg", "rb") as f: data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="claude-sonnet-5-5", messages=[{ "role": "user", "content": [ {"type": "text", "text": "What's the total on this receipt?"}, {"type": "image_url", "image_url": {"url": data_url}}, ], }],)print(response.choices[0].message.content)detail (low, high, auto) diteruskan untuk model yang menggunakannya.
Tambahkan bagian file dengan PDF sebagai URL data di file_data, beserta nama filenya. Model membaca teks dan, jika didukung, halaman sebagai gambar (grafik, hasil pindai, tabel). Tautan publik juga dapat digunakan di file_data.
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("contract.pdf", "rb") as f: pdf = "data:application/pdf;base64," + base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="gemini-3.7-flash", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Who are the parties, and how can the contract be ended?"}, {"type": "file", "file": {"filename": "contract.pdf", "file_data": pdf}}, ], }],)print(response.choices[0].message.content)PDF panjang menggunakan token input per halaman (lihat penagihan di bawah), jadi kirim hanya halaman yang Anda perlukan. Untuk bertanya tentang beberapa dokumen sekaligus, tambahkan bagian file untuk setiap dokumen, dengan nama yang membedakan masing-masing.
Word, Excel, teks dan kode
Model membaca PDF, bukan file Word, Excel, atau PowerPoint. Masukkan teks, CSV, JSON, Markdown, atau kode langsung ke dalam pesan sebagai teks: semuanya ditagih sebagai token input biasa, dan format inilah yang paling mudah dibaca model. Jika tata letak penting (tabel, grafik, hasil pindai), ekspor file ke PDF lalu kirimkan. URL data dengan jenis lain, seperti text/plain, akan ditolak dengan pesan kesalahan yang menjelaskan alasannya.
import osfrom pathlib import Pathfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])notes = Path("meeting-notes.md").read_text()sales = Path("sales.csv").read_text()response = client.chat.completions.create( model="deepseek-v4.1-flash", messages=[{ "role": "user", "content": f"Summarize the notes, then total the sales by region.\n\n" f"<notes>\n{notes}\n</notes>\n\n<sales>\n{sales}\n</sales>", }],)print(response.choices[0].message.content)Audio
Untuk model yang dapat mendengar (lihat tabel): gunakan bagian input_audio dengan audio base64 dan formatnya, wav atau mp3. input_audio menerima audio langsung; untuk tautan, gunakan bagian file dengan tautan di file_data. Rekaman yang dibuat di browser biasanya berformat WebM, yang dibaca sebagai video: konversikan ke MP3 atau WAV untuk model yang hanya dapat mendengar.
import base64, osfrom openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"])with open("call.mp3", "rb") as f: audio = base64.b64encode(f.read()).decode()response = client.chat.completions.create( model="gemini-3.7-flash", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Transcribe this call, then list the action items."}, {"type": "input_audio", "input_audio": {"data": audio, "format": "mp3"}}, ], }],)print(response.choices[0].message.content)Video
Untuk model yang dapat menonton video: gunakan bagian video_url dengan tautan atau URL data (bagian file juga bisa). MP4, MOV dan WebM. Model yang mendukung suara juga membaca trek audionya, jadi Anda dapat menanyakan apa yang diucapkan.
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gemini-3.7-flash", messages=[ { "role": "user", "content": [ { "type": "text", "text": "Describe what happens, and transcribe anything that's said." }, { "type": "video_url", "video_url": { "url": "https://example.com/clip.mp4" } } ] } ],)print(response.choices[0].message.content)Klip dari disk dikirim dengan cara yang sama, sebagai URL data:
with open("clip.mp4", "rb") as f: video = "data:video/mp4;base64," + base64.b64encode(f.read()).decode()content = [ {"type": "text", "text": "What happens in this clip?"}, {"type": "video_url", "video_url": {"url": video}},]Satu format masuk, format yang tepat keluar
video_url, image_url atau file, tergantung dokumentasi yang Anda baca). Kirim dalam format mana pun: kami meneruskan media ke setiap model dalam format yang bisa dibacanya.Beberapa file dalam satu pesan
Tambahkan satu bagian untuk setiap file, sesuai urutan yang Anda inginkan untuk dibaca, lalu rujuk file dalam teks Anda berdasarkan urutan atau nama (“gambar kedua”, “contract.pdf”). Gambar, PDF, audio dan video bisa digabung selama model dapat membaca setiap jenisnya. Bagian teks bisa disisipkan di antara file untuk memberi label.
Tautan
- Tautan harus berupa URL
httpspublik. Kami mengikuti hingga tiga pengalihan dan menunggu hingga 20 detik. - Tautan yang gagal diunduh langsung ditolak dengan
invalid_urlbeserta status responsnya, sebelum model dipanggil. - Tautan bertanda tangan (S3, Cloud Storage, tautan gambar kami sendiri) bisa digunakan selama masih berlaku.
Format Anthropic
Di /v1/messages, model Claude menerima blok Anthropic: image dan document, dengan sumber base64 atau url. Beberapa model Claude hanya bisa membaca PDF melalui /v1/chat/completions; jika Anda mengirimnya ke /v1/messages, pesan error akan memberi tahu ke mana harus mengirimnya.
[ { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "iVBORw0KGgo..." } }, { "type": "document", "source": { "type": "url", "url": "https://example.com/report.pdf" } }, { "type": "document", "source": { "type": "base64", "media_type": "application/pdf", "data": "JVBERi0..." } }, { "type": "text", "text": "Compare the chart with the report's conclusion." }]Batas
Untuk file yang lebih besar, kirim tautan: ukurannya tidak dihitung dalam body permintaan. File yang diunggah ke Files API milik lab (file_id) tidak bisa digunakan; kirim file atau tautannya.
Kesalahan
Dua yang pertama adalah code error; sisanya adalah type, disertai pesan yang menjelaskan apa yang perlu diubah. Semuanya dikembalikan sebelum model dipanggil, jadi tidak dikenakan biaya. Lihat Error untuk yang lainnya.
Cara biaya media dihitung
Model mengubah media menjadi token input, yang ditagih sesuai harga input model. Setiap lab punya cara penghitungan sendiri; berikut angka umum dari pengukuran kami:
Log permintaan Anda menunjukkan persis apa yang dihitung dari setiap permintaan. Cara termudah untuk berhemat adalah memperkecil gambar sesuai kebutuhan: sebagian besar model dapat membaca gambar 1024 px sama baiknya dengan gambar 4000 px.
Ada pertanyaan, atau ada yang kurang? Tanyakan kepada tim dukungan kami dan kami akan menjawab lewat email, biasanya dalam satu menit.