Langsung ke konten
Chat Completions

Chat Completions

POST /v1/chat/completions menerima sebuah percakapan dan mengembalikan pesan berikutnya dari model dalam format OpenAI Chat Completions. Gunakan dari SDK OpenAI mana pun atau lewat HTTP biasa; halaman ini adalah referensi field demi field.

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

Permintaan terkecil adalah id model dan satu pesan 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)

Balasannya adalah satu objek 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
  }
}

Header

Header permintaan

Header Nilai Deskripsi
Authorization Bearer YOUR_API_KEY Kunci API Anda. x-api-key: YOUR_API_KEY diterima sebagai penggantinya di setiap endpoint.
Content-Type application/json Wajib. Nilai lain mengembalikan 415.
x-request-id Opsional. Id Anda sendiri untuk permintaan. Id ini dikembalikan tanpa perubahan pada balasan.

Header balasan

Header Deskripsi
x-request-id Ada di setiap balasan, termasuk error dan stream: nilai yang Anda kirim, atau 12 karakter heksadesimal jika Anda tidak mengirim. Sertakan saat Anda melaporkan masalah.
content-type application/json, atau text/event-stream ketika stream bernilai true.

Field permintaan

Hanya messages yang wajib. Kolom Diterapkan oleh menyebutkan model tempat sebuah field mengubah balasan. Model open-weight hosted adalah dua belas id dalam daftar model; keluarga Shannon 3 adalah shannon-3, shannon-3-pro, shannon-3.1, dan shannon-3.1-pro. Model & harga

Field Tipe Default Deskripsi Diterapkan oleh
model string shannon-1.6-lite Model yang menjawab: id dari daftar model. Kirim di setiap permintaan. Pencocokan tidak membedakan huruf besar dan kecil. Id yang tidak dipublikasikan mengembalikan 400 unknown model. Semua model
messages array Wajib. Percakapan, dari pesan terlama. Lihat Pesan di bawah. Semua model
stream boolean false true mengirim balasan sebagai server-sent events selagi ditulis. Semua model
max_tokens integer 4096 Batas atas balasan, dalam token. Nilai di luar rentang 1 sampai 65,536 dipindahkan ke dalam rentang itu. Nilai ini juga jumlah yang dicadangkan dari saldo Anda selama permintaan berjalan. Lihat Panjang output di bawah. Model open-weight hosted, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Sama seperti max_tokens. Jika keduanya dikirim, max_tokens yang dipakai. Model open-weight hosted, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Temperature sampling. Pada model open-weight hosted, defaultnya 1 dan nilai dijaga di antara 0 dan 2. Model open-weight hosted, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Nucleus sampling. Nilai dijaga di antara 0 dan 1. Model open-weight hosted
seed integer Seed untuk sampler, bilangan bulat apa pun. Tanpanya, seed diturunkan dari model dan percakapan, sehingga permintaan yang sama yang dikirim dua kali memakai seed yang sama. Model open-weight hosted
stop string | array String atau array string. Hingga 4 yang dipakai. Jawaban berakhir sebelum string pertama yang muncul; teks penghentinya sendiri tidak dikembalikan. Model open-weight hosted
reasoning_effort string high Seberapa banyak model bernalar sebelum menjawab: off, low, medium, atau high. none dan minimal berarti off, default berarti medium, max berarti high. Nilai lain mengembalikan 400. Model open-weight hosted
reasoning object Pengaturan yang sama dalam bentuk objek: {"effort": "low"}. Jika keduanya dikirim, reasoning_effort yang dipakai. Model open-weight hosted
tools array Fungsi yang boleh dipanggil model, masing-masing sebagai {"type": "function", "function": {"name", "description", "parameters"}}. Panggilan dari model kembali di tool_calls; kode Anda yang menjalankannya. Semua model
tool_choice string | object auto "auto" membiarkan model memutuskan. "required" membuatnya memanggil sebuah tool. {"type": "function", "function": {"name": "…"}} membuatnya memanggil tool tersebut. Model open-weight hosted
response_format object {"type": "json_object"} untuk jawaban JSON, atau {"type": "json_schema", "json_schema": {…}} untuk jawaban yang mengikuti schema Anda. Semua tingkat Shannon; model open-weight hosted sesuai daftar per id
web_search boolean false true membiarkan model mencari di web sebelum menjawab. shannon-1.6-*, shannon-2-*, keluarga Shannon 3

