छिटो सुरु
पहिलो अनुरोध गर्नुहोस्: आफ्नो की लिनुहोस्, एउटा सन्देश पठाउनुहोस् र जवाफ पढ्नुहोस्। API ले OpenAI र Anthropic ढाँचा बोल्छ, त्यसैले तपाईंले पहिल्यै प्रयोग गरिरहेको SDK बेस URL र की बदलेपछि काम गर्छ।
1. आफ्नो की लिनुहोस्
हरेक खातामा एउटा API की हुन्छ। साइन इन गर्नुहोस्, Keys & usage खोल्नुहोस् र कपी गर्नुहोस्। की हरेक इन्डपोइन्ट र हरेक मोडलमा काम गर्छ। की र प्रयोग
2. आफ्नो क्लाइन्टलाई API तिर देखाउनुहोस्
सबै इन्डपोइन्ट एउटै बेस 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 |
तीन इन्डपोइन्टले टेक्स्ट उत्पन्न गर्छन्। तिनीहरू उही मोडलहरूमा पुग्छन्; तपाईंको कोडले पहिल्यै प्रयोग गरिरहेको ढाँचाको इन्डपोइन्ट छान्नुहोस्।
| इन्डपोइन्ट | ढाँचा |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. पहिलो अनुरोध पठाउनुहोस्
Chat Completions इन्डपोइन्टमा shannon-3 लाई एउटा user सन्देश पठाउनुहोस्। YOUR_API_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) 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: 'Hello, Shannon!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
} curl -X POST "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": "Hello, Shannon!"}
],
"max_tokens": 1024
}' | फिल्ड | प्रकार | पूर्वनिर्धारित | विवरण |
|---|---|---|---|
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 हेडर चाहिन्छ। फिल्डहरूको पूरा सूची इन्डपोइन्ट पेजमा छ। Chat Completions
जवाफ
stream बिनाको कलले जवाफ पूरा हुँदा एउटा 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, तपाईंले उपनाम वा अर्को हिज्जे पठाउँदा पनि। |
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 मा देखिन्छ; यो कसरी गणना हुन्छ भन्ने Limits and balance मा छ। सीमा र ब्यालेन्स - हरेक जवाफ, त्रुटि र स्ट्रिमसमेत, मा
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) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const stream = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -X POST "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": "Hello, Shannon!"}
],
"max_tokens": 1024,
"stream": 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>लाइन हो जसपछि खाली लाइन आउँछ। : pingलाइन हरेक 15 सेकेन्डमा आउँछ। यो कनेक्सन खुला राख्ने कमेन्ट हो; SSE क्लाइन्टहरूले यसलाई छोड्छन्।- स्ट्रिम खुलेपछिको असफलता
data: {"error": {…}}फ्रेमका रूपमा आउँछ। स्टेटस200नै रहन्छ, त्यसैले फ्रेमहरू जाँच्नुहोस्।
कल असफल भए
त्रुटि type र message बोक्ने error भएको JSON अब्जेक्ट हो। पहिलो कलले प्रायः भेट्ने जवाफहरू यी हुन्।
| स्थिति | प्रकार | सन्देश | यसको अर्थ |
|---|---|---|---|
401 | authentication_error | Missing authentication | API सम्म कुनै की पुगेन। Authorization: Bearer पछि आफ्नो की पठाउनुहोस्। |
401 | authentication_error | Invalid API 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 — तपाईंले कल गरेको इन्डपोइन्टका हरेक अनुरोध फिल्ड, जवाफ फिल्ड र स्ट्रिम इभेन्ट।
- स्ट्रिमिङ — स्ट्रिमका फ्रेम, कीप-अलाइभ लाइन र स्ट्रिमभित्रका त्रुटिहरू।
- फङ्क्शन कलिङ — मोडललाई तपाईंका फङ्सन कल गर्न दिनुहोस्।
- सीमा र ब्यालेन्स — अनुरोधले के छुट्याउँछ र कति लाग्छ, र कति अनुरोध पठाउन सकिन्छ।
- API प्लेग्राउन्ड — आफ्नो कीसहित ब्राउजरमा अनुरोधहरू प्रयास गर्नुहोस्।