رفتن به محتوا
Chat Completions

Chat Completions

POST /v1/chat/completions یک گفتگو می‌گیرد و پیام بعدی مدل را با فرمت OpenAI Chat Completions برمی‌گرداند. از هر SDK مربوط به OpenAI یا با 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)

پاسخ یک شیء JSON است:

200 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 روی هر پاسخ، از جمله خطاها و streamها: مقداری که فرستادید، یا 12 نویسه هگزادسیمال وقتی چیزی نفرستاده باشید. هنگام گزارش مشکل آن را ذکر کنید.
content-type application/json، یا وقتی stream برابر true است text/event-stream.

فیلدهای درخواست

فقط 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 نمونه‌بردار، هر عدد صحیح. بدون آن، seed از مدل و گفتگو مشتق می‌شود، پس یک درخواست یکسان که دو بار فرستاده شود از یک 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": {…}} برای پاسخی که از 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 همیشه با usage پایان می‌یابد.

فیلدی با نوع JSON نادرست، برای مثال "max_tokens": "100"، 422 برمی‌گرداند. درخواست بدون messages هم همین‌طور.

ابزارها، خروجی ساختاریافته، استدلال و جستجوی وب هرکدام صفحه خودشان را دارند: فراخوانی توابع, خروجی‌های ساختاریافته, میزان تلاش استدلال, جستجوی وب داخلی.

درخواست با گزینه‌ها

این درخواست یک پیام system، فیلدهای نمونه‌برداری و میزان تلاش استدلال را تنظیم می‌کند. از یک مدل 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)

پاسخ همان شکل بالا را دارد. usage آن در مدل‌های open-weight میزبانی‌شده دو جزئیات اضافه می‌کند: توکن‌های پرامپت خوانده‌شده از کش و توکن‌های صرف‌شده برای استدلال.

200 JSON
{
  "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 متوقف می‌شود. استدلال در آن شمرده نمی‌شود. مقادیر زیر 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 در سطوح Shannon برابر null است؛ مدل‌های 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 که جستجویش چیزی پیدا کرده باشد. برای هر منبعی که یک نشانه در content نام می‌برد یک url_citation، با 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 پاسخ در حد خروجی بریده شد. در streamهای shannon-1.6-lite، shannon-1.6-pro، shannon-coder-1 و خانواده Shannon 3 گزارش می‌شود.

پاسخی که stream نمی‌شود 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 که از کش پرامپت خوانده شده است. مدل‌های open-weight میزبانی‌شده
usage.completion_tokens_details.reasoning_tokens integer بخشی از completion_tokens که صرف استدلال شده است. مدل‌های open-weight میزبانی‌شده

در مدل‌های open-weight میزبانی‌شده، prompt_tokens پیام‌ها و تعریف ابزارهای شماست که با توکنایزر خود مدل شمرده می‌شود، به‌علاوه توکن‌های تصاویر. endpointهای شمارش توکن پیش از ارسال همین عدد را برمی‌گردانند. شمارش توکن

در سطوح 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 برمی‌گرداند فهرست می‌کند. فهرست کامل، همراه با اینکه کدام را دوباره امتحان کنید، صفحه خودش را دارد. مدیریت خطا

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
وضعیت نوع پیام زمان
401 authentication_error Missing authentication
Invalid 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. محافظت در برابر هجوم درخواست (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 و مدل‌های open-weight میزبانی‌شده.