រំលងទៅមាតិកា
Chat Completions

Chat Completions

POST /v1/chat/completions ទទួលការសន្ទនា ហើយត្រឡប់សារបន្ទាប់របស់ម៉ូដែលក្នុងទ្រង់ទ្រាយ OpenAI Chat Completions។ ប្រើវាពី OpenAI SDK ណាមួយ ឬតាម HTTP ធម្មតា; ទំព័រនេះជាឯកសារយោងតាម field នីមួយៗ។

POST https://api.shannon-ai.com/v1/chat/completions

request តូចបំផុតគឺ model 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)

ចម្លើយគឺ JSON object មួយ៖

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
  }
}

Headers

Header របស់ request

Header តម្លៃ ការពិពណ៌នា
Authorization Bearer YOUR_API_KEY API key របស់អ្នក។ x-api-key: YOUR_API_KEY ត្រូវបានទទួលយកជំនួសវា នៅលើគ្រប់ endpoint។
Content-Type application/json ត្រូវការ។ តម្លៃផ្សេងទៀតត្រឡប់ 415។
x-request-id ជម្រើស។ id ផ្ទាល់ខ្លួនរបស់អ្នកសម្រាប់ request។ វាត្រឡប់មកវិញដូចដើមក្នុងចម្លើយ។

Header របស់ចម្លើយ

Header ការពិពណ៌នា
x-request-id លើរាល់ចម្លើយ រួមទាំងកំហុស និង stream៖ តម្លៃដែលអ្នកបានផ្ញើ ឬតួអក្សរ hexadecimal 12 នៅពេលអ្នកមិនបានផ្ញើ។ សូមដកស្រង់វានៅពេលរាយការណ៍បញ្ហា។
content-type application/json ឬ text/event-stream នៅពេល stream ជា true។

Request field

មានតែ messages ប៉ុណ្ណោះដែលត្រូវការ។ ជួរឈរ អនុវត្តដោយ ប្រាប់ម៉ូដែលដែល field ផ្លាស់ប្តូរចម្លើយ។ ម៉ូដែល open-weight ដែលបង្ហោះគឺ id ទាំងដប់ពីរក្នុងបញ្ជីម៉ូដែល; ក្រុម Shannon 3 គឺ shannon-3, shannon-3-pro, shannon-3.1 និង shannon-3.1-pro។ ម៉ូដែល និងតម្លៃ