Field OpenAI lainnya, seperti n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store, dan prompt_cache_key, diterima agar kode klien yang ada berjalan tanpa perubahan. Semuanya tidak mengubah balasan: selalu hanya ada satu choice, dan stream selalu diakhiri dengan usage.

Field dengan tipe JSON yang salah, misalnya "max_tokens": "100", mengembalikan 422. Permintaan tanpa messages juga demikian.

Tools, output terstruktur, reasoning, dan pencarian web masing-masing punya halaman sendiri: Pemanggilan fungsi, Output Terstruktur, Reasoning effort, Pencarian Web Terintegrasi.

Permintaan dengan opsi

Permintaan ini mengatur pesan system, field sampling, dan reasoning effort. Permintaan ini memakai model open-weight hosted, yang menerapkan semuanya.

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)

Balasan berbentuk sama seperti di atas. usage-nya menambahkan dua rincian pada model open-weight hosted: token prompt yang dibaca dari cache dan token yang dipakai untuk 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
    }
  }
}

Panjang output

max_tokens melakukan dua hal. Pertama, itu adalah jumlah token yang dicadangkan dari saldo Anda saat permintaan dimulai. Ketika balasan selesai, jumlah itu diganti dengan token yang dipakai permintaan. Jika max_tokens lebih besar daripada sisa saldo Anda, permintaan mengembalikan 429 Quota exceeded meskipun balasannya sendiri sebenarnya muat. Kirim max_tokens yang lebih rendah untuk mencadangkan lebih sedikit.

shannon-coder-1 dihitung secara berbeda di endpoint ini: setiap permintaan adalah satu panggilan Shannon Coder dari paket Anda, dan tidak ada token yang dicadangkan untuknya. Batas dan saldo

Kedua, nilai ini membatasi panjang balasan pada model-model berikut:

Model Fungsi max_tokens
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Balasan berhenti ketika mencapai batas. Stream kemudian berakhir dengan finish_reason length.
Model open-weight hosted Teks jawaban berhenti pada max_tokens. Reasoning tidak dihitung terhadapnya. Nilai di bawah 256 diperlakukan sebagai 256.

Tanpa max_tokens atau max_completion_tokens, nilainya 4,096. Pada shannon-coder-1 nilainya 65,536.

Pesan

Setiap pesan adalah objek dengan role dan content. content berupa string, atau array bagian ketika pesan membawa lebih dari teks.

Role Deskripsi Diterapkan oleh
system Instruksi untuk model. Taruh paling awal. Pada tingkat Shannon, pesan system pertama yang dipakai. Model open-weight hosted, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Dibaca sebagai system. Model open-weight hosted
user Apa yang Anda tanyakan. Pada tingkat Shannon, pesan user terakhir adalah prompt dan pesan sebelumnya adalah riwayat. Semua model
assistant Balasan model sebelumnya. Pertahankan tool_calls-nya ketika Anda mengirim hasil tool setelahnya. Semua model
tool Hasil panggilan tool: tool_call_id berisi id panggilan dan content berisi hasilnya sebagai string. Semua model

Dengan id keluarga Shannon 3, taruh instruksi yang harus dipatuhi ke dalam pesan user.

Pada tingkat Shannon, permintaan tanpa teks pengguna dan tanpa tools mengembalikan 400 No user message provided.

Bagian konten

Bagian Deskripsi Tersedia di
{"type": "text", "text": "…"} Teks biasa. Semua model
{"type": "image_url", "image_url": {"url": "…"}} Gambar, sebagai URL data: dengan konten base64 atau sebagai URL http(s). Keluarga Shannon 3, shannon-1.6-lite, shannon-1.6-pro, dan model open-weight hosted yang mencantumkan input gambar
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Dokumen (PDF, Word, PowerPoint, atau Excel), sebagai base64 atau lewat URL. Keluarga Shannon 3

Ukuran, batas, dan daftar lengkap bentuknya punya halaman sendiri. Gambar dan file

Objek balasan

