Technical reference
प्रॉम्प्ट कैशिंग
प्रॉम्प्ट कैशिंग का अर्थ है कि मॉडल प्रदाता हर बार उन्हें दोबारा प्रोसेस करने के बजाय टर्नों में अपरिवर्तित प्रॉम्प्ट प्रीफिक्स (आमतौर पर सिस्टम/डेवलपर निर्देश और अन्य स्थिर संदर्भ) का पुन: उपयोग कर सकता है। OpenClaw प्रदाता उपयोग को cacheRead और cacheWrite में सामान्यीकृत करता है, जहां upstream API उन काउंटरों को सीधे उजागर करता है।
जब live session snapshot में कैश काउंटर मौजूद नहीं होते, तो status सतहें सबसे हालिया transcript
usage log से भी कैश काउंटर पुनर्प्राप्त कर सकती हैं, ताकि /status आंशिक session metadata loss के बाद भी
कैश लाइन दिखाता रहे। मौजूदा nonzero live
cache values अब भी transcript fallback values पर प्राथमिकता रखते हैं।
यह क्यों मायने रखता है: कम टोकन लागत, तेज प्रतिक्रियाएं, और लंबे समय तक चलने वाले सेशनों के लिए अधिक पूर्वानुमेय प्रदर्शन। कैशिंग के बिना, दोहराए गए प्रॉम्प्ट हर टर्न पर पूरी प्रॉम्प्ट लागत चुकाते हैं, भले ही अधिकांश इनपुट नहीं बदला हो।
नीचे के अनुभाग हर उस cache-related knob को कवर करते हैं जो प्रॉम्प्ट reuse और token cost को प्रभावित करता है।
Provider संदर्भ:
- Anthropic prompt caching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching
- OpenAI prompt caching: https://developers.openai.com/api/docs/guides/prompt-caching
- OpenAI API headers and request IDs: https://developers.openai.com/api/reference/overview
- Anthropic request IDs and errors: https://platform.claude.com/docs/en/api/errors
प्राथमिक knobs
cacheRetention (global default, model, और per-agent)
सभी मॉडलों के लिए global default के रूप में cache retention सेट करें:
agents: defaults: params: cacheRetention: "long" # none | short | longper-model override करें:
agents: defaults: models: "anthropic/claude-opus-4-6": params: cacheRetention: "short" # none | short | longPer-agent override:
agents: list: - id: "alerts" params: cacheRetention: "none"Config merge order:
agents.defaults.params(global default — सभी मॉडलों पर लागू होता है)agents.defaults.models["provider/model"].params(per-model override)agents.list[].params(matching agent id; key के आधार पर override करता है)
contextPruning.mode: "cache-ttl"
cache TTL windows के बाद पुराने tool-result context को prune करता है ताकि post-idle requests oversized history को दोबारा cache न करें।
agents: defaults: contextPruning: mode: "cache-ttl" ttl: "1h"पूर्ण व्यवहार के लिए Session Pruning देखें।
Heartbeat keep-warm
Heartbeat cache windows को warm रख सकता है और idle gaps के बाद दोहराए गए cache writes को कम कर सकता है।
agents: defaults: heartbeat: every: "55m"Per-agent heartbeat agents.list[].heartbeat पर समर्थित है।
Provider व्यवहार
Anthropic (direct API)
cacheRetentionसमर्थित है।- Anthropic API-key auth profiles के साथ, जब unset हो तो OpenClaw Anthropic model refs के लिए
cacheRetention: "short"seed करता है। - Anthropic native Messages responses
cache_read_input_tokensऔरcache_creation_input_tokensदोनों expose करते हैं, इसलिए OpenClawcacheReadऔरcacheWriteदोनों दिखा सकता है। - native Anthropic requests के लिए,
cacheRetention: "short"default 5-minute ephemeral cache पर map होता है, औरcacheRetention: "long"केवल directapi.anthropic.comhosts पर 1-hour TTL में upgrade करता है।
OpenAI (direct API)
- समर्थित recent models पर prompt caching automatic है। OpenClaw को block-level cache markers inject करने की जरूरत नहीं है।
- OpenClaw turns में cache routing stable रखने के लिए
prompt_cache_keyका उपयोग करता है। Direct OpenAI hostscacheRetention: "long"चुने जाने परprompt_cache_retention: "24h"का उपयोग करते हैं। - OpenAI-compatible Completions providers को
prompt_cache_keyकेवल तब मिलता है जब उनका model config स्पष्ट रूप सेcompat.supportsPromptCacheKey: trueसेट करता है। Long-retention forwarding एक अलग capability है: explicitcacheRetention: "long"prompt_cache_retention: "24h"केवल तब भेजता है जब वह compat entry long cache retention को भी support करती हो। Mistral जैसे Providers cache keys में opt in कर सकते हैं और long-retention field को suppress करने के लिएcompat.supportsLongCacheRetention: falseसेट कर सकते हैं।cacheRetention: "none"दोनों fields को suppress करता है। - OpenAI responses cached prompt tokens को
usage.prompt_tokens_details.cached_tokens(या Responses API events परinput_tokens_details.cached_tokens) के माध्यम से expose करते हैं। OpenClaw उसेcacheReadपर map करता है। - GPT-5.6 Responses usage
input_tokens_details.cache_write_tokensभी expose कर सकता है। OpenClaw उसेcacheWriteपर map करता है और model की cache-write rate पर उसकी कीमत लगाता है; जो Responses field omit करते हैं, वेcacheWriteको0पर रखते हैं। - OpenAI
x-request-id,openai-processing-ms, औरx-ratelimit-*जैसे उपयोगी tracing और rate-limit headers लौटाता है, लेकिन cache-hit accounting usage payload से आनी चाहिए, headers से नहीं। - व्यवहार में, OpenAI अक्सर Anthropic-style moving full-history reuse के बजाय initial-prefix cache जैसा व्यवहार करता है। Stable long-prefix text turns मौजूदा live probes में लगभग
4864cached-token plateau के पास land कर सकते हैं, जबकि tool-heavy या MCP-style transcripts exact repeats पर भी अक्सर लगभग4608cached tokens के पास plateau करते हैं।
Anthropic Vertex
- Vertex AI (
anthropic-vertex/*) पर Anthropic models direct Anthropic की तरह हीcacheRetentionsupport करते हैं। cacheRetention: "long"Vertex AI endpoints पर वास्तविक 1-hour prompt-cache TTL पर map होता है।anthropic-vertexके लिए default cache retention direct Anthropic defaults से match करता है।- Vertex requests boundary-aware cache shaping के माध्यम से route किए जाते हैं ताकि cache reuse providers को वास्तव में मिलने वाली चीज़ों से aligned रहे।
Amazon Bedrock
- Anthropic Claude model refs (
amazon-bedrock/*anthropic.claude*) explicitcacheRetentionpass-through support करते हैं। - Non-Anthropic Bedrock models runtime पर forced to
cacheRetention: "none"होते हैं।
OpenRouter models
openrouter/anthropic/* model refs के लिए, OpenClaw prompt-cache
reuse सुधारने के लिए system/developer prompt blocks पर Anthropic
cache_control inject करता है, केवल तब जब request अभी भी verified OpenRouter route
(openrouter उसके default endpoint पर, या कोई भी provider/base URL जो
openrouter.ai पर resolve होता है) को target कर रही हो।
openrouter/deepseek/*, openrouter/moonshot*/*, और openrouter/zai/*
model refs के लिए, contextPruning.mode: "cache-ttl" allowed है क्योंकि OpenRouter
provider-side prompt caching automatically handle करता है। OpenClaw उन requests में
Anthropic cache_control markers inject नहीं करता।
DeepSeek cache construction best-effort है और इसमें कुछ सेकंड लग सकते हैं। एक
immediate follow-up अब भी cached_tokens: 0 दिखा सकता है; थोड़ी देरी के बाद repeated
same-prefix request से verify करें और cache-hit signal के रूप में usage.prompt_tokens_details.cached_tokens
का उपयोग करें।
यदि आप model को किसी arbitrary OpenAI-compatible proxy URL पर repoint करते हैं, तो OpenClaw उन OpenRouter-specific Anthropic cache markers को inject करना बंद कर देता है।
अन्य providers
यदि provider इस cache mode को support नहीं करता, तो cacheRetention का कोई प्रभाव नहीं होता।
Google Gemini direct API
- Direct Gemini transport (
api: "google-generative-ai") upstreamcachedContentTokenCountके माध्यम से cache hits report करता है; OpenClaw उसेcacheReadपर map करता है। - जब direct Gemini model पर
cacheRetentionसेट होता है, तो OpenClaw Google AI Studio runs पर system prompts के लिएcachedContentsresources automatically create, reuse, और refresh करता है। इसका अर्थ है कि अब आपको cached-content handle manually pre-create करने की जरूरत नहीं है। - आप configured model पर
params.cachedContent(या legacyparams.cached_content) के रूप में pre-existing Gemini cached-content handle अब भी pass कर सकते हैं। - यह Anthropic/OpenAI prompt-prefix caching से अलग है। Gemini के लिए,
OpenClaw request में cache markers inject करने के बजाय provider-native
cachedContentsresource manage करता है।
Gemini CLI usage
- Gemini CLI
stream-jsonoutputstats.cachedके माध्यम से cache hits surface कर सकता है; OpenClaw उसेcacheReadपर map करता है। Legacy--output-format jsonoverrides वही usage normalization उपयोग करते हैं। - यदि CLI direct
stats.inputvalue omit करता है, तो OpenClaw input tokens कोstats.input_tokens - stats.cachedसे derive करता है। - यह केवल usage normalization है। इसका अर्थ यह नहीं है कि OpenClaw Gemini CLI के लिए Anthropic/OpenAI-style prompt-cache markers create कर रहा है।
System-prompt cache boundary
OpenClaw system prompt को एक stable prefix और एक volatile
suffix में split करता है, जिन्हें internal cache-prefix boundary अलग करती है। Boundary के ऊपर की सामग्री
(tool definitions, skills metadata, workspace files, और अन्य
relatively static context) इस तरह ordered होती है कि वह turns में byte-identical रहे।
Boundary के नीचे की सामग्री (उदाहरण के लिए HEARTBEAT.md, runtime timestamps, और
अन्य per-turn metadata) cached
prefix को invalid किए बिना बदल सकती है।
मुख्य design choices:
- Stable workspace project-context files को
HEARTBEAT.mdसे पहले ordered किया जाता है ताकि heartbeat churn stable prefix को bust न करे। - Boundary Anthropic-family, OpenAI-family, Google, और CLI transport shaping में apply की जाती है ताकि सभी supported providers को उसी prefix stability से benefit मिले।
- Codex Responses और Anthropic Vertex requests boundary-aware cache shaping के माध्यम से route किए जाते हैं ताकि cache reuse providers को वास्तव में मिलने वाली चीज़ों से aligned रहे।
- System-prompt fingerprints normalized होते हैं (whitespace, line endings, hook-added context, runtime capability ordering) ताकि semantically unchanged prompts turns में KV/cache share करें।
यदि config या workspace change के बाद unexpected cacheWrite spikes दिखें,
तो जांचें कि change cache boundary के ऊपर land करता है या नीचे। Volatile content को
boundary के नीचे move करना (या उसे stabilize करना) अक्सर issue resolve करता है।
OpenClaw cache-stability guards
OpenClaw request के provider तक पहुंचने से पहले कई cache-sensitive payload shapes को deterministic भी रखता है:
- Bundle MCP tool catalogs tool
registration से पहले deterministically sorted होते हैं, ताकि
listTools()order changes tools block को churn न करें और prompt-cache prefixes को bust न करें। - Persisted image blocks वाले legacy sessions 3 most recent completed turns intact रखते हैं; पुराने already-processed image blocks को marker से replace किया जा सकता है ताकि image-heavy follow-ups large stale payloads को दोबारा भेजते न रहें।
Tuning patterns
Mixed traffic (recommended default)
अपने main agent पर long-lived baseline रखें, bursty notifier agents पर caching disable करें:
agents: defaults: model: primary: "anthropic/claude-opus-4-6" models: "anthropic/claude-opus-4-6": params: cacheRetention: "long" list: - id: "research" default: true heartbeat: every: "55m" - id: "alerts" params: cacheRetention: "none"Cost-first baseline
- Baseline
cacheRetention: "short"सेट करें। contextPruning.mode: "cache-ttl"enable करें।- केवल उन agents के लिए heartbeat को अपने TTL से कम रखें जिन्हें warm caches से benefit होता है।
Cache diagnostics
OpenClaw embedded agent runs के लिए dedicated cache-trace diagnostics expose करता है।
Normal user-facing diagnostics के लिए, /status और अन्य usage summaries
cacheRead /
cacheWrite के लिए fallback source के रूप में latest transcript usage entry का उपयोग कर सकते हैं
जब live session entry में वे counters नहीं होते।
Live regression tests
OpenClaw repeated prefixes, tool turns, image turns, MCP-style tool transcripts, और Anthropic no-cache control के लिए एक combined live cache regression gate रखता है।
src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-baseline.ts
Narrow live gate इस तरह run करें:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheबेसलाइन फ़ाइल सबसे हाल ही में देखी गई लाइव संख्याएँ और परीक्षण द्वारा उपयोग की जाने वाली प्रदाता-विशिष्ट रिग्रेशन न्यूनतम सीमाएँ संग्रहीत करती है। रनर ताज़ा प्रति-रन सेशन ID और प्रॉम्प्ट नेमस्पेस भी उपयोग करता है ताकि पिछली कैश स्थिति वर्तमान रिग्रेशन नमूने को प्रदूषित न करे।
ये परीक्षण जानबूझकर सभी प्रदाताओं में समान सफलता मानदंडों का उपयोग नहीं करते।
Anthropic लाइव अपेक्षाएँ
cacheWriteके माध्यम से स्पष्ट वार्मअप writes की अपेक्षा करें।- दोहराए गए turns पर लगभग पूरे इतिहास के पुनः उपयोग की अपेक्षा करें, क्योंकि Anthropic cache control बातचीत के माध्यम से कैश ब्रेकपॉइंट को आगे बढ़ाता है।
- मौजूदा लाइव assertions अभी भी stable, tool, और image पथों के लिए उच्च hit-rate thresholds का उपयोग करती हैं।
OpenAI लाइव अपेक्षाएँ
- केवल
cacheReadकी अपेक्षा करें।cacheWrite0ही रहता है। - repeated-turn cache reuse को Anthropic-शैली के moving full-history reuse के बजाय प्रदाता-विशिष्ट plateau मानें।
- मौजूदा लाइव assertions
gpt-5.4-miniपर देखे गए लाइव व्यवहार से निकले conservative floor checks का उपयोग करती हैं:- stable prefix:
cacheRead >= 4608, hit rate>= 0.90 - tool transcript:
cacheRead >= 4096, hit rate>= 0.85 - image transcript:
cacheRead >= 3840, hit rate>= 0.82 - MCP-style transcript:
cacheRead >= 4096, hit rate>= 0.85
- stable prefix:
2026-04-04 पर ताज़ा संयुक्त लाइव verification यहाँ पहुँचा:
- stable prefix:
cacheRead=4864, hit rate0.966 - tool transcript:
cacheRead=4608, hit rate0.896 - image transcript:
cacheRead=4864, hit rate0.954 - MCP-style transcript:
cacheRead=4608, hit rate0.891
संयुक्त gate के लिए हालिया स्थानीय wall-clock समय लगभग 88s था।
assertions अलग क्यों हैं:
- Anthropic स्पष्ट cache breakpoints और moving conversation-history reuse उजागर करता है।
- OpenAI prompt caching अभी भी exact-prefix sensitive है, लेकिन लाइव Responses traffic में प्रभावी reusable prefix पूरे prompt से पहले plateau हो सकता है।
- इसके कारण, Anthropic और OpenAI की तुलना एक ही cross-provider percentage threshold से करने पर false regressions बनते हैं।
diagnostics.cacheTrace config
diagnostics: cacheTrace: enabled: true filePath: "~/.openclaw/logs/cache-trace.jsonl" # optional includeMessages: false # default true includePrompt: false # default true includeSystem: false # default trueDefaults:
filePath:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonlincludeMessages:trueincludePrompt:trueincludeSystem:true
Env toggles (एक-बार debugging)
OPENCLAW_CACHE_TRACE=1cache tracing सक्षम करता है।OPENCLAW_CACHE_TRACE_FILE=/path/to/cache-trace.jsonloutput path को override करता है।OPENCLAW_CACHE_TRACE_MESSAGES=0|1full message payload capture को toggle करता है।OPENCLAW_CACHE_TRACE_PROMPT=0|1prompt text capture को toggle करता है।OPENCLAW_CACHE_TRACE_SYSTEM=0|1system prompt capture को toggle करता है।
क्या inspect करें
- Cache trace events JSONL होते हैं और
session:loaded,prompt:before,stream:context, औरsession:afterजैसे staged snapshots शामिल करते हैं। - Per-turn cache token impact सामान्य usage surfaces में
cacheReadऔरcacheWriteके माध्यम से दिखाई देता है (उदाहरण के लिए/usage tokens,/status, session usage summaries, और custommessages.usageTemplatelayouts)। - Anthropic के लिए, caching सक्रिय होने पर
cacheReadऔरcacheWriteदोनों की अपेक्षा करें। - OpenAI के लिए, cache hits पर
cacheReadकी अपेक्षा करें। GPT-5.6 Responses prompt segments लिखे जाते समयcacheWriteभी report कर सकते हैं; अन्य Responses payloads जो write counter छोड़ देते हैं, उसे0पर रखते हैं। - यदि आपको request tracing चाहिए, तो request IDs और rate-limit headers को cache metrics से अलग log करें। OpenClaw का मौजूदा cache-trace output raw provider response headers के बजाय prompt/session shape और normalized token usage पर केंद्रित है।
त्वरित troubleshooting
- अधिकांश turns पर उच्च
cacheWrite: volatile system-prompt inputs की जाँच करें और verify करें कि model/provider आपकी cache settings का समर्थन करता है। - Anthropic पर उच्च
cacheWrite: अक्सर इसका मतलब है कि cache breakpoint ऐसी content पर landing कर रहा है जो हर request में बदलती है। - कम OpenAI
cacheRead: verify करें कि stable prefix front पर है, repeated prefix कम से कम 1024 tokens है, और वहीprompt_cache_keyउन turns के लिए reuse होता है जिन्हें cache साझा करना चाहिए। cacheRetentionसे कोई प्रभाव नहीं: confirm करें कि model keyagents.defaults.models["provider/model"]से मेल खाती है।- cache settings के साथ Bedrock Nova/Mistral requests: runtime द्वारा
noneपर force किया जाना expected है।
संबंधित docs: