कंटेंट पर जाएँ
क्विक स्टार्ट

क्विक स्टार्ट

पहला अनुरोध करें: अपनी key लें, एक संदेश भेजें और उत्तर पढ़ें। API OpenAI और Anthropic फ़ॉर्मेट बोलती है, इसलिए आप जो SDK पहले से इस्तेमाल करते हैं वह बेस URL और key बदलने के बाद काम करता है।

1. अपनी key लें

हर अकाउंट की एक API key होती है। साइन इन करें, Keys & usage खोलें और उसे कॉपी करें। key हर endpoint और हर मॉडल पर काम करती है। Keys और उपयोग

2. अपने क्लाइंट को API की ओर करें

सभी endpoints एक बेस URL के नीचे हैं। OpenAI SDK इसे अंत में /v1 के साथ लेता है; Anthropic SDK इसके बिना लेता है, क्योंकि वह /v1/messages खुद जोड़ता है।

क्लाइंट बेस URL
OpenAI SDK और OpenAI-संगत क्लाइंट https://api.shannon-ai.com/v1
Anthropic SDK https://api.shannon-ai.com

तीन endpoints टेक्स्ट बनाते हैं। वे एक ही मॉडल तक पहुँचते हैं; वह चुनें जिसका फ़ॉर्मेट आपका कोड पहले से इस्तेमाल करता है।

एंडपॉइंट फ़ॉर्मेट
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/messages Anthropic Messages
POST /v1/responses OpenAI Responses

3. पहला अनुरोध भेजें

Chat Completions endpoint पर shannon-3 को एक user संदेश भेजें। YOUR_API_KEY की जगह अपनी key लगाएँ।

POST https://api.shannon-ai.com/v1/chat/completions

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": "Hello, Shannon!"}
    ],
    max_tokens=1024
)

print(response.choices[0].message.content)
फ़ील्ड प्रकार डिफ़ॉल्ट विवरण
model string उत्तर देने वाले मॉडल का id। id Models & pricing पर सूचीबद्ध हैं।
messages array अब तक की बातचीत: role और content वाले ऑब्जेक्ट। आख़िरी user संदेश प्रॉम्प्ट है। ज़रूरी।
max_tokens integer 4096 अनुरोध का आउटपुट बजट, 1 से 65,536 तक। अनुरोध यह मात्रा आपके बैलेंस से रिज़र्व करता है और जितना सच में इस्तेमाल हुआ उसका शुल्क लगता है।
stream boolean false true उत्तर को लिखे जाते समय टुकड़ों में भेजता है।

अनुरोध की बॉडी JSON है और उसे हेडर Content-Type: application/json चाहिए। फ़ील्ड की पूरी सूची endpoint पेज पर है। Chat Completions

उत्तर

stream के बिना कॉल, उत्तर पूरा होने पर एक JSON ऑब्जेक्ट लौटाती है। नीचे के टेक्स्ट और संख्याएँ उदाहरण हैं।

200 JSON
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! What would you like to work on?",
        "reasoning_content": "A greeting. A short, friendly reply fits."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1386,
    "completion_tokens": 74,
    "total_tokens": 1460
  }
}
फ़ील्ड प्रकार विवरण
id string chatcmpl- और उसके बाद 32 हेक्साडेसिमल अक्षर।
object string हमेशा chat.completion।
created integer Unix सेकंड में उत्तर का समय।
model string उत्तर देने वाले मॉडल का प्रकाशित id, तब भी जब आपने alias या दूसरी वर्तनी भेजी हो।
choices array हमेशा एक प्रविष्टि, index 0 के साथ।
choices[0].message.role string हमेशा assistant।
choices[0].message.content string | null उत्तर। जब उत्तर में tool_calls हों तो यह null हो सकता है।
choices[0].message.reasoning_content string | null उत्तर से पहले मॉडल की रीज़निंग, या कुछ न होने पर null।
choices[0].message.tool_calls array केवल तब होता है जब मॉडल आपके घोषित किए टूल में से किसी को कॉल करे।
choices[0].finish_reason string उत्तर के लिए stop, जब मॉडल टूल कॉल करे तब tool_calls।
usage.prompt_tokens integer मॉडल ने इस उत्तर के लिए जो टोकन पढ़े। shannon-2-* और Shannon 3 परिवार पर यह आपके भेजे टेक्स्ट से ज़्यादा हो सकता है।
usage.completion_tokens integer मॉडल ने जो टोकन लिखे।
usage.total_tokens integer कुल। Shannon मॉडल का शुल्क इसी संख्या से निकाला जाता है।
  • usage में टोकन गिनती होती है, पैसे नहीं। कॉल ने आपके बैलेंस से क्या लिया, यह Keys & usage पर हर अनुरोध के लिए दिखता है; यह कैसे निकलता है, यह सीमाएँ और बैलेंस पर है। सीमाएँ और बैलेंस
  • हर उत्तर में, एरर और स्ट्रीम में भी, हेडर x-request-id होता है। अगर आपके अनुरोध में x-request-id हेडर है, तो उसका मान लौट आता है; नहीं तो मान 12 हेक्साडेसिमल अक्षरों का होता है। इसे अपने लॉग में रखें: यह इसी एक अनुरोध का नाम है।

