चैट

चैट कम्प्लीशन

हर टेक्स्ट मॉडल के लिए OpenAI का Chat Completions API: वही रिक्वेस्ट और रिस्पॉन्स, वही स्ट्रीमिंग, वही SDK।

POST/v1/chat/completions

रिक्वेस्ट

modelstringज़रूरी
मॉडल पेज से कोई मॉडल ID, जैसे claude-opus-5-5 या gpt-6-sol।
messagesarrayज़रूरी
बातचीत: system (या developer), user, assistant और tool मैसेज। content एक स्ट्रिंग है, या इमेज, PDF, ऑडियो या वीडियो जोड़ने के लिए हिस्सों का ऐरे।
streamboolean
जवाब लिखे जाने के दौरान उसे सर्वर-सेंट इवेंट के रूप में भेजें। नीचे स्ट्रीमिंग देखें।
stream_optionsobject
{ "include_usage": true } आखिर में टोकन के इस्तेमाल की जानकारी वाला एक चंक जोड़ता है।
max_completion_tokensinteger
रीजनिंग समेत जनरेट किए जाने वाले टोकन की अधिकतम संख्या। max_tokens भी काम करता है।
temperaturenumber
0 से 2। कम वैल्यू पर जवाब ज़्यादा केंद्रित होता है, ज़्यादा वैल्यू पर अधिक विविध। कुछ रीजनिंग मॉडल इसे अनदेखा करते हैं। Opus 4.7 और उसके बाद के Claude मॉडल (Opus 5 और 5.5, Fable 5 और 5.1, Sonnet 5.5, Haiku 5.5) इसे स्वीकार नहीं करते, इसलिए हम उन मॉडल के लिए इसे हटा देते हैं।
top_pnumber
न्यूक्लियस सैंपलिंग, 0 से 1। इसे या temperature को बदलें, दोनों को नहीं। उन्हीं Claude मॉडल के लिए इसे हटा दिया जाता है, जैसे उनके और Muse Wonder के लिए top_k को।
stopstring | array
अधिकतम 4 सीक्वेंस, जहाँ जनरेशन रुक जाता है।
toolsarray
वे फ़ंक्शन जिन्हें मॉडल कॉल कर सकता है। नीचे टूल कॉलिंग देखें।
tool_choicestring | object
auto, none, required, या कोई खास फ़ंक्शन। जहाँ मॉडल की लैब इनमें से किसी विकल्प को अस्वीकार या अनदेखा करती है (Claude Opus 5.5, Sonnet 5.5 और Fable 5.1 पर अनिवार्य टूल; Muse Wonder पर auto के अलावा कोई भी विकल्प; कुछ Gemini, DeepSeek Flash, MiMo, HY4 और MiniMax मॉडल पर none), वहाँ हम उसे ऐसे रूप में भेजते हैं जिसका मॉडल पालन करे और मॉडल को बताते हैं कि आपने क्या माँगा है; नाम से अनिवार्य किया गया फ़ंक्शन ही एकमात्र उपलब्ध फ़ंक्शन के रूप में भेजा जाता है।
response_formatobject
JSON आउटपुट: { "type": "json_object" }, या स्कीमा के साथ json_schema। नीचे स्ट्रक्चर्ड आउटपुट देखें।
reasoning_effortstring
रीजनिंग मॉडल कितना सोचे: none, minimal, low, medium, high, xhigh या max। हर मॉडल इनमें से कुछ लेवल स्वीकार करता है (नीचे रीजनिंग देखें); कोई दूसरा लेवल देने पर वह सबसे नज़दीकी स्वीकार्य लेवल पर चलता है। ऊँचे लेवल पर मॉडल ज़्यादा देर तक सोचता है और अधिक आउटपुट टोकन खर्च होते हैं।
seedinteger
जहाँ मॉडल इसका समर्थन करता है, वहाँ नतीजे दोहराने की यथासंभव कोशिश की जाती है।
modelsarray
इस अनुरोध के लिए स्मार्ट राउटिंग: मॉडल उपलब्ध न होने पर, दिए गए क्रम में आज़माए जाने वाले विकल्प। स्मार्ट राउटिंग देखें।
OpenAI के बाकी पैरामीटर बिना बदलाव के मॉडल तक पहुँचते हैं, सिवाय user और metadata के, जो हमारे पास रहते हैं। मॉडल किनका पालन करता है (टूल, JSON स्कीमा, रीजनिंग), यह मॉडल पर निर्भर है, ठीक वैसे ही जैसे उसकी अपनी लैब के API में होता है। OpenAI Python SDK में, models को extra_body={"models": [...]} के तौर पर भेजें।

जवाब

जवाब
{
"id": "chatcmpl-AbC123...",
"object": "chat.completion",
"created": 1790870400,
"model": "claude-opus-5-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Here's the summary..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1204,
"completion_tokens": 312,
"total_tokens": 1516,
"prompt_tokens_details": { "cached_tokens": 1024 },
"completion_tokens_details": { "reasoning_tokens": 128 }
}
}
  • model वह मॉडल है जिसने जवाब दिया। यह वही मॉडल होता है जिसे आपने चुना था, जब तक कि स्मार्ट राउटिंग ने किसी वैकल्पिक मॉडल से जवाब न दिलाया हो।
  • रीजनिंग मॉडल मैसेज में reasoning_content जोड़ सकते हैं: इसमें मॉडल की सोच होती है, अगर वह इसे साझा करता है।
  • आपसे usage के लिए शुल्क लिया जाता है। cached_tokens वे इनपुट टोकन हैं जो मॉडल के प्रॉम्प्ट कैश से पढ़े गए हैं। जिन मॉडल में कैश की अलग दर होती है, उनमें इन्हीं दरों पर शुल्क लगता है।

हर रिस्पॉन्स में ये हेडर भी होते हैं:

हेडरवैल्यू
x-request-idअनुरोध का ID, जैसा आपके अनुरोध लॉग में दिखता है। सहायता टीम से संपर्क करते समय इसे बताएँ।
x-zurelay-modelवह मॉडल जिसने जवाब दिया।
x-zurelay-routed-fromसिर्फ़ स्मार्ट राउटिंग के बाद: वह मॉडल जिसे आपने चुना था।
x-zurelay-reasoning-effortसिर्फ़ तब जब अनुरोध में रीजनिंग का स्तर सेट किया गया हो: वह स्तर जिस पर मॉडल चला, यानी उसके समर्थित स्तरों में सबसे नज़दीकी स्तर (रीजनिंग देखें)।
x-zurelay-stoppedसिर्फ़ तब जब बैलेंस या कुंजी का बजट बीच में खत्म हो गया हो, या जवाब उस max_tokens सीमा तक पहुँच गया हो जिसे बैलेंस या बजट कम होने के कारण घटाया गया था: insufficient_quota, key_budget_exceeded या key_daily_budget_exceeded। जवाब में तब तक लिखा गया टेक्स्ट होता है, साथ में finish_reason: "length"।

स्ट्रीमिंग

stream: true के साथ, जवाब OpenAI के चंक फ़ॉर्मैट में सर्वर से भेजे गए इवेंट के रूप में आता है और data: [DONE] पर खत्म होता है। हर SDK इन्हें आपके लिए पढ़ता है।

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
stream = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[
{
"role": "user",
"content": "Write a limerick about databases."
}
],
stream=True,
stream_options={
"include_usage": True
},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
  • मॉडल का पहला टोकन बनने तक कोई जवाब नहीं भेजा जाता, इसलिए दोबारा कोशिश करना या दूसरे रास्ते पर स्विच करना आपको दिखाई नहीं देता।
  • जिन अंतरालों में कोई डेटा नहीं आता (जब मॉडल चरणों के बीच सोच रहा होता है), उनमें हर 15 सेकंड पर SSE कमेंट लाइनें (: keep-alive) भेजी जाती हैं। क्लाइंट इन्हें अनदेखा करते हैं; ये प्रॉक्सी को कनेक्शन बंद करने से रोकती हैं। अगर पहले टोकन में 20 सेकंड से ज़्यादा लगें (लंबा प्रॉम्प्ट होने या अटके हुए रास्ते की जगह दूसरा रास्ता चुने जाने के कारण), तो स्ट्रीम उसी समय खुल जाती है: आपके इंतज़ार के दौरान हेडर और कीप-अलाइव कमेंट आते रहते हैं। अगला रास्ता आज़माने से पहले हर रास्ते को शुरू होने के लिए 3 मिनट तक मिलते हैं (रीजनिंग का प्रयास ज़्यादा होने पर 5), इसलिए अपने क्लाइंट का टाइमआउट 10 मिनट पर सेट करें।
  • पहले टोकन से पहले खुली स्ट्रीम में x-zurelay-model सिर्फ़ तभी होता है जब कोई दूसरा मॉडल जवाब नहीं दे सकता (स्मार्ट राउटिंग बंद हो)। स्ट्रीम खुलने के बाद कोई गड़बड़ी होने पर, एरर स्टेटस की जगह स्ट्रीम में एरर इवेंट आता है (एरर बॉडी वाले ही ढाँचे में)।
  • include_usage के साथ, [DONE] से पहले वाले आखिरी चंक में खाली choices सूची और usage होता है।

टूल कॉलिंग

