Caching i prompt-it
AUTOMATIKModelet hosted open-weight bëjnë cache automatikisht prefiksët e përsëritur të prompt-it. Kur një kërkesë fillon me të njëjtin system prompt, vegla dhe mesazhe të mëparshme si një kërkesë e kohës së fundit në të njëjtin model, ky prefiks i përbashkët lexohet nga cache-i dhe tarifohet me 25% të çmimit të hyrjes së modelit. Nuk ka nevojë për aktivizim, dhe shkrimet në cache janë falas.
Si funksionon
- Prefiksi, në radhë — Prompt-i lexohet në radhë: system prompt, definimet e veglove, dhe më pas mesazhet. Cache-i përputhet nga fillimi i kësaj sekuence deri në token-in e parë që ndryshon.
- Çfarë konsiderohet si 'hit' — Një kërkesë जिसकी prompt fillon me të njëjtin përmbajtje si një kërkesë e kohës së fundit — zakonisht radha e mëparshme e të njëjtës bisedë me mesazhe të reja të shtuara. Prefiksi i përputhur është hyrje e cached; gjithçka pas tij është hyrje e rregullt.
- Granulariteti — Cache-i e mban një prompt në blloqe prej 1,568 tokens, kështu që një prompt më i shkurtër se rreth 1,500 tokens nuk ruhet në cache. Numri i ruajtur në cache në një përgjigje është numri juaj i hyrjes i shumëzuar me pjesën e ruajtur në cache të prompt-it, i rrumbullakosur poshtë. Nuk është domosdoshmërisht shumëfish i madhësisë së bllokut.
- Pa hit — Një kërkesë, fillimi i së cilës nuk është në cache, faturohet me tarifën e zakonshme të hyrjes. Për prompt-et e ruajtur në cache nuk publikohet kohëzgjatje jetese dhe një hit nuk garantohet: lexoni
usagepër të parë çfarë mori një kërkesë nga cache-i. - Pa çelës — Një kërkesë nuk zgjedh vetë dhe asnjë fushë nuk e çaktivizon caching-un.
- Cilat modele — Çdo id hosted open-weight. GET /v1/models raporton capabilities.prompt_caching: true dhe pricing.cached_input_per_million_usd për to. Modelet Shannon tarifojnë një tarifë fiksë.
Shihni një cache hit në një përgjigje
Dërgoni dy kërkesa që fillojnë me të njëjtin system prompt të gjatë dhe printoni përdorimin e secilës. Numri i parë është hyrja e kërkesës, i dyti është pjesa e saj që u lexua nga cache-i.
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 Çmimet
Token-at e hyrjes së cached tarifohen me 25% të tarifës së hyrjes së modelit, të rrumbullakosura në $0.001 për 1M. Shkrimi në cache nuk kushton asgjë ekstra, dhe dalja tarifohet si zakonisht. Tarifa e cached për çdo id është në tabelën Models & pricing. Modelet dhe çmimet
Hyrja e një thirrjeje faturohet si (hyrja − e ruajtura në cache) × tarifa e hyrjes + e ruajtura në cache × tarifa e cache-it. Numri i ruajtur në cache nuk është kurrë më i madh se numri i hyrjes.
| Modeli | Hyrje / 1M | Hyrje e ruajtur në cache / 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 |
Regjistri i përdorimit liston hyrjen e ruajtur në cache të çdo thirrjeje. Tokens-at e faturuar dhe kostoja e tij e përfshijnë tashmë tarifën e cache-it. Çelësat dhe përdorimi
Fushat e përdorimit
| Endpoint | Hyrje e cached | Arsyetim |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — pjesë e prompt_tokens | usage.completion_tokens_details.reasoning_tokens — pjesë e completion_tokens |
/v1/responses | usage.input_tokens_details.cached_tokens — pjesë e input_tokens | usage.output_tokens_details.reasoning_tokens — pjesë e output_tokens |
/v1/messages | usage.cache_read_input_tokens — raportuar veçmas: input_tokens është pjesa e uncached; cache_creation_input_tokens është gjithmonë 0 | mendimi numërohet në output_tokens |
{
"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
}
} Një përgjigje me stream i mban të njëjtat fusha në përdorimin e saj përfundimtar. Nuk keni nevojë ta kërkoni:
| Endpoint | Ku arrin përdorimi |
|---|---|
/v1/chat/completions | usage në pjesën e fundit para data: [DONE]. Dërgohet në çdo stream. |
/v1/responses | response.usage i ngjarjes response.completed. |
/v1/messages | usage i ngjarjes message_delta. usage i message_start përmban zero. |
Si të arrisni më shumë cache hits
- Mbani system prompt-in dhe definimet e veglove të qëndrueshme byte-për-byte në thirrje. Vendosni vlerat për thirrje, si timestamp-et ose id-të e kërkesave, në fund të mesazhit të fundit, jo në system prompt.
- Shtoni vetëm në historik. Editimi, prerja ose përmbledhja e radhëve të mëparshme ndryshon prefiksin, dhe gjithçka pas ndryshimit të parë tarifohet si hyrje e rregullt.
- Mos i riorganizoni veglat, mesazhet ose blluqut e përmbajtjes midis thirrjeve, dhe serializoni JSON (skemat e veglove, argumentet dhe rezultatet e veglove) në të njëjtën mënyrë çdo herë.
- Qëndroni te një id modeli për një bisedë, dhe dërgojeni thirrjen vijuese pak pas thirrjes së mëparshme.
API-ja e mban të qëndrueshëm fillimin e një bisede në këto raste:
- Një mesazh
systemosedeveloperi dërguar më vonë në një bisedë mbetet në vendin e vet. Nuk e ndryshon fillimin e prompt-it, kështu që radhët para tij mbeten në cache. - Argumentet e thirrjeve të mjeteve në radhët e mëparshme të assistant krahasohen sipas vlerës. Renditja e çelësave dhe hapësirat e atij JSON nuk kanë rëndësi.
- Tri endpoint-et e lexojnë një bisedë në të njëjtën mënyrë. Një bisedë e vazhduar në një endpoint tjetër e mban prefiksin e përbashkët kur përmbajtja është e njëjtë.
Fushat e kërkesës
prompt_cache_key (Chat Completions dhe Responses) dhe cache_control në blloket e përmbajtjes së Mesazheve pranohen, kështu që kodi ekzistues i klientit ekzekutohet pa ndryshime. Asnjëra nuk është e kërkuar: caching është automatik dhe funksionon njësoj pa to.
| Fusha | Dërguar te | Çfarë është |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | Një çelës rrugëzimi i cache-it i API-t OpenAI. |
cache_control | /v1/messages | Një pikë ndarjeje e cache-it në një bllok përmbajtjeje, një bllok system ose një mesazh të API-t Anthropic. |
stream_options | /v1/chat/completions | include_usage i kërkon API-t OpenAI përdorimin në një stream. Këtu çdo stream mbaron me përdorim. |
Numërimi i tokens
Dy endpoint-e falas, POST /v1/tokenize dhe POST /v1/messages/count_tokens, numërojnë tokens-at e një teksti ose të një kërkese të plotë për modelet open-weight të hostuara para se ta dërgoni. Ato kanë faqen e tyre: Numërimi i tokens-ave