Chat Completions
POST /v1/chat/completions იღებს საუბარს და აბრუნებს მოდელის შემდეგ შეტყობინებას OpenAI Chat Completions ფორმატში. გამოიყენეთ ნებისმიერი OpenAI SDK-დან ან უბრალო HTTP-ით; ეს გვერდი ველ-ველ ცნობარია.
POST https://api.shannon-ai.com/v1/chat/completions
ყველაზე მცირე მოთხოვნა მოდელის id-ა და ერთი user შეტყობინებაა.
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
}
} Header-ები
მოთხოვნის header-ები
| Header | მნიშვნელობა | აღწერა |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | თქვენი API გასაღები. მის ნაცვლად ყველა endpoint-ზე მიიღება x-api-key: YOUR_API_KEY. |
Content-Type | application/json | სავალდებულოა. ნებისმიერი სხვა მნიშვნელობა აბრუნებს 415-ს. |
x-request-id | არასავალდებულო. თქვენი საკუთარი id მოთხოვნისთვის. პასუხზე ის უცვლელად ბრუნდება. |
პასუხის header-ები
| Header | აღწერა |
|---|---|
x-request-id | ყველა პასუხზე, შეცდომებისა და სტრიმების ჩათვლით: თქვენ მიერ გაგზავნილი მნიშვნელობა, ან 12 თექვსმეტობითი სიმბოლო, თუ არაფერი გაგიგზავნიათ. პრობლემის შეტყობინებისას მიუთითეთ. |
content-type | application/json, ან text/event-stream, როცა stream არის true. |
მოთხოვნის ველები
სავალდებულოა მხოლოდ messages. სვეტი მოქმედებს ასახელებს მოდელებს, რომლებზეც ველი პასუხს ცვლის. Hosted open-weight მოდელები მოდელების სიის თორმეტი 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-მდე დიაპაზონს გარეთ არსებული მნიშვნელობა ამ დიაპაზონში გადაინაცვლებს. ამავე რაოდენობას ბალანსიდან იქამდე ჩამოაკლდება, სანამ მოთხოვნა სრულდება. იხილეთ ქვემოთ გამოტანის სიგრძე. | Hosted open-weight მოდელები, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | იგივეა, რაც max_tokens. თუ ორივე იგზავნება, გამოიყენება max_tokens. | Hosted open-weight მოდელები, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | სემპლინგის ტემპერატურა. Hosted open-weight მოდელებზე ნაგულისხმევია 1 და მნიშვნელობები რჩება 0-სა და 2-ს შორის. | Hosted open-weight მოდელები, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | Nucleus სემპლინგი. მნიშვნელობები რჩება 0-სა და 1-ს შორის. | Hosted open-weight მოდელები |
seed | integer | სემპლერის seed, ნებისმიერი მთელი რიცხვი. მის გარეშე seed მოდელისა და საუბრიდან გამოითვლება, ამიტომ ორჯერ გაგზავნილი ერთი და იგივე მოთხოვნა ერთსა და იმავე seed-ს იყენებს. | Hosted open-weight მოდელები | |
stop | string | array | სტრიქონი ან სტრიქონების მასივი. გამოიყენება მაქსიმუმ 4. პასუხი მთავრდება პირველ მათგანამდე, რომელიც გამოჩნდება; თავად stop ტექსტი არ ბრუნდება. | Hosted open-weight მოდელები | |
reasoning_effort | string | high | რამდენს მსჯელობს მოდელი პასუხამდე: off, low, medium ან high. none და minimal ნიშნავს off-ს, default ნიშნავს medium-ს, max ნიშნავს high-ს. ნებისმიერი სხვა მნიშვნელობა აბრუნებს 400-ს. | Hosted open-weight მოდელები |
reasoning | object | იგივე პარამეტრი ობიექტის ფორმით: {"effort": "low"}. თუ ორივე იგზავნება, გამოიყენება reasoning_effort. | Hosted open-weight მოდელები | |
tools | array | ფუნქციები, რომელთა გამოძახებაც მოდელს შეუძლია, თითოეული სახით {"type": "function", "function": {"name", "description", "parameters"}}. მოდელის გამოძახებები tool_calls-ში ბრუნდება; მათ თქვენი კოდი ასრულებს. | ყველა მოდელი | |
tool_choice | string | object | auto | "auto" მოდელს თავად გადაწყვეტინებს. "required" აიძულებს ინსტრუმენტი გამოიძახოს. {"type": "function", "function": {"name": "…"}} აიძულებს ზუსტად ის ინსტრუმენტი გამოიძახოს. | Hosted open-weight მოდელები |
response_format | object | {"type": "json_object"} JSON პასუხისთვის, ან {"type": "json_schema", "json_schema": {…}} პასუხისთვის, რომელიც თქვენს სქემას მიჰყვება. | Shannon-ის ყველა დონე; hosted open-weight მოდელები 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 არსებობს და სტრიმი ყოველთვის usage-ით მთავრდება.
ველი JSON-ის არასწორი ტიპით, მაგალითად "max_tokens": "100", აბრუნებს 422-ს. ასევე მოთხოვნა messages-ის გარეშე.
ინსტრუმენტებს, სტრუქტურირებულ შედეგს, მსჯელობასა და ვებძიებას თითოეულს საკუთარი გვერდი აქვს: ფუნქციის გამოძახება, სტრუქტურირებული შედეგები, მსჯელობის effort, ჩაშენებული ვებძიება.
მოთხოვნა პარამეტრებით
ეს მოთხოვნა ადგენს system შეტყობინებას, სემპლინგის ველებსა და მსჯელობის effort-ს. ის იყენებს hosted open-weight მოდელს, რომელიც ყველა მათგანს ითვალისწინებს.
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 hosted open-weight მოდელებზე ორ დეტალს ამატებს: ქეშიდან წაკითხულ პრომპტის ტოკენებს და მსჯელობაზე დახარჯულ ტოკენებს.
{
"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.
shannon-coder-1 ამ endpoint-ზე სხვაგვარად ითვლება: ყოველი მოთხოვნა თქვენი გეგმის Shannon Coder-ის ერთი გამოძახებაა და მისთვის ტოკენები არ ირეზერვება. ლიმიტები და ბალანსი
მეორე, ის ზღუდავს პასუხის სიგრძეს ამ მოდელებზე:
| მოდელები | რას აკეთებს max_tokens |
|---|---|
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | პასუხი ჩერდება, როცა ლიმიტს მიაღწევს. სტრიმი მაშინ მთავრდება finish_reason length-ით. |
| Hosted open-weight მოდელები | პასუხის ტექსტი max_tokens-ზე ჩერდება. მსჯელობა მასში არ ითვლება. 256-ზე ნაკლები მნიშვნელობები 256-ად მოქმედებს. |
max_tokens-ისა და max_completion_tokens-ის გარეშე მნიშვნელობაა 4,096. shannon-coder-1-ზე — 65,536.
შეტყობინებები
თითოეული შეტყობინება არის ობიექტი role-ითა და content-ით. content არის სტრიქონი ან ნაწილების მასივი, როცა შეტყობინება ტექსტზე მეტს შეიცავს.
| როლი | აღწერა | მოქმედებს |
|---|---|---|
system | ინსტრუქციები მოდელისთვის. ჩადეთ პირველად. Shannon-ის დონეებზე გამოიყენება პირველი system შეტყობინება. | Hosted open-weight მოდელები, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | იკითხება როგორც system. | Hosted open-weight მოდელები |
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": "…"}} | სურათი, როგორც data: URL base64 შიგთავსით ან როგორც http(s) URL. | Shannon 3 ოჯახი, shannon-1.6-lite, shannon-1.6-pro და hosted open-weight მოდელები, რომლებიც სურათის შეტანას უჭერენ მხარს |
{"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-ია; hosted open-weight მოდელებს გამოძახებების გვერდით ტექსტის გამოგზავნა შეუძლიათ. |
choices[0].message.reasoning_content | string | null | მსჯელობა, რომელიც მოდელმა პასუხამდე დაწერა, ან null, თუ მსჯელობა არ არის. |
choices[0].message.tool_calls | array | არის მხოლოდ მაშინ, როცა მოდელი ინსტრუმენტებს იძახებს. თითოეულ ჩანაწერს აქვს id, type function და function name-ითა და arguments-ით JSON სტრიქონის სახით. |
choices[0].message.annotations | array | მხოლოდ იმ მოთხოვნაზე, რომელსაც აქვს web_search: true და რომლის ძიებამაც რაღაც იპოვა. თითო url_citation ყოველი წყაროსთვის, რომელსაც content-ში მარკერი ასახელებს, 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-ის ის ნაწილი, რომელიც პრომპტის ქეშიდან წაიკითხა. | Hosted open-weight მოდელები |
usage.completion_tokens_details.reasoning_tokens | integer | completion_tokens-ის ის ნაწილი, რომელიც მსჯელობაზე დაიხარჯა. | Hosted open-weight მოდელები |
Hosted open-weight მოდელებზე prompt_tokens არის თქვენი შეტყობინებები და ინსტრუმენტების აღწერები, დათვლილი მოდელის საკუთარი ტოკენიზატორით, პლუს ნებისმიერი სურათის ტოკენები. ტოკენების დათვლის endpoint-ები იმავე რიცხვს აბრუნებენ გაგზავნამდე. ტოკენების დათვლა
Shannon-ის დონეებზე prompt_tokens ითვლის ყველაფერს, რაც მოდელმა პასუხის დასაწერად წაიკითხა, ამიტომ ის მხოლოდ თქვენი შეტყობინებების ტექსტზე დიდია.
სტრიმინგი
როცა stream არის true, პასუხი მოდის chat.completion.chunk მოვლენებად და მთავრდება data: [DONE]-თი. მის წინ ბოლო chunk ატარებს finish_reason-სა და usage-ს; stream_options საჭირო არ არის. chunk-ების ფორმებს, keep-alive ხაზებსა და სტრიმის შიგნით შეცდომებს საკუთარი გვერდი აქვს. სტრიმინგი
შეცდომები
შეცდომა არის JSON ობიექტი error წევრით. შემოწმებები ამ თანმიმდევრობით სრულდება: API გასაღები, მოთხოვნის body, მოდელის id, შემდეგ ბალანსი. ცხრილში მოცემულია, რას აბრუნებს ეს endpoint ყველაზე ხშირად. სრულ სიას, იმის მითითებით, რა უნდა განმეორდეს, საკუთარი გვერდი აქვს. შეცდომების დამუშავება
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | სტატუსი | ტიპი | შეტყობინება | როდის |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API გასაღები არ გაიგზავნა, ან გასაღები უცნობია ან გაუქმებულია. |
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 | სურათის ნაწილი გაიგზავნა hosted open-weight მოდელზე, რომელსაც სურათის შეტანა არ აქვს. |
400 | invalid_request_error | <id> does not accept response_format | response_format გაიგზავნა hosted open-weight მოდელზე სტრუქტურირებული შედეგის გარეშე. |
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 ოჯახსა და hosted open-weight მოდელებზე. |