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 بدلاً منه على كل نقطة نهاية. |
Content-Type | application/json | مطلوبة. أي قيمة أخرى تعيد 415. |
x-request-id | اختيارية. معرّفك الخاص للطلب. يعود دون تغيير في الرد. |
ترويسات الرد
| الترويسة | الوصف |
|---|---|
x-request-id | في كل رد، بما فيه الأخطاء وعمليات البث: القيمة التي أرسلتها، أو 12 رمزاً سداسياً عشرياً إن لم ترسل شيئاً. اذكرها عند الإبلاغ عن مشكلة. |
content-type | application/json، أو text/event-stream عندما تكون stream هي true. |
حقول الطلب
الحقل messages وحده مطلوب. يسمّي العمود يطبّقه النماذج التي يغيّر فيها الحقل الرد. النماذج المفتوحة الأوزان المستضافة هي المعرّفات الاثنا عشر في قائمة النماذج؛ وعائلة 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 | الحد الأعلى للرد، بالـ tokens. تُنقل القيمة الخارجة عن النطاق من 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 | أخذ العينات النووي (nucleus sampling). تُحصر القيم بين 0 و1. | النماذج المفتوحة الأوزان المستضافة |
seed | integer | بذرة جهاز أخذ العينات، أي عدد صحيح. من دونها تُشتق البذرة من النموذج والمحادثة، لذا يستخدم الطلب نفسه المرسل مرتين البذرة نفسها. | النماذج المفتوحة الأوزان المستضافة | |
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 | {"type": "json_object"} للحصول على إجابة JSON، أو {"type": "json_schema", "json_schema": {…}} لإجابة تتبع مخططك. | جميع مستويات Shannon؛ والنماذج المفتوحة الأوزان المستضافة كما هو مبيّن لكل معرّف | |
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، حتى تعمل شيفرة العميل الحالية دون تغيير. لا تغيّر هذه الحقول الرد: يوجد دائماً اختيار واحد، وينتهي البث دائماً بالاستخدام.
الحقل الذي له نوع JSON خاطئ، مثل "max_tokens": "100"، يعيد 422. وكذلك الطلب الذي لا يحتوي على messages.
للأدوات والمخرجات المنظمة والاستدلال والبحث في الويب صفحة خاصة بكل منها: استدعاء الدوال, مخرجات منظمة, جهد الاستدلال, بحث ويب مدمج.
طلب مع خيارات
يحدد هذا الطلب رسالة نظام وحقول أخذ العينات وجهد الاستدلال. ويستخدم نموذجاً مفتوح الأوزان مستضافاً، يطبّق كل ذلك.
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 فيه تفصيلين في النماذج المفتوحة الأوزان المستضافة: tokens المطالبة المقروءة من ذاكرة التخزين المؤقت وtokens المنفقة على الاستدلال.
{
"usage": {
"prompt_tokens": 31,
"completion_tokens": 62,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 21
}
}
} طول المخرجات
يؤدي max_tokens أمرين. الأول، أنه عدد tokens المحجوزة من رصيدك عند بدء الطلب. وعند اكتمال الرد يُستبدل ذلك المقدار بـ tokens التي استخدمها الطلب فعلاً. إذا كان max_tokens أكبر من المتبقي من رصيدك، يعيد الطلب 429 Quota exceeded حتى لو كان الرد نفسه سيتسع. أرسل max_tokens أقل لحجز مقدار أقل.
يُحتسب shannon-coder-1 بشكل مختلف على نقطة النهاية هذه: كل طلب هو أحد استدعاءات Shannon Coder في خطتك، ولا تُحجز له أي tokens. الحدود والرصيد
والثاني، أنه يحدّ طول الرد في هذه النماذج:
| النماذج | ما يفعله 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 معرّف الاستدعاء ويحمل content النتيجة كسلسلة نصية. | جميع النماذج |
مع معرّف من عائلة Shannon 3، ضع التعليمات التي يجب الالتزام بها في رسالة user.
في مستويات Shannon يعيد الطلب الذي لا نص للمستخدم فيه ولا tools الخطأ 400 No user message provided.
أجزاء المحتوى
| الجزء | الوصف | متاح على |
|---|---|---|
{"type": "text", "text": "…"} | نص عادي. | جميع النماذج |
{"type": "image_url", "image_url": {"url": "…"}} | صورة، كرابط data: بمحتوى base64 أو كرابط http(s). | عائلة 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 | المعرّف القياسي للنموذج الذي أجاب. وقد يختلف في طريقة كتابته عن المعرّف الذي أرسلته. |
choices | array | دائماً اختيار واحد بالضبط، قيمة index فيه 0. |
choices[0].message.role | string | دائماً assistant. |
choices[0].message.content | string | null | نص الإجابة. مع tool_calls تكون قيمته null في مستويات Shannon؛ ويمكن للنماذج المفتوحة الأوزان المستضافة إرسال نص بجانب الاستدعاءات. |
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 | tokens الطلب. انظر الاستخدام. |
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 | tokens المدخلة. | جميع النماذج |
usage.completion_tokens | integer | tokens المخرجة: الاستدلال والإجابة واستدعاءات الأدوات معاً. | جميع النماذج |
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 هي رسائلك وتعريفات الأدوات محسوبة بمجزّئ النموذج نفسه (tokenizer)، مضافاً إليها tokens أي صور. وتعيد نقاط نهاية عدّ tokens الرقم نفسه قبل أن ترسل. عدّ الـ tokens
في مستويات Shannon، تحسب prompt_tokens كل ما قرأه النموذج ليكتب الرد، لذا فهي أكبر من نص رسائلك وحده.
البث
عند ضبط stream على true يصل الرد كأحداث chat.completion.chunk وينتهي بـ data: [DONE]. يحمل الجزء الأخير قبله finish_reason وusage؛ ولا حاجة إلى stream_options. لأشكال الأجزاء وأسطر إبقاء الاتصال حياً والأخطاء داخل البث صفحة خاصة. البث
الأخطاء
الخطأ كائن JSON فيه عضو error. تجري الفحوص بهذا الترتيب: مفتاح API، ثم نص الطلب، ثم معرّف النموذج، ثم الرصيد. يسرد الجدول ما تعيده نقطة النهاية هذه في الغالب. أما القائمة الكاملة، مع ما يجب إعادة محاولته، فلها صفحتها الخاصة. معالجة الأخطاء
{
"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 | أُرسل جزء صورة إلى نموذج مفتوح الأوزان مستضاف لا يدعم إدخال الصور. |
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. | الحماية من الإغراق: أكثر من 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 والنماذج المفتوحة الأوزان المستضافة. |