Field ប្រភេទ លំនាំដើម ការពិពណ៌នា អនុវត្តដោយ
model string shannon-1.6-lite ម៉ូដែលដែលឆ្លើយ៖ id ពីបញ្ជីម៉ូដែល។ ផ្ញើវាជាមួយរាល់ request។ ការផ្គូផ្គងមិនប្រកាន់អក្សរធំតូចទេ។ id ដែលមិនត្រូវបានផ្សព្វផ្សាយត្រឡប់ 400 unknown model។ គ្រប់ម៉ូដែល
messages array ត្រូវការ។ ការសន្ទនា សារចាស់បំផុតនៅមុនគេ។ សូមមើល សារ ខាងក្រោម។ គ្រប់ម៉ូដែល
stream boolean false true ផ្ញើចម្លើយជា server-sent events ខណៈវាកំពុងត្រូវបានសរសេរ។ គ្រប់ម៉ូដែល
max_tokens integer 4096 ដែនកំណត់ខ្ពស់បំផុតនៃចម្លើយ គិតជា token។ តម្លៃក្រៅចន្លោះ 1 ដល់ 65,536 ត្រូវបានរុញចូលក្នុងចន្លោះនោះ។ វាក៏ជាចំនួនដែលត្រូវបម្រុងទុកពីសមតុល្យរបស់អ្នកអំឡុងពេល request ដំណើរការ។ សូមមើល ប្រវែង output ខាងក្រោម។ ម៉ូដែល 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 Sampling temperature។ លើម៉ូដែល open-weight ដែលបង្ហោះ លំនាំដើមគឺ 1 ហើយតម្លៃត្រូវបានរក្សាក្នុងចន្លោះ 0 ដល់ 2។ ម៉ូដែល open-weight ដែលបង្ហោះ, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Nucleus sampling។ តម្លៃត្រូវបានរក្សាក្នុងចន្លោះ 0 ដល់ 1។ ម៉ូដែល open-weight ដែលបង្ហោះ
seed integer Seed របស់ sampler ជាចំនួនគត់ណាមួយ។ បើគ្មានវា seed ត្រូវបានគណនាពីម៉ូដែល និងការសន្ទនា ដូច្នេះ request ដូចគ្នាដែលផ្ញើពីរដងប្រើ seed ដូចគ្នា។ ម៉ូដែល open-weight ដែលបង្ហោះ
stop string | array string ឬអារេនៃ string។ ប្រើរហូតដល់ 4។ ចម្លើយបញ្ចប់មុន string ដំបូងដែលលេចឡើង; អត្ថបទបញ្ឈប់ខ្លួនវាមិនត្រូវបានត្រឡប់មកវិញទេ។ ម៉ូដែល open-weight ដែលបង្ហោះ
reasoning_effort string high ចំនួនដែលម៉ូដែលវែកញែកមុនឆ្លើយ៖ off, low, medium ឬ high។ none និង minimal មានន័យថា off, default មានន័យថា medium, max មានន័យថា high។ តម្លៃផ្សេងទៀតត្រឡប់ 400។ ម៉ូដែល open-weight ដែលបង្ហោះ
reasoning object ការកំណត់ដូចគ្នាក្នុងទម្រង់ object៖ {"effort": "low"}។ នៅពេលផ្ញើទាំងពីរ reasoning_effort ត្រូវបានប្រើ។ ម៉ូដែល open-weight ដែលបង្ហោះ
tools array function ដែលម៉ូដែលអាចហៅ ម្នាក់ៗជា {"type": "function", "function": {"name", "description", "parameters"}}។ ការហៅរបស់ម៉ូដែលត្រឡប់មកក្នុង tool_calls; កូដរបស់អ្នកដំណើរការវា។ គ្រប់ម៉ូដែល
tool_choice string | object auto "auto" ឱ្យម៉ូដែលសម្រេចចិត្ត។ "required" បង្ខំឱ្យវាហៅ tool។ {"type": "function", "function": {"name": "…"}} បង្ខំឱ្យវាហៅ tool នោះ។ ម៉ូដែល open-weight ដែលបង្ហោះ
response_format object {"type": "json_object"} សម្រាប់ចម្លើយជា JSON ឬ {"type": "json_schema", "json_schema": {…}} សម្រាប់ចម្លើយដែលធ្វើតាម schema របស់អ្នក។ គ្រប់កម្រិត Shannon; ម៉ូដែល open-weight ដែលបង្ហោះ ដូចដែលបានរាយតាម id
web_search boolean false true ឱ្យម៉ូដែលស្វែងរកតាមវេបមុនឆ្លើយ។ shannon-1.6-*, shannon-2-*, ក្រុម Shannon 3

field OpenAI ផ្សេងទៀត ដូចជា n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store និង prompt_cache_key ត្រូវបានទទួលយក ដើម្បីឱ្យកូដ client ដែលមានស្រាប់ដំណើរការដូចដើម។ ពួកវាមិនផ្លាស់ប្តូរចម្លើយទេ៖ ជានិច្ចមាន choice តែមួយ ហើយ stream តែងបញ្ចប់ដោយ usage។

field ដែលមានប្រភេទ JSON មិនត្រឹមត្រូវ ឧទាហរណ៍ "max_tokens": "100" ត្រឡប់ 422។ request ដែលគ្មាន messages ក៏ដូច្នោះដែរ។

Tools, structured output, reasoning និងការស្វែងរកតាមវេប នីមួយៗមានទំព័រផ្ទាល់ខ្លួន៖ ការហៅមុខងារ, លទ្ធផលមានរចនាសម្ព័ន្ធ, កម្រិត reasoning, ស្វែងរកវេបក្នុងស្រាប់.

Request ដែលមានជម្រើស

Request នេះកំណត់សារ system, field sampling និងកម្រិត 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)

ចម្លើយមានរូបរាងដូចខាងលើ។ usage របស់វាបន្ថែមព័ត៌មានលម្អិតពីរលើម៉ូដែល open-weight ដែលបង្ហោះ៖ prompt token ដែលអានពី cache និង token ដែលចំណាយលើ reasoning។

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

ប្រវែង output

max_tokens ធ្វើពីរយ៉ាង។ ទីមួយ វាជាចំនួន token ដែលត្រូវបម្រុងទុកពីសមតុល្យរបស់អ្នកនៅពេល request ចាប់ផ្តើម។ នៅពេលចម្លើយពេញលេញ ចំនួននោះត្រូវបានជំនួសដោយ token ដែល request បានប្រើ។ ប្រសិនបើ max_tokens ធំជាងអ្វីដែលនៅសល់ក្នុងសមតុល្យរបស់អ្នក request ត្រឡប់ 429 Quota exceeded ទោះបីចម្លើយខ្លួនឯងអាចសមក៏ដោយ។ ផ្ញើ max_tokens ទាបជាងដើម្បីបម្រុងទុកតិចជាង។