tools में फ़ंक्शन का विवरण दें; जब मॉडल को कोई फ़ंक्शन चाहिए होता है, तो वह टेक्स्ट की जगह tool_calls के साथ जवाब देता है। फ़ंक्शन चलाएँ, कॉल के ID के साथ नतीजा tool मैसेज के रूप में वापस भेजें, और मॉडल आगे बढ़ेगा।

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6-sol",
messages=[
{
"role": "user",
"content": "What's the weather in Lisbon right now?"
}
],
tools=[
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
}
],
)
print(response.choices[0].message.content)

स्ट्रक्चर्ड आउटपुट

response_format के ज़रिए JSON माँगें। json_schema इसका समर्थन करने वाले मॉडल से आपके स्कीमा का पालन करवाता है; json_object किसी भी मान्य JSON के लिए कहता है (अपने प्रॉम्प्ट में भी यह बताएँ)।

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zurelay.com/v1",
api_key=os.environ["ZURELAY_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[
{
"role": "user",
"content": "Extract the people: 'Ana met Ben and Chloe in Porto.'"
}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "people",
"schema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"names"
]
}
}
},
)
print(response.choices[0].message.content)

रीजनिंग

रीजनिंग मॉडल जवाब देने से पहले सोचते हैं। सोच की गहराई के बदले लगने वाले समय और लागत को नियंत्रित करने के लिए reasoning_effort सेट करें: ऊँचे स्तर पर मॉडल ज़्यादा देर सोचता है, ज़्यादा समय लेता है और ज़्यादा आउटपुट टोकन इस्तेमाल करता है। हर मॉडल अपनी लैब के दस्तावेज़ों में दिए गए स्तर स्वीकार करता है, none (बिना सोचे) से लेकर minimal, low, medium, high और xhigh (बहुत ऊँचा) होते हुए max तक; नीचे की तालिका में ये दिए गए हैं। इसे न भेजने पर मॉडल अपना डिफ़ॉल्ट स्तर इस्तेमाल करता है। यह किसी भी OpenAI SDK के साथ एक जैसा काम करता है, और आप डैशबोर्ड के प्लेग्राउंड में हर स्तर आज़मा सकते हैं।

from openai import OpenAI
client = OpenAI(base_url="https://api.zurelay.com/v1", api_key="YOUR_ZURELAY_KEY")
response = client.chat.completions.create(
model="zurelay-auto",
reasoning_effort="high",
messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],
)
message = response.choices[0].message
print(getattr(message, "reasoning_content", None)) # the thinking, when the model shares it
print(message.content)

जो मॉडल अपनी सोच साझा करते हैं, उनमें यह जवाब के साथ message.reasoning_content में लौटती है (स्ट्रीमिंग के दौरान delta.reasoning_content में); कुछ मॉडल इस फ़ील्ड को reasoning कहते हैं। इसका शुल्क आउटपुट टोकन के रूप में लगता है और यह हमेशा completion_tokens का हिस्सा होती है; जब मॉडल इसकी जानकारी देता है, तो completion_tokens_details.reasoning_tokens इसे अलग से गिनता है। रीजनिंग का प्रयास ज़्यादा होने पर जवाब शुरू होने में कई मिनट लग सकते हैं, इसलिए अपने क्लाइंट के लिए पर्याप्त लंबा टाइमआउट रखें (विश्वसनीयता और टाइमआउट देखें)।

हर मॉडल के स्तर

हर लैब के अपने दस्तावेज़ों के अनुसार। अगर मॉडल किसी स्तर को स्वीकार नहीं करता, तो वह अपने सबसे नज़दीकी समर्थित स्तर पर चलता है (दो स्तर बराबर नज़दीक हों, तो नीचे वाला; और सोचना सिर्फ़ none भेजने पर बंद होता है), इसलिए एक ही अनुरोध हर मॉडल पर काम करता है, स्मार्ट राउटिंग के साथ भी। x-zurelay-reasoning-effort रिस्पॉन्स हेडर बताता है कि कौन-सा स्तर चला। स्तर के नाम के अलावा कोई और शब्द भेजने पर अनुरोध 400 के साथ अस्वीकार होता है, जिसमें मॉडल के स्तरों की सूची होती है।

