Langsung ke konten
Penghitungan token

Penghitungan token

Hitung token suatu teks atau seluruh permintaan sebelum Anda mengirimnya.

POST https://api.shannon-ai.com/v1/tokenize

POST https://api.shannon-ai.com/v1/messages/count_tokens

Kedua endpoint menghitung dengan tokenizer model yang Anda sebut, tanpa menjalankan model. Keduanya mencakup model open-weight hosted. /v1/tokenize menerima teks biasa atau percakapan Chat Completions. /v1/messages/count_tokens menerima permintaan dalam format Anthropic Messages, yaitu panggilan yang dibuat SDK Anthropic dan Claude Code.

Penghitungan gratis. Panggilan memerlukan kunci API Anda, tidak mengambil apa pun dari saldo Anda, dan tidak muncul di log penggunaan Anda.

Hitung sebuah teks

Kirim model dan text. Teks dihitung apa adanya, tanpa pemformatan chat di sekitarnya.

import requests

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={
        "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
        "text": "Hello, world",
    },
)
print(response.json()["tokens"])
200 Balasan
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 3
}

Angka dalam balasan di halaman ini adalah contoh. Teks yang sama memberi hitungan berbeda pada model yang berbeda.

Hitung permintaan chat

Kirim model dan messages, dengan tools jika permintaan memilikinya, persis seperti yang Anda kirim ke /v1/chat/completions. Balasannya adalah ukuran seluruh input.

import requests

request = {
    "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    "messages": [
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "What is the weather in Paris?"},
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Current weather for a city",
                "parameters": {
                    "type": "object",
                    "properties": {"city": {"type": "string"}},
                    "required": ["city"],
                },
            },
        }
    ],
}

response = requests.post(
    "https://api.shannon-ai.com/v1/tokenize",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json=request,
)
print(response.json()["tokens"])
200 Balasan
{
  "model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
  "tokens": 164
}

Field /v1/tokenize

Field Tipe Deskripsi
model string Wajib. Id model open-weight hosted. Huruf besar dan kecil diperlakukan sama.
text string Teks yang dihitung apa adanya, tanpa pemformatan chat. Hingga 4,000,000 byte. Kirim text atau messages; jika keduanya ada, text yang dihitung.
messages array Pesan chat dalam format Chat Completions. Pesan dihitung sebagai input lengkap suatu permintaan: setiap pesan dengan pemformatan yang ditambahkan chat template model di sekelilingnya.
tools array Definisi tool yang disertakan dalam hitungan. Dipakai bersama messages.

Balasan adalah objek JSON dengan field berikut:

Field Tipe Deskripsi
model string Id model yang untuknya hitungan dibuat, dengan ejaan yang dipublikasikan.
tokens integer Dengan text: token dari teks. Dengan messages: token dari seluruh input, termasuk gambar.

Hitung permintaan Messages

Kirim body yang akan Anda kirim ke /v1/messages: model, messages, serta system dan tools jika Anda memakainya. SDK Anthropic resmi memanggil endpoint ini melalui messages.count_tokens.

import anthropic

client = anthropic.Anthropic(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com",
)

count = client.messages.count_tokens(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    system="You are a concise assistant.",
    messages=[
        {"role": "user", "content": "Summarise the attached report."}
    ],
)
print(count.input_tokens)
200 Balasan
{
  "input_tokens": 21
}

Field /v1/messages/count_tokens

Field Tipe Deskripsi
model string Wajib. Id model open-weight hosted.
messages array Wajib. Pesan dalam format Anthropic Messages. Blok text, image, tool_use, dan tool_result dihitung.
system string | array System prompt: string atau array blok teks.
tools array Definisi tool dengan name, description, dan input_schema.

Diterima demi kompatibilitas, tanpa efek pada hitungan: tool_choice, max_tokens, temperature, top_p, stop_sequences, stream, thinking. Anda dapat meneruskan body permintaan nyata tanpa perubahan.

Balasan adalah objek JSON dengan field berikut:

Field Tipe Deskripsi
input_tokens integer Token dari seluruh input: system prompt, pesan, tool, dan gambar.

Model yang didukung

Kedua endpoint menghitung untuk model open-weight hosted. GET /v1/models mencantumkan /v1/tokenize dan /v1/messages/count_tokens di endpoints setiap model yang mendukungnya. Nilai model lain, termasuk id Shannon, dijawab dengan 400.

  • DeepSeek-V4-Pro-0813-3BIT-REAP
  • GLM-5.2-3BIT-REAP
  • Kimi-K3-3BIT-REAP
  • Nemotron3Ultra-3BIT-REAP
  • MiniMax-M3-3BIT-REAP
  • DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP
  • Kimi-K2.6-W4A16-AUTOROUND-REAP
  • Laguna-S-2.1-W4A16-AUTOROUND-REAP
  • inkling-W4A16-AUTOROUND-REAP
  • MiMo-V2.5-Pro-W8A16
  • MiMo-V2.5-W8A16
  • Hy3-W8A16