shannon-coder-1 ត្រូវបានរាប់ខុសគ្នានៅលើ endpoint នេះ៖ រាល់ request ជាការហៅ Shannon Coder មួយរបស់គម្រោងអ្នក ហើយគ្មាន token ត្រូវបម្រុងទុកសម្រាប់វាទេ។ ដែនកំណត់ និងសមតុល្យ

ទីពីរ វាកំណត់ប្រវែងនៃចម្លើយលើម៉ូដែលទាំងនេះ៖

ម៉ូដែល អ្វីដែល 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។

សារ

សារនីមួយៗជា object ដែលមាន role និង content។ content ជា string ឬអារេនៃផ្នែក នៅពេលសារមានច្រើនជាងអត្ថបទ។

Role ការពិពណ៌នា អនុវត្តដោយ
system ការណែនាំសម្រាប់ម៉ូដែល។ ដាក់វាមុនគេ។ លើកម្រិត Shannon សារ system ដំបូងគឺសារដែលត្រូវបានប្រើ។ ម៉ូដែល open-weight ដែលបង្ហោះ, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer អានជា system។ ម៉ូដែល open-weight ដែលបង្ហោះ
user អ្វីដែលអ្នកសួរ។ លើកម្រិត Shannon សារ user ចុងក្រោយគឺ prompt ហើយសារមុនវាជាប្រវត្តិ។ គ្រប់ម៉ូដែល
assistant ចម្លើយមុនៗរបស់ម៉ូដែល។ រក្សា tool_calls របស់វា នៅពេលអ្នកផ្ញើលទ្ធផល tool បន្ទាប់ពីវា។ គ្រប់ម៉ូដែល
tool លទ្ធផលនៃការហៅ tool៖ tool_call_id មាន id នៃការហៅ ហើយ content មានលទ្ធផលជា string។ គ្រប់ម៉ូដែល

ជាមួយ id ក្នុងក្រុម Shannon 3 សូមដាក់ការណែនាំដែលត្រូវតែគោរព ចូលក្នុងសារ user។

លើកម្រិត Shannon request ដែលគ្មានអត្ថបទ user និងគ្មាន 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 ដែលបង្ហោះ ដែលមានបញ្ជីថាទទួល image input
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} ឯកសារ (PDF, Word, PowerPoint ឬ Excel) ក្នុងទម្រង់ base64 ឬតាមរយៈ URL។ ក្រុម Shannon 3

ទំហំ ដែនកំណត់ និងបញ្ជីពេញលេញនៃទម្រង់មានទំព័រផ្ទាល់ខ្លួន។ រូបភាព និងឯកសារ

Object ចម្លើយ

Field ប្រភេទ ការពិពណ៌នា
id string chatcmpl- បន្តដោយតួអក្សរ hexadecimal 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 វាជា null លើកម្រិត Shannon; ម៉ូដែល open-weight ដែលបង្ហោះអាចផ្ញើអត្ថបទក្បែរការហៅ។
choices[0].message.reasoning_content string | null ការវែកញែកដែលម៉ូដែលសរសេរមុនចម្លើយ ឬ null នៅពេលគ្មាន។
choices[0].message.tool_calls array មានតែនៅពេលម៉ូដែលហៅ tools។ ធាតុនីមួយៗមាន id, type function និង function ដែលមាន name និង arguments ជា string JSON។
choices[0].message.annotations array តែលើ request ដែលមាន web_search: true ហើយការស្វែងរករបស់វារកឃើញអ្វីមួយប៉ុណ្ណោះ។ មួយ url_citation សម្រាប់រាល់ប្រភពដែលសញ្ញាសម្គាល់ក្នុង content បានដាក់ឈ្មោះ ដោយមាន url, title, start_index និង end_index (ទីតាំងរបស់សញ្ញាសម្គាល់ រាប់ជាតួអក្សរ ចុងមិនរាប់បញ្ចូល)។
choices[0].finish_reason string មូលហេតុដែលចម្លើយបញ្ចប់។ សូមមើល មូលហេតុនៃការបញ្ចប់។
usage object token នៃ request។ សូមមើល ការប្រើប្រាស់។
sources array តែលើ request ដែលមាន web_search: true ហើយការស្វែងរករបស់វារកឃើញអ្វីមួយប៉ុណ្ណោះ៖ លទ្ធផលដែលបានប្រគល់ឱ្យម៉ូដែល នីមួយៗមាន index, title និង url។ [1] ក្នុងចម្លើយគឺជាធាតុដែលមាន index 1។

មូលហេតុនៃការបញ្ចប់

