Prompt caching
AWCUMATIKUIl-modelli hosted open-weight jikkaxxejja prefixes ta' prompt ripetuti awtomatikament. Meta rikwest jibda b'stess system prompt, tools u l-messaġġi preċedenti bħal rikwest reċenti fuq l-istess modell, dak il-prefix komuni jittreqa mill-cache u jittreqa b'25% tas-prezz ta' input tal-modell. M'hemm xejk biex tiattiv, u l-kitba fil-cache hija b'għatis.
Kif taħdem
- Prefix, fil-orderBy — Il-prompt jittreqa fil-ordine: system prompt, definizzjonijiet ta' tool, u wara l-messaġġi. Il-cache jaqsi mill-bidu ta' dik is-sekwenza sa l-ewwel token li jkun differenti.
- X'jiġġeneralizza bħala 'hit' — Rikwest li l-prompt tiegħu jibda b'stess kontenna bħal rikwest reċenti — tipikament it-turn preċedent ta' stess konversazzjoni b'messaġġi ġdid miżid. Il-prefix li jaqsi huwa input cached; kull ħaġa wara tiegħu hija input regulari.
- Granularità — Il-cache iżżomm prompt f'blokok ta' 1,568 tokens, għalhekk prompt iqsar minn madwar 1,500 tokens ma jinżammx fil-cache. L-għadd cached f'tweġiba huwa l-għadd tal-input tiegħek immultiplikat bis-sehem cached tal-prompt, imdawwar 'l isfel. M'huwiex neċessarjament multiplu tad-daqs tal-blokk.
- Mingħajr hit — Talba li l-bidu tagħha mhuwiex fil-cache titħallas bir-rata regolari tal-input. Ebda tul ta' ħajja ma huwa ppubblikat għall-prompts cached u hit mhuwiex garantit: aqra
usagebiex tara dak li talba ħadet mill-cache. - Ebda swiċċ — Talba ma tagħżilx li tidħol, u ebda qasam ma jitfi l-caching.
- Liema modelli — Kull hosted open-weight id. GET /v1/models jirapporta capabilities.prompt_caching: true u pricing.cached_input_per_million_usd għalihom. Il-modelli Shannon jibbwilju rata flat waħda.
Ara cache hit f'tweġiba
Ibgħat żewġ talbiet li jibdew bl-istess system prompt twil u stampa l-użu ta' kull waħda. L-ewwel numru huwa l-input tat-talba, it-tieni huwa l-parti minnu li ngħatat mill-cache.
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 Prezzijiet
It-tokens ta' input cached jittreqaw b'25% tar-rata ta' input tal-modell, imdorrata għal $0.001 per 1M. Il-kitba fil-cache ma tiswa xejk extra, u l-output jittreqa bħan-norma. Ir-rata cached ta' kull id tinsab fit-tavla Models & pricing. Mudelli u prezzijiet
L-input ta' sejħa jitħallas bħala (input − cached) × rata tal-input + cached × rata tal-cached. L-għadd cached qatt ma jkun akbar mill-għadd tal-input.
| Mudell | Input / 1M | Input cached / 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 |
Il-log tal-użu jelenka l-input cached ta' kull sejħa. It-tokens imħallsa u l-ispiża tagħha diġà jinkludu r-rata cached. Ċwievet u użu
Kampi ta' użu
| Endpoint | Input cached | Raġunament |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — parti minn prompt_tokens | usage.completion_tokens_details.reasoning_tokens — parti minn completion_tokens |
/v1/responses | usage.input_tokens_details.cached_tokens — parti minn input_tokens | usage.output_tokens_details.reasoning_tokens — parti minn output_tokens |
/v1/messages | usage.cache_read_input_tokens — ir-rapport huwa separat: input_tokens hija l-parti mhux cached; cache_creation_input_tokens huwa dejjem 0 | it-thinking jittreqa f'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
}
} Tweġiba bi streaming ġġorr l-istess kampi fl-użu finali tagħha. M'għandekx bżonn titlobha:
| Endpoint | Fejn jasal l-użu |
|---|---|
/v1/chat/completions | usage fl-aħħar chunk qabel data: [DONE]. Jintbagħat fuq kull stream. |
/v1/responses | response.usage tal-avveniment response.completed. |
/v1/messages | usage tal-avveniment message_delta. L-usage ta' message_start fih żeri. |
Kif tikksib aktar cache hits
- Zżommi s-system prompt u d-definizzjonijiet ta' tool stabbli byte-for-byte bejn ċhjam. Poġġu l-valuri per-call bħat-timestamp jew request ids fl-aħħar tal-messaġġ l-aħħar, mhux fis-system prompt.
- Żid biss fil-history. L-editazzjoni, it-tqitir jew is-sommarizzazzjoni ta' turns preċedenti ibdlu l-prefix, u kull ħaġa wara l-ewwel bidla tittreqa bħala input regulari.
- M'għandekx tirriordna t-tools, l-messaġġi jew blokks ta' kontenna bejn ċhjam, u serjalizza JSON (tool schemas, tool arguments u rriżultati) l-istess mod kull volta.
- Ibqa' fuq id wieħed ta' mudell għal konversazzjoni, u ibgħat is-sejħa li ssegwi dalwaqt wara dik ta' qabel.
L-API iżomm stabbli l-bidu ta' konversazzjoni f'dawn il-każijiet:
- Messaġġ
systemjewdevelopermibgħut aktar tard f'konversazzjoni jibqa' f'postu. Ma jbiddilx il-bidu tal-prompt, għalhekk it-turns qablu jibqgħu fil-cache. - L-argumenti ta' sejħiet ta' tools f'turns preċedenti tal-assistent jitqabblu skont il-valur. L-ordni taċ-ċwievet u l-ispazjar ta' dak il-JSON ma jgħoddux.
- It-tliet endpoints jaqraw konversazzjoni bl-istess mod. Konversazzjoni li titkompla fuq endpoint ieħor iżżomm il-prefix komuni tagħha meta l-kontenut ikun l-istess.
Kampi tar-rikwest
prompt_cache_key (Chat Completions u Responses) u cache_control fuq blocks ta' kontenut ta' Messages huma aċċettati, b'hekk il-kodu ta' client eżistenti jaħdix bidemmi. Huma sħaħ: il-caching huwa awtomatiku u jaħdem l-istess mingħajhom.
| Qasam | Mibgħut lil | X'inhu |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | Ċavetta ta' routing tal-cache tal-API OpenAI. |
cache_control | /v1/messages | Breakpoint tal-cache fuq blokk tal-kontenut, blokk system jew messaġġ tal-API Anthropic. |
stream_options | /v1/chat/completions | include_usage jitlob mill-API OpenAI l-użu fuq stream. Hawn kull stream jispiċċa bl-użu. |
Għandna deċiedu t-tokens
Żewġ endpoints b'xejn, POST /v1/tokenize u POST /v1/messages/count_tokens, jgħoddu t-tokens ta' test jew ta' talba sħiħa għall-mudelli open-weight ospitati qabel ma tibgħatha. Għandhom paġna tagħhom: Għadd ta' tokens