वही कॉल स्ट्रीम के रूप में

उत्तर को लिखे जाते समय पढ़ने के लिए stream को true पर सेट करें। अनुरोध में बाकी सब वैसा ही रहता है।

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

stream = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024,
    stream=True
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

स्ट्रीम का हर फ़्रेम data: से शुरू होने वाली एक पंक्ति है और उसमें एक JSON ऑब्जेक्ट होता है। एक फ़्रेम, कई पंक्तियों में छपा हुआ:

एक फ़्रेम
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion.chunk",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Hello! "
      },
      "finish_reason": null
    }
  ]
}
फ़्रेम, क्रम में delta finish_reason
जब मॉडल रीज़निंग करता है। शून्य या अधिक फ़्रेम। {"reasoning_content": "…"} null
उत्तर, टुकड़ा-टुकड़ा। शून्य या अधिक फ़्रेम। {"content": "…"} null
आख़िरी JSON फ़्रेम। इसमें usage भी होता है; इसे माँगना नहीं पड़ता। {} "stop"
स्ट्रीम का अंत: पंक्ति data: [DONE]।
  • उत्तर का स्टेटस 200 और content-type: text/event-stream है। हर फ़्रेम data: <json> वाली एक पंक्ति है, जिसके बाद एक खाली पंक्ति आती है।
  • हर 15 सेकंड पर पंक्ति : ping आती है। यह एक कमेंट है जो कनेक्शन खुला रखता है; SSE क्लाइंट इसे छोड़ देते हैं।
  • स्ट्रीम खुलने के बाद की विफलता data: {"error": {…}} फ़्रेम के रूप में आती है। स्टेटस 200 ही रहता है, इसलिए फ़्रेम जाँचें।

स्ट्रीमिंग

अगर कॉल विफल हो

एरर एक JSON ऑब्जेक्ट है जिसमें error होता है, जिसके भीतर type और message होते हैं। पहली कॉल को सबसे ज़्यादा यही उत्तर मिलते हैं।

स्टेटस प्रकार संदेश इसका मतलब
401 authentication_error Missing authentication API तक कोई key नहीं पहुँची। Authorization: Bearer और उसके बाद अपनी key भेजें।
401 authentication_error Invalid API key key किसी अकाउंट की मौजूदा key नहीं है। उसे Keys & usage से फिर कॉपी करें।
400 invalid_request_error unknown model: <id> model प्रकाशित id नहीं है। Models & pricing से कोई id इस्तेमाल करें।
422 invalid_request_error Failed to deserialize the JSON body into the target type… किसी फ़ील्ड का JSON प्रकार गलत है, या messages नहीं है।
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan अनुरोध का आउटपुट बजट आपके बैलेंस में नहीं समाता।

त्रुटि प्रबंधन

आगे कहाँ जाएँ

  • मॉडल और कीमतें — मॉडल चुनें: id, कॉन्टेक्स्ट विंडो और कीमतें।
  • Chat Completions — आपके कॉल किए endpoint का हर अनुरोध फ़ील्ड, उत्तर फ़ील्ड और स्ट्रीम इवेंट।
  • स्ट्रीमिंग — स्ट्रीम के फ़्रेम, keep-alive लाइनें और स्ट्रीम के भीतर के एरर।
  • फ़ंक्शन कॉलिंग — मॉडल को अपने फ़ंक्शन कॉल करने दें।
  • सीमाएँ और बैलेंस — अनुरोध क्या रिज़र्व करता है और उसकी लागत क्या है, और आप कितने अनुरोध भेज सकते हैं।
  • API प्लेग्राउंड — अपनी key से ब्राउज़र में अनुरोध आज़माएँ।