finish_reason ការពិពណ៌នា
stop ម៉ូដែលបានបញ្ចប់ចម្លើយរបស់វា ឬ string stop បានលេចឡើង។
tool_calls ម៉ូដែលហៅ tool មួយ ឬច្រើន។ សូមដំណើរការពួកវា ហើយផ្ញើលទ្ធផលក្នុងសារ tool។
length ចម្លើយត្រូវបានកាត់ត្រង់ដែនកំណត់ output។ ត្រូវបានរាយការណ៍ក្នុង stream របស់ shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 និងក្រុម Shannon 3។

ចម្លើយដែលមិនមែន stream រាយការណ៍ stop ឬ tool_calls។

ការប្រើប្រាស់

Field ប្រភេទ ការពិពណ៌នា មានលើ
usage.prompt_tokens integer Input token។ គ្រប់ម៉ូដែល
usage.completion_tokens integer Output token៖ reasoning, ចម្លើយ និងការហៅ tool រួមគ្នា។ គ្រប់ម៉ូដែល
usage.total_tokens integer prompt_tokens បូក completion_tokens។ គ្រប់ម៉ូដែល
usage.prompt_tokens_details.cached_tokens integer ផ្នែកនៃ prompt_tokens ដែលអានពី prompt cache។ ម៉ូដែល open-weight ដែលបង្ហោះ
usage.completion_tokens_details.reasoning_tokens integer ផ្នែកនៃ completion_tokens ដែលត្រូវបានចំណាយលើ reasoning។ ម៉ូដែល open-weight ដែលបង្ហោះ

លើម៉ូដែល open-weight ដែលបង្ហោះ prompt_tokens គឺសារ និងនិយមន័យ tool របស់អ្នក ដែលរាប់ដោយ tokenizer របស់ម៉ូដែលខ្លួនឯង បូកនឹង token នៃរូបភាពណាមួយ។ endpoint រាប់ token ត្រឡប់លេខដូចគ្នាមុនអ្នកផ្ញើ។ ការរាប់ token

លើកម្រិត Shannon prompt_tokens រាប់អ្វីៗទាំងអស់ដែលម៉ូដែលបានអានដើម្បីសរសេរចម្លើយ ដូច្នេះវាធំជាងអត្ថបទនៃសាររបស់អ្នកតែម្នាក់ឯង។

Streaming

ជាមួយ stream កំណត់ជា true ចម្លើយមកដល់ជា event chat.completion.chunk ហើយបញ្ចប់ដោយ data: [DONE]។ chunk ចុងក្រោយមុនវាមាន finish_reason និង usage; មិនត្រូវការ stream_options ទេ។ រូបរាង chunk បន្ទាត់ keep-alive និងកំហុសក្នុង stream មានទំព័រផ្ទាល់ខ្លួន។ ស្ទ្រីម

កំហុស

កំហុសគឺជា JSON object ដែលមានសមាជិក error។ ការត្រួតពិនិត្យដំណើរការតាមលំដាប់នេះ៖ API key, ខ្លឹមសារ request, model id បន្ទាប់មកសមតុល្យ។ តារាងរាយអ្វីដែល endpoint នេះឆ្លើយតបញឹកញាប់បំផុត។ បញ្ជីពេញលេញ ជាមួយអ្វីដែលត្រូវព្យាយាមម្តងទៀត មានទំព័រផ្ទាល់ខ្លួន។ ការគ្រប់គ្រងកំហុស

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
ស្ថានភាព ប្រភេទ សារ ពេលណា
401 authentication_error Missing authentication
Invalid API key
មិនបានផ្ញើ API key ឬ key មិនស្គាល់ ឬត្រូវបានដកហូត។
400 invalid_request_error unknown model: <id> model មិនមែនជា id ដែលបានផ្សព្វផ្សាយទេ។
400 invalid_request_error No user message provided កម្រិត Shannon៖ request មិនមានអត្ថបទ user និងគ្មាន tools។
400 invalid_request_error <id> does not accept image input ផ្នែករូបភាពត្រូវបានផ្ញើទៅម៉ូដែល open-weight ដែលបង្ហោះ ដែលគ្មាន image input។
400 invalid_request_error <id> does not accept response_format response_format ត្រូវបានផ្ញើទៅម៉ូដែល open-weight ដែលបង្ហោះ ដែលគ្មាន structured output។
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 ឬ field មួយមានប្រភេទ 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 request ក្នុងមួយនាទីលើគណនីរបស់អ្នក។
500 server_error The model backend failed to answer. Please retry. ម៉ូដែលមិនបានបង្កើតចម្លើយទេ។ សូមផ្ញើ request ម្តងទៀត។
502 api_error The model backend failed to answer. Please retry. ដូចគ្នា លើក្រុម Shannon 3 និងម៉ូដែល open-weight ដែលបង្ហោះ។