İstem önbelleğe alma
OTOMATİKBarındırılan açık ağırlıklı modeller, tekrarlanan istem önköklerini otomatik olarak önbelleğe alır. Bir istek, aynı modeldeki yakın tarihli bir istekle aynı sistem istemi, araçlar ve önceki mesajlarla başladığında, bu paylaşılan önkök önbellekten okunur ve modelin giriş fiyatının %25'i üzerinden faturalandırılır. Etkinleştirilecek bir şey yoktur ve önbellek yazımları ücretsizdir.
Nasıl çalışır
- Sıralı önkök — İstem sırayla okunur: sistem istemi, araç tanımları ve ardından mesajlar. Önbellek, bu dizinin başından farklı olan ilk token'a kadar eşleşir.
- Ne hit sayılır — İstemi, yakın tarihli bir istekle aynı içerikle başlayan bir istek — genellikle yeni mesajlar eklenmiş aynı konuşmanın önceki turu. Eşleşen önkök önbelleğe alınmış giriştir; sonrasındaki her şey normal giriştir.
- Granülarite — Önbellek bir istemi 1,568 token'lık bloklar halinde tutar, bu yüzden yaklaşık 1,500 token'dan kısa bir istem önbelleğe alınmaz. Bir yanıttaki önbellek sayısı, giriş sayınızın istemin önbellekteki payıyla çarpılıp aşağı yuvarlanmasıdır. Blok boyutunun katı olması gerekmez.
- Hit olmadan — Başlangıcı önbellekte olmayan bir istek normal giriş fiyatıyla faturalandırılır. Önbelleğe alınmış istemler için bir ömür yayımlanmaz ve hit garanti edilmez: bir isteğin önbellekten ne aldığını görmek için
usagealanını okuyun. - Anahtar yok — Bir istek bu özelliğe katılmaz ve hiçbir alan önbelleğe almayı kapatmaz.
- Hangi modeller — Her barındırılan açık ağırlıklı ID. GET /v1/models, onlar için capabilities.prompt_caching: true ve pricing.cached_input_per_million_usd değerlerini bildirir. Shannon modelleri tek bir sabit oranla faturalandırılır.
Bir yanıtta önbellek hiti görün
Aynı uzun sistem istemiyle başlayan iki istek gönderin ve her birinin kullanım bilgisini yazdırın. İlk sayı isteğin girdisidir, ikincisi bunun önbellekten okunan kısmıdır.
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 Fiyatlandırma
Önbelleğe alınmış giriş tokenları, modelin giriş oranının %25'i üzerinden, 1M başına $0.001'e yuvarlanarak faturalandırılır. Önbelleğe yazmak ekstra bir maliyet getirmez ve çıkış her zamanki gibi faturalandırılır. Her ID'nin önbellek oranı Modeller ve fiyatlandırma tablosundadır. Modeller ve fiyatlandırma
Bir çağrının girdisi (giriş − önbellek) × giriş fiyatı + önbellek × önbellek fiyatı olarak ücretlendirilir. Önbellek sayısı hiçbir zaman giriş sayısından büyük olmaz.
| Model | Giriş / 1M | Önbelleğe alınmış giriş / 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 |
Kullanım günlüğü her çağrının önbelleğe alınmış girdisini listeler. Faturalandırılan token'lar ve maliyet önbellek fiyatını zaten içerir. Keys & usage
Kullanım alanları
| Uç nokta | Önbelleğe alınmış giriş | Akıl yürütme |
|---|---|---|
/v1/chat/completions | usage.prompt_tokens_details.cached_tokens — prompt_tokens'ın bir parçası | usage.completion_tokens_details.reasoning_tokens — completion_tokens'ın bir parçası |
/v1/responses | usage.input_tokens_details.cached_tokens — input_tokens'ın bir parçası | usage.output_tokens_details.reasoning_tokens — output_tokens'ın bir parçası |
/v1/messages | usage.cache_read_input_tokens — ayrı bildirilir: input_tokens önbelleğe alınmamış kısımdır; cache_creation_input_tokens her zaman 0'dır | düşünme süreci output_tokens içinde sayılır |
{
"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
}
} Akışlı bir yanıt son kullanım bilgisinde aynı alanları taşır. Bunu istemeniz gerekmez:
| Uç nokta | Kullanımın geldiği yer |
|---|---|
/v1/chat/completions | data: [DONE] öncesindeki son parçada usage. Her akışta gönderilir. |
/v1/responses | response.completed olayının response.usage alanı. |
/v1/messages | message_delta olayının usage alanı. message_start olayının usage alanı sıfırlardan oluşur. |
Daha fazla önbellek hiti alma
- Sistem istemini ve araç tanımlarını çağrılar arasında bayt düzeyinde sabit tutun. Zaman damgaları veya istek ID'leri gibi çağrıya özel değerleri sistem istemine değil, en son mesajın sonuna ekleyin.
- Geçmişe yalnızca ekleme yapın. Önceki turları düzenlemek, kırpmak veya özetlemek önkökü değiştirir ve ilk değişiklikten sonraki her şey normal giriş olarak faturalandırılır.
- Çağrılar arasında araçların, mesajların veya içerik bloklarının sırasını değiştirmeyin ve JSON'ı (araç şemaları, araç bağımsız değişkenleri ve sonuçları) her seferinde aynı şekilde serileştirin.
- Bir konuşma boyunca tek bir model kimliğinde kalın ve devam çağrısını bir öncekinden hemen sonra gönderin.
API, bir konuşmanın başlangıcını şu durumlarda kararlı tutar:
- Bir konuşmada sonradan gönderilen
systemveyadevelopermesajı yerinde kalır. İstemin başlangıcını değiştirmez, bu yüzden ondan önceki turlar önbellekte kalır. - Önceki assistant turlarındaki araç çağrılarının bağımsız değişkenleri değere göre karşılaştırılır. O JSON'ın anahtar sırası ve boşlukları önemli değildir.
- Üç uç nokta bir konuşmayı aynı şekilde okur. Başka bir uç noktada sürdürülen konuşma, içerik aynıysa ortak önekini korur.
İstek alanları
prompt_cache_key (Chat Completions ve Responses) ve Messages içerik bloklarındaki cache_control kabul edilir, böylece mevcut istemci kodu değişmeden çalışır. Hiçbiri zorunlu değildir: önbelleğe alma otomatiktir ve onlar olmadan da aynı şekilde çalışır.
| Alan | Gönderildiği yer | Ne olduğu |
|---|---|---|
prompt_cache_key | /v1/chat/completions, /v1/responses | OpenAI API'sinin bir önbellek yönlendirme anahtarı. |
cache_control | /v1/messages | Anthropic API'sinin bir içerik bloğundaki, bir system bloğundaki veya bir mesajdaki önbellek kesme noktası. |
stream_options | /v1/chat/completions | include_usage, OpenAI API'sinden bir akışta kullanım bilgisi ister. Burada her akış kullanım bilgisiyle biter. |
Token sayımı
İki ücretsiz uç nokta, POST /v1/tokenize ve POST /v1/messages/count_tokens, bir metnin veya tüm bir isteğin token sayısını göndermeden önce host edilen açık ağırlıklı modeller için sayar. Bunların kendi sayfası var: Token sayma