Chat Completions
POST /v1/chat/completions מקבל שיחה ומחזיר את ההודעה הבאה של המודל בפורמט OpenAI Chat Completions. השתמשו בו מכל OpenAI SDK או ב-HTTP רגיל; הדף הזה הוא מדריך עזר שדה אחר שדה.
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": "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 שלכם. x-api-key: YOUR_API_KEY מתקבל במקומו בכל endpoint. |
Content-Type | application/json | חובה. כל ערך אחר מחזיר 415. |
x-request-id | אופציונלי. המזהה שלכם לבקשה. הוא חוזר ללא שינוי בתשובה. |
כותרות תשובה
| כותרת | תיאור |
|---|---|
x-request-id | בכל תשובה, כולל שגיאות ו-streams: הערך ששלחתם, או 12 תווים הקסדצימליים כששלחתם ערך. ציינו אותו כשאתם מדווחים על בעיה. |
content-type | application/json, או text/event-stream כש-stream הוא true. |
שדות בקשה
רק messages הוא חובה. העמודה מופעל על ידי מציינת את המודלים שבהם שדה משנה את התשובה. מודלי ה-open-weight המתארחים הם שנים-עשר המזהים ברשימת המודלים; משפחת Shannon 3 היא shannon-3, shannon-3-pro, shannon-3.1 ו-shannon-3.1-pro. מודלים ותמחור
| שדה | סוג | ברירת מחדל | תיאור | מופעל על ידי |
|---|---|---|---|---|
model | string | shannon-1.6-lite | המודל שעונה: מזהה מרשימת המודלים. שלחו אותו בכל בקשה. ההתאמה אינה תלויה באותיות גדולות או קטנות. מזהה שלא פורסם מחזיר 400 unknown model. | כל המודלים |
messages | array | חובה. השיחה, ההודעה הישנה ביותר ראשונה. ראו הודעות בהמשך. | כל המודלים | |
stream | boolean | false | true שולח את התשובה כ-server-sent events בזמן שהיא נכתבת. | כל המודלים |
max_tokens | integer | 4096 | הגבול העליון של התשובה, בטוקנים. ערך מחוץ לטווח 1 עד 65,536 מועבר לתוך הטווח. זו גם הכמות שמופרשת מהיתרה שלכם בזמן שהבקשה רצה. ראו אורך הפלט בהמשך. | מודלי open-weight מתארחים, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
max_completion_tokens | integer | זהה ל-max_tokens. כששניהם נשלחים, משתמשים ב-max_tokens. | מודלי open-weight מתארחים, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
temperature | number | טמפרטורת הדגימה. במודלי ה-open-weight המתארחים ברירת המחדל היא 1 והערכים נשמרים בין 0 ל-2. | מודלי open-weight מתארחים, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | 0.95 | דגימת Nucleus. הערכים נשמרים בין 0 ל-1. | מודלי open-weight מתארחים |
seed | integer | הזרע (seed) של הדוגם, כל מספר שלם. בלעדיו הזרע נגזר מהמודל ומהשיחה, כך שאותה בקשה שנשלחת פעמיים משתמשת באותו זרע. | מודלי open-weight מתארחים | |
stop | string | array | מחרוזת או מערך של מחרוזות. עד 4 נמצאות בשימוש. התשובה מסתיימת לפני הראשונה שמופיעה; טקסט העצירה עצמו אינו מוחזר. | מודלי open-weight מתארחים | |
reasoning_effort | string | high | כמה המודל מנמק לפני שהוא עונה: off, low, medium או high. none ו-minimal משמעם off, default משמעו medium, max משמעו high. כל ערך אחר מחזיר 400. | מודלי open-weight מתארחים |
reasoning | object | אותה הגדרה בצורת אובייקט: {"effort": "low"}. כששניהם נשלחים, משתמשים ב-reasoning_effort. | מודלי open-weight מתארחים | |
tools | array | הפונקציות שהמודל רשאי לקרוא להן, כל אחת כ-{"type": "function", "function": {"name", "description", "parameters"}}. הקריאות של המודל חוזרות ב-tool_calls; הקוד שלכם מריץ אותן. | כל המודלים | |
tool_choice | string | object | auto | "auto" נותן למודל להחליט. "required" מחייב אותו לקרוא לכלי. {"type": "function", "function": {"name": "…"}} מחייב אותו לקרוא לכלי הזה. | מודלי open-weight מתארחים |
response_format | object | {"type": "json_object"} לתשובת JSON, או {"type": "json_schema", "json_schema": {…}} לתשובה שעוקבת אחרי הסכמה שלכם. | כל דרגי Shannon; מודלי open-weight מתארחים כפי שמפורט לכל מזהה | |
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 אחד, ו-stream תמיד מסתיים בנתוני שימוש.
שדה עם סוג JSON שגוי, למשל "max_tokens": "100", מחזיר 422. כך גם בקשה בלי messages.
לכלים, לפלט מובנה, ל-reasoning ולחיפוש ברשת יש לכל אחד דף משלו: קריאת פונקציות, פלט מובנה, רמת מאמץ ה-reasoning, חיפוש ווב מובנה.
בקשה עם אפשרויות
הבקשה הזו קובעת הודעת system, את שדות הדגימה ואת רמת המאמץ של ה-reasoning. היא משתמשת במודל 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 שלה מוסיף שני פרטים במודלי ה-open-weight המתארחים: טוקני הפרומפט שנקראו מהמטמון והטוקנים שהושקעו ב-reasoning.
{
"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 | התשובה נעצרת כשהיא מגיעה למגבלה. stream מסתיים אז עם finish_reason מסוג length. |
| מודלי open-weight מתארחים | טקסט התשובה נעצר ב-max_tokens. ה-reasoning אינו נספר בו. ערכים מתחת ל-256 פועלים כ-256. |
בלי max_tokens או max_completion_tokens הערך הוא 4,096. ב-shannon-coder-1 הוא 65,536.
הודעות
כל הודעה היא אובייקט עם role ו-content. ה-content הוא מחרוזת, או מערך של חלקים כשההודעה נושאת יותר מטקסט.
| תפקיד | תיאור | מופעל על ידי |
|---|---|---|
system | הוראות למודל. שימו אותה ראשונה. בדרגי Shannon הודעת ה-system הראשונה היא זו שבשימוש. | מודלי open-weight מתארחים, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
developer | נקרא כ-system. | מודלי open-weight מתארחים |
user | מה שאתם שואלים. בדרגי Shannon הודעת ה-user האחרונה היא הפרומפט וההודעות שלפניה הן ההיסטוריה. | כל המודלים |
assistant | תשובות קודמות של המודל. שמרו את ה-tool_calls שלו כשאתם שולחים אחריו תוצאת כלי. | כל המודלים |
tool | תוצאה של קריאה לכלי: tool_call_id מכיל את מזהה הקריאה ו-content את התוצאה כמחרוזת. | כל המודלים |
עם מזהה ממשפחת Shannon 3, שימו הוראות שחייבות להתקיים בהודעת ה-user.
בדרגי Shannon בקשה בלי טקסט משתמש ובלי tools מחזירה 400 No user message provided.
חלקי תוכן
| חלק | תיאור | זמין ב |
|---|---|---|
{"type": "text", "text": "…"} | טקסט רגיל. | כל המודלים |
{"type": "image_url", "image_url": {"url": "…"}} | תמונה, כ-URL מסוג data: עם תוכן base64 או כ-URL מסוג http(s). | משפחת Shannon 3, shannon-1.6-lite, shannon-1.6-pro, ומודלי ה-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 | המזהה הקנוני של המודל שענה. הכתיב שלו יכול להיות שונה מהמזהה ששלחתם. |
choices | array | תמיד choice אחד בדיוק, עם index 0. |
choices[0].message.role | string | תמיד assistant. |
choices[0].message.content | string | null | טקסט התשובה. עם tool_calls הוא null בדרגי Shannon; מודלי ה-open-weight המתארחים יכולים לשלוח טקסט לצד הקריאות. |
choices[0].message.reasoning_content | string | null | ה-reasoning שהמודל כתב לפני התשובה, או 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 | התשובה נחתכה במגבלת הפלט. מדווח ב-streams של shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 ומשפחת Shannon 3. |
תשובה שאינה ב-streaming מדווחת stop או tool_calls.
שימוש
| שדה | סוג | תיאור | זמין ב |
|---|---|---|---|
usage.prompt_tokens | integer | טוקני קלט. | כל המודלים |
usage.completion_tokens | integer | טוקני פלט: reasoning, תשובה וקריאות לכלים יחד. | כל המודלים |
usage.total_tokens | integer | prompt_tokens ועוד completion_tokens. | כל המודלים |
usage.prompt_tokens_details.cached_tokens | integer | החלק מ-prompt_tokens שנקרא ממטמון הפרומפט. | מודלי open-weight מתארחים |
usage.completion_tokens_details.reasoning_tokens | integer | החלק מ-completion_tokens שהושקע ב-reasoning. | מודלי open-weight מתארחים |
במודלי ה-open-weight המתארחים, prompt_tokens הוא ההודעות והגדרות הכלים שלכם נספרים עם ה-tokenizer של המודל עצמו, ועוד הטוקנים של תמונות. ה-endpoints לספירת טוקנים מחזירים את אותו מספר לפני השליחה. ספירת טוקנים
בדרגי Shannon, prompt_tokens סופר את כל מה שהמודל קרא כדי לכתוב את התשובה, ולכן הוא גדול מטקסט ההודעות שלכם לבדו.
Streaming
כש-stream מוגדר ל-true התשובה מגיעה כאירועי chat.completion.chunk ומסתיימת ב-data: [DONE]. ה-chunk האחרון לפניו נושא finish_reason ו-usage; אין צורך ב-stream_options. לצורות ה-chunk, לשורות keep-alive ולשגיאות בתוך stream יש דף משלהן. הזרמה
שגיאות
שגיאה היא אובייקט JSON עם איבר error. הבדיקות רצות בסדר הזה: מפתח API, גוף הבקשה, מזהה המודל, ואז היתרה. הטבלה מפרטת את מה שה-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 אינו מזהה שפורסם. |
400 | invalid_request_error | No user message provided | דרגי Shannon: בבקשה אין טקסט משתמש ואין tools. |
400 | invalid_request_error | <id> does not accept image input | חלק תמונה נשלח למודל open-weight מתארח ללא קלט תמונה. |
400 | invalid_request_error | <id> does not accept response_format | response_format נשלח למודל 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. | הגנת הצפה: יותר מ-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 ובמודלי ה-open-weight המתארחים. |