चैट
इमेज, PDFs, ऑडियो और वीडियो इनपुट
जो मॉडल तस्वीरें, PDF, ऑडियो और वीडियो पढ़ सकते हैं, उनके लिए इन्हें मैसेज में जोड़ें। फ़ाइल खुद (base64) या उसका लिंक भेजें: हम लिंक से फ़ाइल खुद लाते हैं, इसलिए 20 MB तक की फ़ाइल का कोई भी सार्वजनिक https लिंक काम करता है।
एक नज़र में
हर पार्ट में सार्वजनिक https लिंक या फ़ाइल को base64 डेटा URL के रूप में भेजा जा सकता है, जैसे data:application/pdf;base64,JVBERi0.... एक मैसेज में कई तरह की फ़ाइलें भेज सकते हैं, बशर्ते मॉडल उन सभी को पढ़ सके.
कौन-से मॉडल क्या पढ़ते हैं
हर चैट मॉडल टेक्स्ट पढ़ता है. यह टेबल लगातार अपडेट होती है: इसमें दिखता है कि हर मॉडल फ़िलहाल क्या पढ़ सकता है. मॉडल जिस तरह की सामग्री नहीं पढ़ सकता, उसे unsupported_content के साथ तुरंत अस्वीकार कर देता है, इसलिए वह ऐसी फ़ाइल के बारे में कभी जवाब नहीं देता जिसे उसने देखा ही नहीं.
इमेज
लिंक या डेटा URL के साथ एक image_url पार्ट जोड़ें. PNG, JPEG, WebP और GIF. इमेज पढ़ने वाले हर मॉडल को एक मैसेज में कई इमेज भेज सकते हैं.
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)डिस्क से फ़ाइल भेजने के लिए, उसे base64 में एन्कोड करके डेटा URL बनाएँ:
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) बिना बदलाव के आगे भेजा जाता है.
PDF फ़ाइलें
एक file पार्ट जोड़ें, जिसमें file_data में PDF का डेटा URL और फ़ाइल का नाम हो. मॉडल टेक्स्ट पढ़ते हैं और, जहाँ संभव हो, पेजों को इमेज के रूप में भी पढ़ते हैं (चार्ट, स्कैन, टेबल). 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 फ़ाइलों में हर पेज के लिए इनपुट टोकन लगते हैं (नीचे बिलिंग देखें), इसलिए सिर्फ़ ज़रूरी पेज भेजें. कई दस्तावेज़ों के बारे में एक साथ पूछने के लिए, हर दस्तावेज़ का अलग file पार्ट जोड़ें और ऐसे नाम दें जिनसे उन्हें अलग पहचान सकें.
Word, Excel, टेक्स्ट और कोड
मॉडल PDF पढ़ते हैं, Word, Excel या PowerPoint फ़ाइलें नहीं. टेक्स्ट, CSV, JSON, Markdown या कोड सीधे मैसेज में टेक्स्ट के रूप में डालें: इसकी बिलिंग सामान्य इनपुट टोकन की तरह होती है, और मॉडल इसे सबसे अच्छी तरह पढ़ता है. जब लेआउट मायने रखता हो (टेबल, चार्ट, स्कैन), तो फ़ाइल को PDF में एक्सपोर्ट करके भेजें. किसी अन्य प्रकार का डेटा URL, जैसे text/plain, अस्वीकार कर दिया जाता है और एरर में इसकी वजह बताई जाती है.
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)ऑडियो
ऑडियो सुन सकने वाले मॉडल के लिए (टेबल देखें): base64 ऑडियो और उसके फ़ॉर्मैट, wav या mp3, के साथ एक input_audio पार्ट जोड़ें. input_audio में सीधे ऑडियो दिया जाता है; लिंक भेजने के लिए file पार्ट इस्तेमाल करें और लिंक को file_data में रखें. ब्राउज़र में की गई रिकॉर्डिंग आमतौर पर WebM होती हैं, जिन्हें वीडियो के रूप में पढ़ा जाता है: सिर्फ़ ऑडियो सुन सकने वाले मॉडल के लिए इन्हें MP3 या WAV में बदलें.
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)वीडियो
वीडियो देख सकने वाले मॉडल के लिए: लिंक या डेटा URL के साथ एक video_url पार्ट जोड़ें (file पार्ट भी काम करता है). MP4, MOV और WebM. ऑडियो सुन सकने वाले मॉडल वीडियो का ऑडियो भी पढ़ते हैं, इसलिए आप पूछ सकते हैं कि उसमें क्या कहा गया है.
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)डिस्क से क्लिप भी इसी तरह डेटा URL के रूप में भेजी जाती है:
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}},]आप एक फ़ॉर्मैट भेजें, मॉडल को सही फ़ॉर्मैट मिले
video_url, image_url या file पार्ट हो सकता है). इनमें से किसी भी फ़ॉर्मैट में भेजें: हम हर मॉडल को मीडिया उसी फ़ॉर्मैट में देते हैं जिसे वह पढ़ सकता है.एक मैसेज में कई फ़ाइलें
हर फ़ाइल के लिए एक पार्ट जोड़ें, उसी क्रम में जिसमें आप उन्हें पढ़वाना चाहते हैं, और अपने टेक्स्ट में क्रम या नाम से उनका ज़िक्र करें (“दूसरी इमेज”, “contract.pdf”). इमेज, PDF, ऑडियो और वीडियो एक साथ भेज सकते हैं, बशर्ते मॉडल हर प्रकार को पढ़ सके. फ़ाइलों की पहचान बताने के लिए उनके बीच टेक्स्ट पार्ट जोड़ सकते हैं.
लिंक
- लिंक सार्वजनिक
httpsURL होने चाहिए. हम अधिकतम तीन रीडायरेक्ट का पालन करते हैं और 20 सेकंड तक इंतज़ार करते हैं. - जिस लिंक से डाउनलोड नहीं हो पाता, उसे किसी भी मॉडल को कॉल करने से पहले ही
invalid_urlऔर लिंक से मिले स्टेटस के साथ तुरंत अस्वीकार कर दिया जाता है. - साइन किए गए लिंक (S3, Cloud Storage, हमारे अपने इमेज लिंक) वैध रहने तक काम करते हैं.
Anthropic फ़ॉर्मैट
/v1/messages पर, Claude मॉडल Anthropic के ब्लॉक स्वीकार करते हैं: image और document, जिनका सोर्स base64 या url हो. कुछ Claude मॉडल सिर्फ़ /v1/chat/completions के ज़रिए PDF पढ़ते हैं; अगर आप /v1/messages पर PDF भेजते हैं, तो एरर में बताया जाता है कि उसे कहाँ भेजना है.
[ { "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." }]सीमाएँ
बड़ी फ़ाइलों के लिए लिंक भेजें: यह अनुरोध की बॉडी में नहीं गिना जाता। किसी लैब के अपने Files API (file_id) पर अपलोड की गई फ़ाइलें इस्तेमाल नहीं की जा सकतीं; इसके बजाय फ़ाइल या लिंक भेजें।
गड़बड़ियाँ
पहले दो गड़बड़ी के code हैं; बाकी उसके type हैं, जिनके साथ एक मैसेज होता है जो बताता है कि क्या बदलना है। ये सभी किसी भी मॉडल को कॉल किए जाने से पहले लौटते हैं, इसलिए इनका कोई शुल्क नहीं लगता। बाकी के लिए गड़बड़ियाँ देखें।
मीडिया की बिलिंग कैसे होती है
मॉडल मीडिया को इनपुट टोकन में बदलते हैं, जिनकी बिलिंग मॉडल की इनपुट दर पर होती है। हर लैब अपने तरीके से गिनती है; हमारे मापे हुए कुछ आम आँकड़े ये हैं:
आपका अनुरोध लॉग दिखाता है कि हर अनुरोध में ठीक कितने टोकन गिने गए। तस्वीरों को अपनी ज़रूरत के आकार तक छोटा करना बचत का सबसे आसान तरीका है: ज़्यादातर मॉडल 1024 px की तस्वीर को 4000 px की तस्वीर जितनी अच्छी तरह पढ़ते हैं।
कोई सवाल है, या कुछ छूट गया है? हमारी सहायता टीम से पूछें और हम ईमेल से जवाब देंगे, आम तौर पर एक मिनट के भीतर.