प्रम्प्ट क्याशिङ
स्वचालितहोस्ट गरिएको ओपन-वेट मोडेलहरूले दोहोरिएको प्रम्प्ट प्रि-फिक्सहरू स्वचालित रूपमा क्याश गर्छन्। जब एउटा अनुरोध एउटै मोडेलमा हालैको अनुरोध जस्तै सिस्टम प्रम्प्ट, टुल्स र अघिल्ला सन्देशहरूबाट सुरु हुन्छ, त्यो साझा प्रि-फिक्स क्याशबाट पढिन्छ र मोडेलको इनपुट मूल्यको २५% मा बिल गरिन्छ। यसलाई इनेबल गर्न केही गर्नु पर्दैन, र क्याश राइटिङ नि:शुल्क हुन्छ।
यसले कसरी काम गर्छ
- प्रि-फिक्स, क्रम अनुसार — प्रम्प्ट क्रम अनुसार पढिन्छ: सिस्टम प्रम्प्ट, टुल्स डेफिनिसन, र त्यसपछि सन्देशहरू। क्याश त्यो क्रमको सुरुदेखि पहिलो फरक टोकन नभेटुन्जेलसम्म मेल खान्छ।
- हिट (hit) भन्नाले के बुझिन्छ — यस्तो अनुरोध जसको प्रम्प्ट हालैको अनुरोधसँगै सुरु हुन्छ — सामान्यतया नयाँ सन्देशहरू थपिएका एउटै कुराकानीको अघिल्लो टर्न। मेल खाने प्रि-फिक्स क्याश्ड इनपुट हो; त्यसपछिका सबै नियमित इनपुट हुन्।
- ग्र्यानुलारिटी (Granularity) — क्याशले प्रम्प्टलाई 1,568 टोकनका ब्लकमा राख्छ, त्यसैले करिब 1,500 टोकनभन्दा छोटो प्रम्प्ट क्याश हुँदैन। जवाफमा क्याश्ड गणना तपाईंको इनपुट गणनालाई प्रम्प्टको क्याश्ड अंशले गुणा गरेर तल पूर्णाङ्कमा झारिएको हुन्छ। यो ब्लक साइजको गुणक हुनैपर्छ भन्ने छैन।
- हिट बिना — सुरु भाग क्याशमा नभएको अनुरोधलाई नियमित इनपुट दरमा बिल गरिन्छ। क्याश्ड प्रम्प्टहरूको कुनै अवधि प्रकाशित गरिएको छैन र हिटको ग्यारेन्टी छैन: अनुरोधले क्याशबाट के लियो भनी हेर्न
usageपढ्नुहोस्। - कुनै स्विच छैन — अनुरोधले छनोट गर्नुपर्दैन, र कुनै फिल्डले क्याशिङ बन्द गर्दैन।
- कुन मोडेलहरू — प्रत्येक होस्ट गरिएको ओपन-वेट id। GET /v1/models ले तिनीहरूको लागि capabilities.prompt_caching: true र pricing.cached_input_per_million_usd रिपोर्ट गर्दछ। Shannon मोडेलहरूले एकै फ्ल्याट रेट बिल गर्छन्।
जवाफमा क्याश हिट हेर्नुहोस्
उही लामो सिस्टम प्रम्प्टबाट सुरु हुने दुई अनुरोध पठाउनुहोस् र प्रत्येकको usage प्रिन्ट गर्नुहोस्। पहिलो संख्या अनुरोधको इनपुट हो, दोस्रो त्यसको क्याशबाट पढिएको हिस्सा हो।
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 मूल्य निर्धारण
क्याश्ड इनपुट टोकनहरू मोडेलको इनपुट दरको २५% मा बिल गरिन्छ, जसलाई $0.001 per 1M मा राउन्ड गरिएको हुन्छ। क्याशमा लेख्न कुनै अतिरिक्त शुल्क लाग्दैन, र आउटपुट सामान्य रूपमा बिल गरिन्छ। प्रत्येक id को क्याश्ड दर 'Models & pricing' तालिकामा छ। मोडल र मूल्य
कलको इनपुटमा (इनपुट − क्याश्ड) × इनपुट दर + क्याश्ड × क्याश्ड दर शुल्क लाग्छ। क्याश्ड गणना इनपुट गणनाभन्दा कहिल्यै ठूलो हुँदैन।
| मोडल | इनपुट / 1M | क्याश्ड इनपुट / 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 लगले हरेक कलको क्याश्ड इनपुट सूचीबद्ध गर्छ। यसका बिल गरिएका टोकन र लागतमा क्याश्ड दर पहिल्यै समावेश छ। की र प्रयोग
प्रयोग क्षेत्रहरू (Usage fields)
| इन्डपोइन्ट | क्याश्ड इनपुट | रिजनिङ (Reasoning) |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens को हिस्सा | usage.completion_tokens_details.reasoning_tokens — completion_tokens को हिस्सा |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens को हिस्सा | usage.output_tokens_details.reasoning_tokens — output_tokens को हिस्सा |
/v1/messages | usage.cache_read_input_tokens — छुट्टै रिपोर्ट गरिएको: input_tokens अन-क्याश्ड हिस्सा हो; cache_creation_input_tokens सधैं ० हुन्छ | thinking लाई 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
}
} स्ट्रिम गरिएको जवाफले आफ्नो अन्तिम usage मा उही फिल्डहरू बोक्छ। तपाईंले यो माग्नुपर्दैन:
| इन्डपोइन्ट | usage कहाँ आइपुग्छ |
|---|---|
/v1/chat/completions | data: [DONE] अघिको अन्तिम चंकमा usage। यो हरेक स्ट्रिममा पठाइन्छ। |
/v1/responses | response.completed इभेन्टको response.usage। |
/v1/messages | message_delta इभेन्टको usage। message_start को usage मा शून्यहरू हुन्छन्। |
थप क्याश हिटहरू प्राप्त गर्ने तरिकाहरू
- कलहरू बीच सिस्टम प्रम्प्ट र टुल्स डेफिनिसनलाई बाइट-टु-बाइट स्थिर राख्नुहोस्। टाइमस्ट्याम्प वा अनुरोध id जस्ता प्रति-कल मानहरूलाई सिस्टम प्रम्प्टमा नभई पछिल्लो सन्देशको अन्त्यमा राख्नुहोस्।
- इतिहासमा केवल थप्ने (append) गर्नुहोस्। अघिल्ला टर्नहरूलाई सम्पादन, ट्रिम वा सारांश गर्दा प्रि-फिक्स परिवर्तन हुन्छ, र पहिलो परिवर्तन पछिका सबै कुराहरू नियमित इनपुटको रूपमा बिल गरिन्छ।
- कलहरू बीच टुल्स, सन्देशहरू वा कन्टेन्ट ब्लकहरूको क्रम परिवर्तन नगर्नुहोस्, र JSON (टूल स्कीमा, टूल आर्ग्युमेन्ट्स र रिजल्ट्स) लाई हरेक पटक एउटै तरिकाले सिरियलाइज गर्नुहोस्।
- एउटा कुराकानीको लागि एउटै मोडल id मा रहनुहोस्, र अघिल्लो कलपछि छिट्टै अर्को कल पठाउनुहोस्।
यी अवस्थाहरूमा API ले कुराकानीको सुरु भागलाई स्थिर राख्छ:
- कुराकानीमा पछि पठाइएको
systemवाdeveloperसन्देश आफ्नै ठाउँमा रहन्छ। यसले प्रम्प्टको सुरु भाग बदल्दैन, त्यसैले यस अघिका टर्नहरू क्याश्ड रहन्छन्। - अघिल्ला assistant टर्नहरूमा टुल कलका आर्ग्युमेन्टहरू मानले तुलना गरिन्छन्। त्यो JSON का की क्रम र स्पेसिङले फरक पार्दैनन्।
- तीनवटै इन्डपोइन्टले कुराकानी एउटै तरिकाले पढ्छन्। अर्को इन्डपोइन्टमा जारी राखिएको कुराकानीले सामग्री उही हुँदा साझा प्रि-फिक्स राख्छ।
अनुरोध क्षेत्रहरू
prompt_cache_key (Chat Completions र Responses) र Messages content blocks मा cache_control स्वीकार गरिन्छ, त्यसैले अवस्थित client code परिवर्तन बिना चल्छ। यी दुवै अनिवार्य छैनन्: caching स्वचालित छ र यिन बिना पनि समान रूपमा काम गर्छ।
| फिल्ड | पठाइने ठाउँ | यो के हो |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API को क्याश राउटिङ की। |
cache_control | /v1/messages | Anthropic API को कन्टेन्ट ब्लक, system ब्लक वा सन्देशमा क्याश ब्रेकपोइन्ट। |
stream_options | /v1/chat/completions | include_usage ले OpenAI API लाई स्ट्रिममा usage माग्छ। यहाँ हरेक स्ट्रिम usage सहित सकिन्छ। |
Tokens गणना
दुई निःशुल्क इन्डपोइन्ट, POST /v1/tokenize र POST /v1/messages/count_tokens ले पठाउनु अघि होस्ट गरिएका ओपन-वेट मोडलहरूका लागि टेक्स्ट वा सम्पूर्ण अनुरोधका टोकन गन्छन्। तिनको आफ्नै पेज छ: टोकन गणना