Untuk model Shannon, baca jumlah token dari objek usage pada balasan.

Cara penghitungan dilakukan

Setiap model dihitung dengan tokenizer dan chat template miliknya sendiri. Tidak ada perkiraan dari karakter atau kata yang dipakai.

Apa yang dihitung Aturan
Sebuah teks Token dari string sebagaimana dikirim. String kosong dihitung 0.
Pesan Pesan dan tool disusun dengan chat template milik model sendiri, sampai titik ketika balasan dimulai, dan seluruh prompt itu dihitung.
Role Pesan system, user, assistant, dan tool dihitung. developer dihitung sebagai system. Pesan tanpa konten dan tanpa pemanggilan tool tidak menambah apa pun.
Pemanggilan tool dan hasilnya Pemanggilan tool dari giliran assistant sebelumnya beserta hasilnya menjadi bagian dari hitungan, pada kedua endpoint.
Gambar Gambar yang dikirim di dalam body (base64 atau URL data:) menambahkan satu token per patch 28 × 28 piksel: ceil(width / 28) × ceil(height / 28). Gambar yang diberikan sebagai URL http(s) tidak diunduh oleh endpoint ini dan dihitung 1,024.

Contoh: gambar 1,024 × 768 piksel dihitung ceil(1024 / 28) × ceil(768 / 28) = 37 × 28 = 1,036 token.

Hitungan dan apa yang ditagih pada permintaan

Penghitungan seluruh permintaan dilakukan dengan cara yang sama seperti penghitungan input permintaan nyata dengan model, pesan, dan tool yang sama. Balasan melaporkan angka itu sebagai usage.prompt_tokens pada Chat Completions, sebagai usage.input_tokens pada Responses, dan sebagai usage.input_tokens ditambah usage.cache_read_input_tokens pada Messages.

  • Hitungannya adalah input sebelum diskon input ter-cache. Permintaan nyata dapat membaca sebagian input itu dari cache dan menagih bagian itu dengan tarif cache. Prompt caching
  • Gambar yang diberikan sebagai URL http(s) dihitung 1,024 di sini. Permintaan nyata mengunduh gambar dan menghitungnya dari ukuran pikselnya, sehingga kedua angka bisa berbeda. Kirim gambar sebagai base64 untuk mendapatkan angka yang sama.
  • Output bukan bagian dari hitungan. Balasan permintaan nyata ditagih sebagai token output tambahan, termasuk penalaran.
  • Hitungan text tidak memiliki pemformatan chat. Gunakan untuk mengukur dokumen atau bagian prompt, dan bentuk messages untuk mengukur permintaan.

Untuk mengubah hitungan menjadi biaya, kalikan dengan harga input model per 1M token. Model & harga

Batas

Batas Nilai Di atasnya
Panjang text 4,000,000 byte (UTF-8) 413 dengan pesan text too long
Body permintaan 32 MiB 413
Per permintaan Satu teks atau satu percakapan Kirim satu permintaan per teks untuk menghitung beberapa teks.

Panggilan penghitungan tidak dihitung dalam batas 120 permintaan per menit. Batas dan saldo

Error

Status Tipe Pesan Kapan
400 invalid_request_error tokenize is available for the hosted open models; unknown model: <model> /v1/tokenize dengan model yang bukan id open-weight hosted.
400 invalid_request_error count_tokens is available for the hosted open models; unknown model: <model> /v1/messages/count_tokens dengan model yang bukan id open-weight hosted, atau tanpa model.
400 invalid_request_error send `text` or `messages` /v1/tokenize tanpa text maupun messages.
401 authentication_error Missing authentication / Invalid API key Kunci tidak dikirim, atau kunci tidak valid.
413 invalid_request_error text too long text lebih panjang dari 4,000,000 byte. Body di atas 32 MiB juga dijawab dengan 413.
415 invalid_request_error Expected request with `Content-Type: application/json` Permintaan tidak memiliki content type JSON.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Field wajib hilang (model pada /v1/tokenize, messages pada /v1/messages/count_tokens) atau sebuah field bertipe salah.
503 api_error token counting is temporarily unavailable for this model Penghitungan tidak dapat dilakukan untuk model ini saat ini. Coba lagi nanti.

/v1/tokenize mengembalikan error dalam bentuk OpenAI. Pada /v1/messages/count_tokens, error dari endpoint itu sendiri (400 untuk model, 503) datang dalam bentuk Anthropic, dan 401, 413, 415, serta 422 datang dalam bentuk OpenAI. Baca kode status lebih dulu, lalu error.type dan error.message, yang ada di kedua bentuk.

400 /v1/tokenize
{
  "error": {
    "type": "invalid_request_error",
    "message": "tokenize is available for the hosted open models; unknown model: shannon-3"
  }
}
400 /v1/messages/count_tokens
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "count_tokens is available for the hosted open models; unknown model: shannon-3"
  }
}