मॉडलIDस्तरडिफ़ॉल्ट
Abliterated Large V2abliterated-large-v2low, high, maxmax
Claude Fable 5claude-fable-5low, medium, high, xhigh, maxhigh
Claude Fable 5.1claude-fable-5-1low, medium, high, xhigh, maxhigh
Claude Haiku 5.5claude-haiku-5-5low, medium, high, xhigh, maxmedium
Claude Opus 4.6claude-opus-4-6low, medium, high, maxलेवल सेट करने तक बंद
Claude Opus 4.7claude-opus-4-7low, medium, high, xhigh, maxलेवल सेट करने तक बंद
Claude Opus 4.8claude-opus-4-8low, medium, high, xhigh, maxलेवल सेट करने तक बंद
Claude Opus 5claude-opus-5low, medium, high, xhigh, maxhigh
Claude Opus 5.5claude-opus-5-5low, medium, high, xhigh, maxmedium
Claude Sonnet 5.5claude-sonnet-5-5low, medium, high, xhigh, maxhigh
DeepSeek V4 Flashdeepseek-v4-flashnone, high, maxhigh
DeepSeek V4 Flash 0731deepseek-v4-flash-0731none, low, high, maxhigh
DeepSeek V4 Pro 0813deepseek-v4-pro-0813none, low, high, maxhigh
DeepSeek V4.1 Flashdeepseek-v4.1-flashnone, high, maxhigh
DeepSeek V4.1 Flash 1017deepseek-v4.1-flash-1017none, high, maxhigh
Gemini 3.1 Flash-Litegemini-3.1-flash-liteminimal, low, medium, highminimal
Gemini 3.1 Progemini-3.1-prolow, medium, highhigh
Gemini 3.5 Flash-Litegemini-3.5-flash-liteminimal, low, medium, highminimal
Gemini 3.7 Flashgemini-3.7-flashlow, medium, highmedium
Gemini 3.8 Flashgemini-3.8-flashlow, medium, highmedium
Gemini 4 Argongemini-4-argonlow, medium, highmedium
GLM-5.2glm-5.2none, high, maxmax
GLM-5.3glm-5.3low, high, maxmax
GLM-5.3 Flashglm-5.3-flashlow, high, maxmax
GLM-5.3 FlashXglm-5.3-flashxlow, high, maxmax
GPT-5.6 Lunagpt-5.6-lunanone, low, medium, high, xhigh, maxmedium
GPT-5.6 Solgpt-5.6-solnone, low, medium, high, xhigh, maxmedium
GPT-5.6 Terragpt-5.6-terranone, low, medium, high, xhigh, maxmedium
GPT-6 Astragpt-6-astralow, medium, high, xhigh, maxmedium
GPT-6 Lunagpt-6-lunanone, low, medium, high, xhigh, maxmedium
GPT-6 Solgpt-6-solnone, low, medium, high, xhigh, maxmedium
GPT-6.1 Solgpt-6.1-sollow, medium, high, xhigh, maxmedium
GPT-6.1 Terragpt-6.1-terranone, low, medium, high, xhigh, maxmedium
Grok 4.7grok-4.7low, medium, high, xhighhigh
HY4 Previewhy4-previewnone, highhigh
Kimi K2.5kimi-k2.5none, highhigh
Kimi K2.6kimi-k2.6none, highhigh
Kimi K3kimi-k3low, high, maxmax
Kimi K3.1 Prokimi-k3.1-prolow, high, maxmax
Kimi K3.1 Pro Highspeedkimi-k3.1-pro-highspeedlow, high, maxmax
MiMo V2.6 Flashmimo-v2.6-flashnone, highhigh
MiMo V2.6 Promimo-v2.6-pronone, highhigh
MiniMax M3minimax-m3none, highhigh
MiniMax M3.1 Flashminimax-m3.1-flashlow, medium, high, xhigh, maxmax
Muse Spark 1.3 Contributormuse-spark-1.3-contributorminimal, low, medium, high, xhighmedium
Muse Wondermuse-wonder-1.0minimal, low, medium, high, xhigh, maxhigh
Qwen 3.8 Flashqwen3.8-flashnone, low, medium, xhighxhigh
Qwen 3.8 Maxqwen3.8-maxnone, low, medium, xhighxhigh
Qwen 3.8 Omni Flashqwen3.8-omni-flashnone, low, medium, xhighxhigh
चरण 5 Previewstep-5-previewlow, medium, highmedium
Zurelay Autozurelay-autonone, minimal, low, medium, high, xhigh, maxलेवल सेट करने तक बंद
MiniMax M2.5minimax-m2.5कुछ सेट नहीं करनाहमेशा सोचता है
Claude Haiku 4.5claude-haiku-4-5कोई नहीं (Anthropic फ़ॉर्मैट में थिंकिंग बजट)बंद
Ministral 3 14Bministral-3-14bकोई नहींबंद
Ministral 3 3Bministral-3-3bकोई नहींबंद

Claude की सोच

इस एंडपॉइंट पर, Claude दूसरे मॉडल की तरह reasoning_effort स्वीकार करता है: low, medium, high, xhigh या max (Opus 4.6 में xhigh नहीं है)। Anthropic के अपने फ़ॉर्मैट में, Claude चुने गए स्तर पर परिस्थिति के हिसाब से सोचता है: thinking: { type: "adaptive", display: "summarized" } को output_config: { effort: "xhigh" } के साथ भेजें और सोच वाले ब्लॉक पढ़ें। Anthropic Messages देखें।

कोई सवाल है, या कुछ छूट गया है? हमारी सहायता टीम से पूछें और हम ईमेल से जवाब देंगे, आम तौर पर एक मिनट के भीतर.