Caching prompt
ALÁDÀÁṢIṢẸ́Awọn hosted open-weight models n cache awọn prompt prefixes ti a tun ṣe atilase ni automatic. Nigba ti request kan ba bẹrẹ pẹlu system prompt, tools ati awọn message kan naa ti o jọ mọ request kan ti o ṣẹyẹ lori model kan, a n ka shared prefix yẹn lati cache ati gba owo rẹ ni 25% ti ogo input price ti model naa. Ko si ohun ti o nilo lati enable, ati pe cache writes jẹ ọfẹ.
Bawo ni o ṣe n ṣiṣẹ
- Prefix, ni eto — A n ka prompt naa ni eto: system prompt, tool definitions, lẹyin naa awọn message. Cache naa muu lati ibẹrẹ sequence yẹn titi own token akọkọ ti o yipada.
- Kini n je 'hit' — Request kan ti prompt rẹ bẹrẹ pẹlu awo kan naa ti request kan ti o ṣẹyẹ — nigba pupọ, eyi jẹ itesiwaju conversation kan naa pẹlu awọn message tuntun ti a fi kun. Matching prefix yẹn jẹ cached input; ohun gbogbo lẹyin rẹ jẹ regular input.
- Ìwọ̀n ìpín — Cache máa ń tọ́jú prompt ní àwọn block token 1,568, nítorí náà a kì í cache prompt tó kúrú ju nǹkan bí token 1,500 lọ. Iye cached nínú èsì ni iye input rẹ tí a fi ìpín prompt tí a cache sọ di púpọ̀, tí a sì yí sí ìsàlẹ̀. Kò pọn dandan kó jẹ́ ìlọ́po ìwọ̀n block náà.
- Láìsí hit — Ìbéèrè tí ìbẹ̀rẹ̀ rẹ̀ kò sí nínú cache ni a máa ń gba owó rẹ̀ ní iye owó input déédéé. A kò kéde iye àkókò tí àwọn prompt tí a cache máa ń lò, hit kò sì dájú: ka
usageláti rí ohun tí ìbéèrè kan mú láti inú cache. - Kò sí switch — Ìbéèrè kò nílò láti yan caching, kò sì sí field kankan tó ń pa á.
- Awọn model wo — Gbogbo hosted open-weight id. GET /v1/models n sọ nipa capabilities.prompt_caching: true ati pricing.cached_input_per_million_usd fun wọn. Shannon models gba owo kan ṣoṣo.
Wo cache hit nínú èsì
Fi ìbéèrè méjì tó bẹ̀rẹ̀ pẹ̀lú system prompt gígùn kan náà ránṣẹ́, kí o sì tẹ usage ọ̀kọ̀ọ̀kan jáde. Nọ́ńbà àkọ́kọ́ ni input ìbéèrè náà, èkejì ni apá rẹ̀ tí a kà láti inú 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 Ìjẹ
Cached input tokens gba owo ni 25% ti ogo input rate ti model, eyiti a yipada si $0.001 fun 1M. Kiko si cache ko gba owo kankan, ati pe output gba owo gẹgẹ bi a ṣe n ṣe aṣa rẹ. Cached rate fun kọọkan id wa ninu Models & pricing table. Àwọn model àti iye owó
A máa ń gba owó input ìpè kan báyìí: (input − cached) × iye owó input + cached × iye owó cached. Iye cached kì í tóbi ju iye input lọ láé.
| Model | Input / 1M | Input tí a 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 |
Àkọsílẹ̀ ìlò máa ń to input tí a cache ti ìpè kọ̀ọ̀kan. Àwọn token tí a gba owó rẹ̀ àti iye owó rẹ̀ ti ní iye owó cached nínú tẹ́lẹ̀. Àwọn key àti ìlò
Àwọn oko ìlò
| Endpoint | Input tí a cache | Ìrònú |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — apa ti prompt_tokens | usage.completion_tokens_details.reasoning_tokens — apa ti completion_tokens |
/v1/responses | usage.input_tokens_details.cached_tokens — apa ti input_tokens | usage.output_tokens_details.reasoning_tokens — apa ti output_tokens |
/v1/messages | usage.cache_read_input_tokens — a sọ yato: input_tokens ni apa ti ko ni cache; cache_creation_input_tokens nigbagbogbo jẹ 0 | a n ka thinking ninu 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
}
} Èsì tí a fi streaming ránṣẹ́ máa ń gbé àwọn field kan náà nínú usage ìkẹyìn rẹ̀. O kò ní láti béèrè fún un:
| Endpoint | Ibi tí usage ti ń dé |
|---|---|
/v1/chat/completions | usage lórí chunk tó kẹ́yìn ṣáájú data: [DONE]. A máa ń fi ránṣẹ́ lórí gbogbo stream. |
/v1/responses | response.usage ti event response.completed. |
/v1/messages | usage ti event message_delta. usage ti message_start ní àwọn òdo nínú. |
Bawo ni a ṣe le ni cache hits si iwe
- Jẹ ki system prompt ati tool definitions dudu-dudu (stable) lakosi awọn calls. Fi awọn iye ti o yipada fun kọọkan call gẹgẹ bi timestamps tabi request ids si opin message tokun, kii ṣe ninu system prompt.
- Kun kun itan (history) nikan. Titun, kika, tabi ṣiṣẹ summary awọn turns ti o ṣẹyẹ n yipada prefix, ati pe ohun gbogbo lẹyin iyipada akọkọ yẹn gba owo gẹgẹ bi regular input.
- Ma ṣe yiyipada eto awọn tools, messages tabi content blocks larin awọn calls, ki o si serialise JSON (tool schemas, tool arguments ati results) lona kan nigbagbogbo.
- Dúró lórí id model kan fún ìjíròrò kan, kí o sì fi ìpè tó tẹ̀lé e ránṣẹ́ láìpẹ́ lẹ́yìn èyí tó ṣáájú rẹ̀.
API náà máa ń mú ìbẹ̀rẹ̀ ìjíròrò dúró ṣinṣin nínú àwọn ọ̀ràn wọ̀nyí:
- Ìfiránṣẹ́
systemtàbídevelopertí a fi ránṣẹ́ nígbà tó yá nínú ìjíròrò máa ń dúró sí ipò rẹ̀. Kì í yí ìbẹ̀rẹ̀ prompt padà, nítorí náà àwọn turn tó ṣáájú rẹ̀ ṣì wà nínú cache. - A máa ń fi iye ṣe àfiwé àwọn argument ìpè tool nínú àwọn turn assistant àtẹ̀yìnwá. Ìtòlẹ́sẹẹsẹ key àti àlàfo inú JSON yẹn kò ṣe pàtàkì.
- Endpoint mẹ́tẹ̀ẹ̀ta máa ń ka ìjíròrò lọ́nà kan náà. Ìjíròrò tí a tẹ̀síwájú lórí endpoint mìíràn máa ń pa prefix tó jọ ní mọ́ nígbà tí àkóónú bá jẹ́ ọ̀kan náà.
Àwọn field ìbéèrè
prompt_cache_key (Chat Completions ati Responses) ati cache_control lórí content blocks Messages a gba, nitori eyi jẹ ki kódù client tó wà ríun ṣiṣẹ́ láìyípadà. Kòtó kankan kò nílò: caching jẹ automatic ati o ṣiṣẹ́ bẹ́ẹ̀ lọ láìsí wọn.
| Field | A fi ránṣẹ́ sí | Ohun tó jẹ́ |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | Cache routing key ti OpenAI API. |
cache_control | /v1/messages | Cache breakpoint lórí content block, block system tàbí ìfiránṣẹ́ ti Anthropic API. |
stream_options | /v1/chat/completions | include_usage ń béèrè usage lórí stream lọ́wọ́ OpenAI API. Níbí, gbogbo stream ló ń parí pẹ̀lú usage. |
Ìṣírò tokens
Endpoint ọ̀fẹ́ méjì, POST /v1/tokenize àti POST /v1/messages/count_tokens, máa ń ka àwọn token inú text kan tàbí inú odindi ìbéèrè kan fún àwọn model open-weight tí a gbàlejò kí o tó fi ránṣẹ́. Wọ́n ní ojú-ìwé tiwọn: Kíka token