Chat Completions
POST /v1/chat/completions एक बातचीत लेता है और OpenAI Chat Completions फ़ॉर्मेट में मॉडल का अगला संदेश लौटाता है। इसे किसी भी OpenAI SDK से या सादे HTTP पर उपयोग करें; यह पेज फ़ील्ड-दर-फ़ील्ड संदर्भ है।
POST https://api.shannon-ai.com/v1/chat/completions
सबसे छोटा अनुरोध एक मॉडल id और एक यूज़र संदेश है।
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="shannon-3",
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
print(response.choices[0].message.content) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "shannon-3",
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
console.log(response.choices[0].message.content); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' उत्तर एक JSON ऑब्जेक्ट है:
{
"id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"object": "chat.completion",
"created": 1791625200,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, it is good to meet you.",
"reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1184,
"completion_tokens": 46,
"total_tokens": 1230
}
} हेडर
अनुरोध हेडर
| हेडर | मान | विवरण |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | आपकी API key। हर endpoint पर इसकी जगह x-api-key: YOUR_API_KEY भी स्वीकार है। |
Content-Type | application/json | आवश्यक। कोई और मान 415 लौटाता है। |
x-request-id | वैकल्पिक। अनुरोध के लिए आपका अपना id। यह उत्तर में बिना बदले लौट आता है। |
उत्तर हेडर
| हेडर | विवरण |
|---|---|
x-request-id | हर उत्तर पर, त्रुटियों और स्ट्रीम सहित: आपका भेजा मान, या कुछ न भेजने पर 12 हेक्साडेसिमल अक्षर। समस्या बताते समय इसे उद्धृत करें। |
content-type | application/json, या stream के true होने पर text/event-stream। |
अनुरोध फ़ील्ड
केवल messages आवश्यक है। लागू करने वाले कॉलम में उन मॉडल के नाम हैं जिन पर कोई फ़ील्ड उत्तर को बदलता है। होस्टेड ओपन-वेट मॉडल मॉडल सूची के बारह id हैं; Shannon 3 परिवार shannon-3, shannon-3-pro, shannon-3.1 और shannon-3.1-pro है। मॉडल और कीमतें
| फ़ील्ड | प्रकार | डिफ़ॉल्ट | विवरण | लागू करने वाले |
|---|---|---|---|---|
model | string | shannon-1.6-lite | उत्तर देने वाला मॉडल: मॉडल सूची में से एक id। इसे हर अनुरोध के साथ भेजें। मिलान में अक्षरों का केस मायने नहीं रखता। जो id प्रकाशित नहीं है वह 400 unknown model लौटाता है। | सभी मॉडल |
messages | array | आवश्यक। बातचीत, सबसे पुराना संदेश पहले। नीचे संदेश देखें। | सभी मॉडल | |
stream | boolean | false | true उत्तर को लिखे जाने के साथ-साथ server-sent events के रूप में भेजता है। | सभी मॉडल |
max_tokens | integer | 4096 | उत्तर की ऊपरी सीमा, टोकन में। 1 से 65,536 के बाहर का मान उसी सीमा में ला दिया जाता है। अनुरोध चलने के दौरान आपके बैलेंस में से इतनी मात्रा अलग रख ली जाती है। नीचे आउटपुट की लंबाई देखें। | होस्टेड ओपन-वेट मॉडल, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | max_tokens जैसा ही। दोनों भेजे जाएँ तो max_tokens उपयोग होता है। | होस्टेड ओपन-वेट मॉडल, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | सैंपलिंग तापमान। होस्टेड ओपन-वेट मॉडल पर डिफ़ॉल्ट 1 है और मान 0 और 2 के बीच रखे जाते हैं। | होस्टेड ओपन-वेट मॉडल, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | न्यूक्लियस सैंपलिंग। मान 0 और 1 के बीच रखे जाते हैं। | होस्टेड ओपन-वेट मॉडल |
seed | integer | सैंपलर का seed, कोई भी पूर्णांक। इसके बिना seed मॉडल और बातचीत से निकाला जाता है, इसलिए दो बार भेजा गया वही अनुरोध वही seed उपयोग करता है। | होस्टेड ओपन-वेट मॉडल | |
stop | string | array | एक स्ट्रिंग या स्ट्रिंग की ऐरे। अधिकतम 4 उपयोग होती हैं। उत्तर उनमें से पहली के आने से पहले समाप्त हो जाता है; स्टॉप टेक्स्ट खुद नहीं लौटाया जाता। | होस्टेड ओपन-वेट मॉडल | |
reasoning_effort | string | high | उत्तर देने से पहले मॉडल कितना रीज़न करता है: off, low, medium या high। none और minimal का अर्थ off है, default का अर्थ medium है, max का अर्थ high है। कोई भी और मान 400 लौटाता है। | होस्टेड ओपन-वेट मॉडल |
reasoning | object | वही सेटिंग ऑब्जेक्ट रूप में: {"effort": "low"}। दोनों भेजे जाएँ तो reasoning_effort उपयोग होता है। | होस्टेड ओपन-वेट मॉडल | |
tools | array | वे फ़ंक्शन जिन्हें मॉडल कॉल कर सकता है, हर एक {"type": "function", "function": {"name", "description", "parameters"}} के रूप में। मॉडल की कॉल tool_calls में लौटती हैं; आपका कोड उन्हें चलाता है। | सभी मॉडल | |
tool_choice | string | object | auto | "auto" मॉडल को तय करने देता है। "required" उसे कोई टूल कॉल करने पर मजबूर करता है। {"type": "function", "function": {"name": "…"}} उसे वही टूल कॉल करने पर मजबूर करता है। | होस्टेड ओपन-वेट मॉडल |
response_format | object | JSON उत्तर के लिए {"type": "json_object"}, या आपके schema का पालन करने वाले उत्तर के लिए {"type": "json_schema", "json_schema": {…}}। | सभी Shannon टियर; होस्टेड ओपन-वेट मॉडल हर id के अनुसार सूचीबद्ध | |
web_search | boolean | false | true मॉडल को उत्तर देने से पहले वेब पर खोजने देता है। | shannon-1.6-*, shannon-2-*, Shannon 3 परिवार |
अन्य OpenAI फ़ील्ड, जैसे n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store और prompt_cache_key, स्वीकार किए जाते हैं ताकि मौजूदा क्लाइंट कोड बिना बदलाव के चले। ये उत्तर को नहीं बदलते: हमेशा एक ही choice होती है, और स्ट्रीम हमेशा उपयोग की जानकारी के साथ समाप्त होती है।
गलत JSON प्रकार वाला फ़ील्ड, उदाहरण के लिए "max_tokens": "100", 422 लौटाता है। messages के बिना अनुरोध भी यही लौटाता है।
टूल्स, संरचित आउटपुट, रीज़निंग और वेब सर्च, हर एक का अपना पेज है: फ़ंक्शन कॉलिंग, संरचित आउटपुट, रीज़निंग effort, इनबिल्ट Web Search.
विकल्पों के साथ अनुरोध
यह अनुरोध एक सिस्टम संदेश, सैंपलिंग फ़ील्ड और रीज़निंग effort सेट करता है। यह एक होस्टेड ओपन-वेट मॉडल का उपयोग करता है, जो इन सभी को लागू करता है।
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1",
)
response = client.chat.completions.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages=[
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"},
],
max_tokens=512,
temperature=0.3,
top_p=0.9,
seed=7,
stop=["\n\n"],
reasoning_effort="low",
)
message = response.choices[0].message
print(message.reasoning_content) # the reasoning
print(message.content) # the answer
print(response.usage) import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com/v1",
});
const response = await client.chat.completions.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
messages: [
{ role: "system", content: "You are a physics teacher. Answer in two sentences." },
{ role: "user", content: "Why is the sky blue?" },
],
max_tokens: 512,
temperature: 0.3,
top_p: 0.9,
seed: 7,
stop: ["\n\n"],
reasoning_effort: "low",
});
const message = response.choices[0].message;
console.log(message.reasoning_content); // the reasoning
console.log(message.content); // the answer
console.log(response.usage); curl https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"messages": [
{"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
{"role": "user", "content": "Why is the sky blue?"}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"seed": 7,
"stop": ["\n\n"],
"reasoning_effort": "low"
}' उत्तर का रूप ऊपर जैसा ही है। होस्टेड ओपन-वेट मॉडल पर इसका usage दो विवरण और जोड़ता है: कैश से पढ़े गए प्रॉम्प्ट टोकन और रीज़निंग पर खर्च हुए टोकन।
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} आउटपुट की लंबाई
max_tokens दो काम करता है। पहला, अनुरोध शुरू होते समय आपके बैलेंस में से इतने टोकन अलग रख लिए जाते हैं। उत्तर पूरा होने पर वह मात्रा अनुरोध द्वारा उपयोग किए गए टोकन से बदल दी जाती है। यदि max_tokens आपके बैलेंस में बचे हिस्से से बड़ा है, तो अनुरोध 429 Quota exceeded लौटाता है, भले ही उत्तर खुद समा जाता। कम अलग रखने के लिए कम max_tokens भेजें।
इस endpoint पर shannon-coder-1 अलग तरह से गिना जाता है: हर अनुरोध आपके प्लान की एक Shannon Coder कॉल है, और उसके लिए कोई टोकन अलग नहीं रखे जाते। सीमाएँ और बैलेंस
दूसरा, यह इन मॉडल पर उत्तर की लंबाई सीमित करता है:
| मॉडल | max_tokens क्या करता है |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | सीमा तक पहुँचने पर उत्तर रुक जाता है। तब स्ट्रीम finish_reason length के साथ समाप्त होती है। |
| होस्टेड ओपन-वेट मॉडल | उत्तर का टेक्स्ट max_tokens पर रुकता है। रीज़निंग इसमें नहीं गिनी जाती। 256 से कम मान 256 की तरह काम करते हैं। |
max_tokens या max_completion_tokens के बिना मान 4,096 होता है। shannon-coder-1 पर यह 65,536 है।
संदेश
हर संदेश एक ऑब्जेक्ट है जिसमें role और content होता है। content एक स्ट्रिंग है, या भागों की ऐरे जब संदेश में टेक्स्ट से ज़्यादा कुछ हो।
| भूमिका | विवरण | लागू करने वाले |
|---|---|---|
system | मॉडल के लिए निर्देश। इसे पहले रखें। Shannon टियर पर पहला system संदेश ही उपयोग होता है। | होस्टेड ओपन-वेट मॉडल, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | system की तरह पढ़ा जाता है। | होस्टेड ओपन-वेट मॉडल |
user | जो आप पूछते हैं। Shannon टियर पर आखिरी user संदेश प्रॉम्प्ट है और उससे पहले के संदेश हिस्ट्री हैं। | सभी मॉडल |
assistant | मॉडल के पिछले उत्तर। जब आप उसके बाद टूल परिणाम भेजें तो उसके tool_calls बनाए रखें। | सभी मॉडल |
tool | टूल कॉल का परिणाम: tool_call_id में कॉल का id और content में परिणाम स्ट्रिंग के रूप में होता है। | सभी मॉडल |
Shannon 3 परिवार के id के साथ, जो निर्देश अनिवार्य हैं उन्हें user संदेश में रखें।
Shannon टियर पर यूज़र टेक्स्ट और tools के बिना अनुरोध 400 No user message provided लौटाता है।
कंटेंट भाग
| भाग | विवरण | इन पर उपलब्ध |
|---|---|---|
{"type": "text", "text": "…"} | सादा टेक्स्ट। | सभी मॉडल |
{"type": "image_url", "image_url": {"url": "…"}} | एक इमेज, base64 कंटेंट वाले data: URL के रूप में या http(s) URL के रूप में। | Shannon 3 परिवार, shannon-1.6-lite, shannon-1.6-pro और वे होस्टेड ओपन-वेट मॉडल जो इमेज इनपुट सूचीबद्ध करते हैं |
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | एक दस्तावेज़ (PDF, Word, PowerPoint या Excel), base64 के रूप में या URL से। | Shannon 3 परिवार |
साइज़, सीमाओं और सभी रूपों की पूरी सूची का अपना पेज है। इमेज और फ़ाइलें
उत्तर ऑब्जेक्ट
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
id | string | chatcmpl- के बाद 32 हेक्साडेसिमल अक्षर। |
object | string | हमेशा chat.completion। |
created | integer | उत्तर का समय, Unix सेकंड में। |
model | string | उत्तर देने वाले मॉडल का कैननिकल id। यह आपके भेजे id से वर्तनी में भिन्न हो सकता है। |
choices | array | हमेशा ठीक एक choice, index 0 के साथ। |
choices[0].message.role | string | हमेशा assistant। |
choices[0].message.content | string | null | उत्तर का टेक्स्ट। tool_calls के साथ यह Shannon टियर पर null होता है; होस्टेड ओपन-वेट मॉडल कॉल के साथ टेक्स्ट भी भेज सकते हैं। |
choices[0].message.reasoning_content | string | null | उत्तर से पहले मॉडल ने जो रीज़निंग लिखी, या कुछ न हो तो null। |
choices[0].message.tool_calls | array | केवल तब मौजूद जब मॉडल टूल कॉल करता है। हर प्रविष्टि में एक id, type function, और function होता है जिसमें name और JSON स्ट्रिंग के रूप में arguments होते हैं। |
choices[0].message.annotations | array | केवल उस अनुरोध पर जिसमें web_search: true हो और जिसकी खोज को कुछ मिला हो। content में मार्कर द्वारा बताए गए हर स्रोत के लिए एक url_citation, जिसमें url, title, start_index और end_index होते हैं (मार्कर की स्थिति, अक्षरों में गिनी हुई, अंतिम स्थिति शामिल नहीं)। |
choices[0].finish_reason | string | उत्तर क्यों समाप्त हुआ। समाप्ति के कारण देखें। |
usage | object | अनुरोध के टोकन। उपयोग देखें। |
sources | array | केवल उस अनुरोध पर जिसमें web_search: true हो और जिसकी खोज को कुछ मिला हो: मॉडल को दिए गए परिणाम, हर एक में index, title और url। उत्तर में [1] वह एंट्री है जिसका index 1 है। |
समाप्ति के कारण
| finish_reason | विवरण |
|---|---|
stop | मॉडल ने अपना उत्तर पूरा किया, या कोई stop स्ट्रिंग आ गई। |
tool_calls | मॉडल एक या अधिक टूल कॉल करता है। उन्हें चलाएँ और परिणाम tool संदेशों में भेजें। |
length | उत्तर आउटपुट सीमा पर काट दिया गया। shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 और Shannon 3 परिवार की स्ट्रीम में बताया जाता है। |
बिना स्ट्रीम वाला उत्तर stop या tool_calls बताता है।
उपयोग
| फ़ील्ड | प्रकार | विवरण | इन पर उपलब्ध |
|---|---|---|---|
usage.prompt_tokens | integer | इनपुट टोकन। | सभी मॉडल |
usage.completion_tokens | integer | आउटपुट टोकन: रीज़निंग, उत्तर और टूल कॉल मिलाकर। | सभी मॉडल |
usage.total_tokens | integer | prompt_tokens जमा completion_tokens। | सभी मॉडल |
usage.prompt_tokens_details.cached_tokens | integer | prompt_tokens का वह हिस्सा जो प्रॉम्प्ट कैश से पढ़ा गया। | होस्टेड ओपन-वेट मॉडल |
usage.completion_tokens_details.reasoning_tokens | integer | completion_tokens का वह हिस्सा जो रीज़निंग पर खर्च हुआ। | होस्टेड ओपन-वेट मॉडल |
होस्टेड ओपन-वेट मॉडल पर prompt_tokens आपके संदेशों और टूल परिभाषाओं को मॉडल के अपने टोकनाइज़र से गिनकर, साथ में किसी भी इमेज के टोकन जोड़कर बनता है। टोकन गिनने वाले endpoints भेजने से पहले यही संख्या लौटाते हैं। टोकन गिनती
Shannon टियर पर prompt_tokens वह सब गिनता है जो मॉडल ने उत्तर लिखने के लिए पढ़ा, इसलिए यह अकेले आपके संदेशों के टेक्स्ट से बड़ा होता है।
स्ट्रीमिंग
stream को true पर सेट करने पर उत्तर chat.completion.chunk इवेंट के रूप में आता है और data: [DONE] पर समाप्त होता है। उससे पहले का आखिरी चंक finish_reason और usage ले जाता है; किसी stream_options की ज़रूरत नहीं। चंक के रूप, keep-alive लाइनों और स्ट्रीम के भीतर की त्रुटियों का अपना पेज है। स्ट्रीमिंग
त्रुटियाँ
त्रुटि एक JSON ऑब्जेक्ट है जिसमें error सदस्य होता है। जाँचें इस क्रम में चलती हैं: API key, अनुरोध बॉडी, मॉडल id, फिर बैलेंस। तालिका वह दिखाती है जो यह endpoint सबसे ज़्यादा लौटाता है। पूरी सूची, और किसे दोबारा आज़माना है, इसका अपना पेज है। त्रुटि प्रबंधन
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | स्टेटस | प्रकार | संदेश | कब |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | कोई API key नहीं भेजी गई, या key अज्ञात है या रद्द की जा चुकी है। |
400 | invalid_request_error | unknown model: <id> | model कोई प्रकाशित id नहीं है। |
400 | invalid_request_error | No user message provided | Shannon टियर: अनुरोध में न यूज़र टेक्स्ट है और न tools। |
400 | invalid_request_error | <id> does not accept image input | इमेज इनपुट के बिना होस्टेड ओपन-वेट मॉडल को इमेज भाग भेजा गया। |
400 | invalid_request_error | <id> does not accept response_format | संरचित आउटपुट के बिना होस्टेड ओपन-वेट मॉडल को response_format भेजा गया। |
400 | invalid_request_error | unknown reasoning effort '<value>'; expected off, low, medium or high | reasoning_effort में सूची से बाहर का मान है। |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages गायब है, या किसी फ़ील्ड का JSON प्रकार गलत है। |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens आपके बैलेंस में बचे हिस्से से बड़ा है। |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Flood protection: आपके अकाउंट पर एक मिनट में 120 से अधिक अनुरोध। |
500 | server_error | The model backend failed to answer. Please retry. | मॉडल ने उत्तर नहीं दिया। अनुरोध फिर से भेजें। |
502 | api_error | The model backend failed to answer. Please retry. | वही, Shannon 3 परिवार और होस्टेड ओपन-वेट मॉडल पर। |