Field Tipe Deskripsi
id string chatcmpl- diikuti 32 karakter heksadesimal.
object string Selalu chat.completion.
created integer Waktu balasan, dalam detik Unix.
model string Id kanonis dari model yang menjawab. Ejaannya bisa berbeda dari id yang Anda kirim.
choices array Selalu tepat satu choice, dengan index 0.
choices[0].message.role string Selalu assistant.
choices[0].message.content string | null Teks jawaban. Dengan tool_calls, nilainya null pada tingkat Shannon; model open-weight hosted dapat mengirim teks di samping panggilan.
choices[0].message.reasoning_content string | null Penalaran yang ditulis model sebelum jawaban, atau null jika tidak ada.
choices[0].message.tool_calls array Hanya ada ketika model memanggil tool. Setiap entri memiliki id, type function, dan function dengan name serta arguments sebagai string JSON.
choices[0].message.annotations array Hanya pada permintaan dengan web_search: true yang pencariannya menemukan sesuatu. Satu url_citation untuk setiap sumber yang disebut oleh penanda di content, dengan url, title, start_index, dan end_index (posisi penanda, dihitung dalam karakter, posisi akhir tidak termasuk).
choices[0].finish_reason string Alasan balasan berakhir. Lihat Alasan selesai.
usage object Token dari permintaan. Lihat Penggunaan.
sources array Hanya pada permintaan dengan web_search: true yang pencariannya menemukan sesuatu: hasil yang diberikan kepada model, masing-masing dengan index, title, dan url. [1] dalam jawaban adalah entri dengan index 1.

Alasan selesai

finish_reason Deskripsi
stop Model menyelesaikan jawabannya, atau string stop muncul.
tool_calls Model memanggil satu tool atau lebih. Jalankan dan kirim hasilnya dalam pesan tool.
length Balasan terpotong pada batas output. Dilaporkan dalam stream shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, dan keluarga Shannon 3.

Balasan tanpa streaming melaporkan stop atau tool_calls.

Penggunaan

Field Tipe Deskripsi Tersedia di
usage.prompt_tokens integer Token input. Semua model
usage.completion_tokens integer Token output: reasoning, jawaban, dan panggilan tool bersama-sama. Semua model
usage.total_tokens integer prompt_tokens ditambah completion_tokens. Semua model
usage.prompt_tokens_details.cached_tokens integer Bagian dari prompt_tokens yang dibaca dari prompt cache. Model open-weight hosted
usage.completion_tokens_details.reasoning_tokens integer Bagian dari completion_tokens yang dipakai untuk reasoning. Model open-weight hosted

Pada model open-weight hosted, prompt_tokens adalah pesan dan definisi tool Anda yang dihitung dengan tokenizer milik model itu, ditambah token dari gambar apa pun. Endpoint penghitungan token mengembalikan angka yang sama sebelum Anda mengirim. Penghitungan token

Pada tingkat Shannon, prompt_tokens menghitung semua yang dibaca model untuk menulis balasan, sehingga lebih besar daripada teks pesan Anda saja.

Streaming

Dengan stream diatur ke true, balasan tiba sebagai event chat.completion.chunk dan berakhir dengan data: [DONE]. Chunk terakhir sebelumnya membawa finish_reason dan usage; tidak diperlukan stream_options. Bentuk chunk, baris keep-alive, dan error di dalam stream punya halaman sendiri. Streaming

Error

Error adalah objek JSON dengan member error. Pemeriksaan berjalan dalam urutan ini: API key, body permintaan, id model, lalu saldo. Tabel mencantumkan apa yang paling sering dikembalikan endpoint ini. Daftar lengkap, beserta apa yang perlu dicoba ulang, ada di halaman tersendiri. Penanganan kesalahan

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Tipe Pesan Kapan
401 authentication_error Missing authentication
Invalid API key
Kunci API tidak dikirim, atau kunci tidak dikenal atau sudah dicabut.
400 invalid_request_error unknown model: <id> model bukan id yang dipublikasikan.
400 invalid_request_error No user message provided Tingkat Shannon: permintaan tidak memiliki teks pengguna dan tidak memiliki tools.
400 invalid_request_error <id> does not accept image input Bagian gambar dikirim ke model open-weight hosted yang tidak mendukung input gambar.
400 invalid_request_error <id> does not accept response_format response_format dikirim ke model open-weight hosted tanpa output terstruktur.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort berisi nilai di luar daftar.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages tidak ada, atau sebuah field memiliki tipe JSON yang salah.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens lebih besar daripada sisa saldo Anda.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: lebih dari 120 permintaan dalam satu menit pada akun Anda.
500 server_error The model backend failed to answer. Please retry. Model tidak menghasilkan balasan. Kirim permintaan sekali lagi.
502 api_error The model backend failed to answer. Please retry. Sama, pada keluarga Shannon 3 dan model open-weight hosted.