Prompt keshlash
AVTOMATIKHosted open-weight modellar takrorlanuvchi prompt prefikslarini avtomatik ravishda keshlaydi. Agar so'rov bir xil modeldagi yaqinda amalga oshirilgan so'rov bilan bir xil tizim prompti, vositalar va oldingi xabarlar bilan boshlansa, ushbu umumiy prefiks keshdan oqiladi va modelning kirish narxining 25% miqdorida hisoblanadi. Hech narsani yoqish shart emas va keshga yozish bepuldir.
Qanday ishlaydi
- Prefiks, ketma-ketlikda — Prompt ketma-ketlikda oqiladi: tizim prompti, vosita ta'riflari, so'ngra xabarlar. Kesh ushbu ketma-ketlikning boshidan boshlab, birinchi farqli tokengacha bo'lgan qismini moslashtiradi.
- Nima kesh hit hisoblanadi — Prompti yaqinda amalga oshirilgan so'rov bilan bir xil kontentdan boshlangan so'rov — odatda yangi xabarlar qo'shilgan bir xil suhbatning oldingi bosqichi. Mos kelgan prefiks keshdagi kirish hisoblanadi; undan keyingi hamma narsa oddiy kirish hisoblanadi.
- Granulyarlik — Kesh promptni 1,568 tokenli bloklarda saqlaydi, shuning uchun taxminan 1,500 tokendan qisqa prompt keshlanmaydi. Javobdagi keshdagi son — kirish sonining promptning keshdagi ulushiga ko'paytmasi, pastga yaxlitlangan. U blok o'lchamiga albatta karrali emas.
- Hitsiz — Boshi keshda bo'lmagan so'rov oddiy kirish narxida hisoblanadi. Keshdagi promptlar uchun umr muddati e'lon qilinmagan va hit kafolatlanmaydi: so'rov keshdan nima olganini ko'rish uchun
usage'ni o'qing. - Yoqish-o'chirish yo'q — So'rov bunga rozilik bermaydi va keshlashni o'chiradigan maydon yo'q.
- Qaysi modellar — Barcha hosted open-weight ID-lar. GET /v1/models ular uchun capabilities.prompt_caching: true va pricing.cached_input_per_million_usd qiymatlarini qaytaradi. Shannon modellar esa yagona tekis stavka asosida hisoblanadi.
Javobda kesh hitini ko'rish
Bir xil uzun system prompt bilan boshlanadigan ikkita so'rov yuboring va har birining usage'ini chop eting. Birinchi son — so'rovning kirishi, ikkinchisi — uning keshdan o'qilgan qismi.
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")
handbook = open("handbook.txt").read() # a long text that stays the same
def ask(question):
response = client.chat.completions.create(
model="Kimi-K3-3BIT-REAP",
messages=[
{"role": "system", "content": handbook},
{"role": "user", "content": question},
],
)
usage = response.usage
print(usage.prompt_tokens, usage.prompt_tokens_details.cached_tokens)
ask("What is the refund policy?")
ask("Who approves travel?") # same start: read the second number import { readFileSync } from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.shannon-ai.com/v1" });
const handbook = readFileSync("handbook.txt", "utf8"); // a long text that stays the same
async function ask(question) {
const response = await client.chat.completions.create({
model: "Kimi-K3-3BIT-REAP",
messages: [
{ role: "system", content: handbook },
{ role: "user", content: question },
],
});
const usage = response.usage;
console.log(usage.prompt_tokens, usage.prompt_tokens_details.cached_tokens);
}
await ask("What is the refund policy?");
await ask("Who approves travel?"); // same start: read the second number # handbook.txt is a long text that stays the same. jq builds the JSON body from it
# and prints the usage object of the reply. Run it twice with different questions.
jq -Rs '{
model: "Kimi-K3-3BIT-REAP",
messages: [
{role: "system", content: .},
{role: "user", content: "What is the refund policy?"}
]
}' handbook.txt \
| curl -s https://api.shannon-ai.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @- \
| jq .usage Narxlar
Keshdagi kirish tokenlari modelning kirish stavkasining 25% miqdorida, 1M uchun $0.001 gacha yaxlitlanadi. Keshga yozish qo'shimcha xarajat talab qilmaydi va chiqish odatdagidek hisoblanadi. Har bir ID ning kesh stavkasi "Models & pricing" jadvalida keltirilgan. Modellar va narxlar
Chaqiruv kirishi (kirish − keshdagi) × kirish narxi + keshdagi × keshdagi narx bo'yicha hisoblanadi. Keshdagi son hech qachon kirish sonidan katta bo'lmaydi.
| Model | Kirish / 1M | Keshdagi kirish / 1M |
|---|---|---|
DeepSeek-V4-Pro-0813-3BIT-REAP | $1.95 | $0.488 |
GLM-5.2-3BIT-REAP | $0.73 | $0.183 |
Kimi-K3-3BIT-REAP | $3.83 | $0.958 |
Nemotron3Ultra-3BIT-REAP | $0.75 | $0.188 |
MiniMax-M3-3BIT-REAP | $0.50 | $0.125 |
DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP | $0.50 | $0.125 |
Kimi-K2.6-W4A16-AUTOROUND-REAP | $0.78 | $0.195 |
Laguna-S-2.1-W4A16-AUTOROUND-REAP | $0.50 | $0.125 |
inkling-W4A16-AUTOROUND-REAP | $1.42 | $0.355 |
MiMo-V2.5-Pro-W8A16 | $0.50 | $0.125 |
MiMo-V2.5-W8A16 | $0.50 | $0.125 |
Hy3-W8A16 | $0.50 | $0.125 |
Usage jurnali har bir chaqiruvning keshdagi kirishini sanab o'tadi. Uning hisoblangan tokenlari va narxi keshdagi narxni allaqachon o'z ichiga oladi. Keys & usage
Foydalanish maydonlari
| Endpoint | Keshdagi kirish | Mulohiya |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens ning bir qismi | usage.completion_tokens_details.reasoning_tokens — completion_tokens ning bir qismi |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens ning bir qismi | usage.output_tokens_details.reasoning_tokens — output_tokens ning bir qismi |
/v1/messages | usage.cache_read_input_tokens — alohida hisoblanadi: input_tokens keshlanmagan qism; cache_creation_input_tokens har doim 0 | thinking output_tokens ichida hisoblanadi |
{
"usage": {
"prompt_tokens": 20000,
"completion_tokens": 812,
"total_tokens": 20812,
"prompt_tokens_details": {
"cached_tokens": 18000
},
"completion_tokens_details": {
"reasoning_tokens": 604
}
}
} {
"usage": {
"input_tokens": 20000,
"input_tokens_details": {
"cached_tokens": 18000
},
"output_tokens": 812,
"output_tokens_details": {
"reasoning_tokens": 604
},
"total_tokens": 20812
}
} {
"usage": {
"input_tokens": 2000,
"cache_read_input_tokens": 18000,
"cache_creation_input_tokens": 0,
"output_tokens": 812
}
} Oqimli javob oxirgi usage'ida bir xil maydonlarni olib keladi. Buni so'rashingiz shart emas:
| Endpoint | Usage qayerga keladi |
|---|---|
/v1/chat/completions | data: [DONE]dan oldingi oxirgi chunk'dagi usage. U har bir oqimda yuboriladi. |
/v1/responses | response.completed hodisasining response.usage'i. |
/v1/messages | message_delta hodisasining usage'i. message_startning usage'i nollarni o'z ichiga oladi. |
Kesh hitlarini ko'paytirish
- Tizim prompti va vosita ta'riflarini chaqiruvlar orasida baytma-bayt barqaror saqlang. Vaqt belgisi yoki so'rov ID-lari kabi har bir chaqiruvga xos qiymatlarni tizim promptiga emas, balki oxirgi xabarning oxiriga joylashtiring.
- Tarixga faqat qo'shing (append). Oldingi bosqichlarni tahrirlash, qirqish yoki umumlashtirish prefiksni o'zgartiradi va birinchi o'zgarishdan keyingi hamma narsa oddiy kirish sifatida hisoblanadi.
- Chaqiruvlar orasida vositalar, xabarlar yoki kontent bloklarini qayta tartiblamang va JSON (vosita sxemalari, vosita argumentlari va natijalari) ni har safar bir xil seriyalashtiring.
- Suhbat davomida bitta model id'sida qoling va keyingi chaqiruvni oldingisidan so'ng tez yuboring.
API suhbat boshini quyidagi hollarda barqaror saqlaydi:
- Suhbatda keyinroq yuborilgan
systemyokideveloperxabari o'z o'rnida qoladi. U promptning boshini o'zgartirmaydi, shuning uchun undan oldingi navbatlar keshda qoladi. - Oldingi assistant navbatlaridagi tool chaqiruvlari argumentlari qiymat bo'yicha solishtiriladi. O'sha JSON'ning kalitlar tartibi va bo'sh joylari ahamiyatsiz.
- Uchala endpoint ham suhbatni bir xil o'qiydi. Boshqa endpointda davom ettirilgan suhbat, mazmuni bir xil bo'lsa, umumiy prefiksini saqlaydi.
So‘rov maydonlari
prompt_cache_key (Chat Completions va Responses) hamda Messages kontent bloklaridagi cache_control qabul qilinadi, shuning uchun mavjud mijoz kodi o‘zgarishsiz ishlaydi. Ularning hech biri shart emas: keshlash avtomatik tarzda amalga oshiriladi va ularsiz ham bir xil ishlaydi.
| Maydon | Yuboriladi | Bu nima |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API'ning kesh marshrutlash kaliti. |
cache_control | /v1/messages | Anthropic API'ning kontent bloki, system bloki yoki xabaridagi kesh to'xtash nuqtasi. |
stream_options | /v1/chat/completions | include_usage OpenAI API'dan oqimda usage so'raydi. Bu yerda har bir oqim usage bilan tugaydi. |
Tokenlarni hisoblash
Ikkita bepul endpoint, POST /v1/tokenize va POST /v1/messages/count_tokens, xostingdagi open-weight modellar uchun matn yoki butun so'rov tokenlarini yuborishdan oldin sanaydi. Ular o'z sahifasiga ega: Tokenlarni sanash