<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on inference-cache</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/</link><description>Recent content in Reference on inference-cache</description><generator>Hugo</generator><language>en</language><atom:link href="https://cachebox-project.github.io/inference-cache/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>CRD API</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/crd-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/reference/crd-api/</guid><description>&lt;p&gt;All CRDs are in the API group &lt;strong&gt;&lt;code&gt;inferencecache.io&lt;/code&gt;&lt;/strong&gt;, version &lt;strong&gt;&lt;code&gt;v1alpha1&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Kind&lt;/th&gt;
					&lt;th&gt;Scope&lt;/th&gt;
					&lt;th&gt;Short name&lt;/th&gt;
					&lt;th&gt;Reconciled?&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;CacheBackend&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Namespaced&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;cb&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Yes&lt;/td&gt;
					&lt;td&gt;Bind engine Pods to typed MP; optionally provision a remote Redis provider.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;CachePolicy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Namespaced&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;cpol&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Declarative (pushed to server)&lt;/td&gt;
					&lt;td&gt;Per-namespace lookup and eviction tuning.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;CacheTenant&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Namespaced&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;ct&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Declarative (pushed to server)&lt;/td&gt;
					&lt;td&gt;Tenant identity + entry-count quota.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;CacheIndex&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Cluster&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;ci&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Yes (status-only)&lt;/td&gt;
					&lt;td&gt;Cluster-wide mirror of the server aggregate.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PromptTemplate&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Namespaced&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;pt&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Declarative&lt;/td&gt;
					&lt;td&gt;Cache-aware prompt template + stable/mutable slots.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PDTopology&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Namespaced&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;pdt&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Declarative&lt;/td&gt;
					&lt;td&gt;Prefill/decode topology for disaggregated serving.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;div class="alert alert-info" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;v1alpha1 stability&lt;/h4&gt;

 &lt;code&gt;v1alpha1&lt;/code&gt; is not compatibility-frozen before the first production deployment. The CRD may
make breaking schema corrections while the API shape is being finalized. The gRPC/proto
contract follows its own compatibility policy for external consumers.

&lt;/div&gt;



&lt;h2 id="cachebackend"&gt;
CacheBackend
&lt;a href="#cachebackend" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Key &lt;code&gt;spec&lt;/code&gt; fields:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>gRPC API</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/grpc-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/reference/grpc-api/</guid><description>&lt;p&gt;Service &lt;strong&gt;&lt;code&gt;InferenceCache&lt;/code&gt;&lt;/strong&gt;, package &lt;strong&gt;&lt;code&gt;inferencecache.v1alpha1&lt;/code&gt;&lt;/strong&gt;, proto
&lt;code&gt;proto/inferencecache/v1alpha1/inferencecache.proto&lt;/code&gt;. Served on &lt;code&gt;:9090&lt;/code&gt; (plaintext by
default; &lt;a href="https://cachebox-project.github.io/inference-cache/docs/administration/grpc-tls/"&gt;TLS overlay&lt;/a&gt; available). See
&lt;a href="https://cachebox-project.github.io/inference-cache/docs/concepts/grpc-contract/"&gt;The gRPC contract&lt;/a&gt; for the guarantees; this page is the
per-RPC reference.&lt;/p&gt;


&lt;h2 id="consumer-rpcs"&gt;
Consumer RPCs
&lt;a href="#consumer-rpcs" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;


&lt;h3 id="lookuproutelookuprouterequest--lookuprouteresponse"&gt;
&lt;code&gt;LookupRoute(LookupRouteRequest) → LookupRouteResponse&lt;/code&gt;
&lt;a href="#lookuproutelookuprouterequest--lookuprouteresponse" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The core cache-aware routing hint. Unary and fail-open. It does not mutate cache membership
or response-visible routing state. It emits metrics, and a delivered prefix hit under an LFU
policy credits the matched entries&amp;rsquo; internal eviction access counters.&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/reference/metrics/</guid><description>&lt;p&gt;Both inference-cache binaries expose Prometheus metrics on their pod&amp;rsquo;s &lt;code&gt;:8080/metrics&lt;/code&gt;, all prefixed
&lt;code&gt;inferencecache_*&lt;/code&gt;. The two binaries use &lt;strong&gt;separate registries&lt;/strong&gt; — the server&amp;rsquo;s series cover
the index and gRPC handlers; the controller&amp;rsquo;s cover the reconcilers. Standard &lt;code&gt;go_*&lt;/code&gt; and
&lt;code&gt;process_*&lt;/code&gt; collectors are also present but are not part of this schema. Successfully
injected PodLocal LMCache sidecars expose their upstream &lt;code&gt;lmcache_mp_*&lt;/code&gt; metrics separately;
the observability overlay includes a cross-namespace PodMonitor for them.&lt;/p&gt;


&lt;h2 id="server-metrics-inference-cache-server"&gt;
Server metrics (&lt;code&gt;inference-cache-server&lt;/code&gt;)
&lt;a href="#server-metrics-inference-cache-server" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;


&lt;h3 id="gauges"&gt;
Gauges
&lt;a href="#gauges" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Metric&lt;/th&gt;
					&lt;th&gt;Labels&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_server_up&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt; when the server is serving.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_server_grpc_tls_enabled&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt; when gRPC TLS is configured.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_index_entries&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Distinct prefix keys in the index (excludes the reserved probe tenant). Drained models are zeroed, not left stale.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;h3 id="counters"&gt;
Counters
&lt;a href="#counters" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Metric&lt;/th&gt;
					&lt;th&gt;Labels&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_lookup_route_calls_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;model&lt;/code&gt;, &lt;code&gt;reason_code&lt;/code&gt;, &lt;code&gt;hint_used&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Lookups by outcome. &lt;code&gt;hint_used=&amp;quot;true&amp;quot;&lt;/code&gt; ⇔ a non-empty score list (&lt;code&gt;PREFIX_MATCH&lt;/code&gt; / &lt;code&gt;TENANT_HOT&lt;/code&gt; / &lt;code&gt;AFFINITY_HINT&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_index_evictions_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;algorithm&lt;/code&gt; (&lt;code&gt;lru&lt;/code&gt;/&lt;code&gt;lfu&lt;/code&gt;), &lt;code&gt;reason&lt;/code&gt; (&lt;code&gt;cap&lt;/code&gt;/&lt;code&gt;ttl&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Index evictions. &lt;code&gt;reason=&amp;quot;cap&amp;quot;&lt;/code&gt; is the authoritative over-budget signal.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_tenant_evictions_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;tenant_id&lt;/code&gt;, &lt;code&gt;reason&lt;/code&gt; (&lt;code&gt;over_entries&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Per-tenant quota evictions. A bounded non-zero rate is normal Fairness.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_snapshot_auth_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;result&lt;/code&gt; (&lt;code&gt;ok&lt;/code&gt;/&lt;code&gt;unauth&lt;/code&gt;/&lt;code&gt;forbidden&lt;/code&gt;/&lt;code&gt;error&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/snapshot&lt;/code&gt; auth outcomes. Wrong audience lands in &lt;code&gt;unauth&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_policy_auth_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;result&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/policy&lt;/code&gt; auth outcomes.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_probe_auth_total&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;result&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/probe&lt;/code&gt; auth outcomes.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;h3 id="histogram"&gt;
Histogram
&lt;a href="#histogram" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Metric&lt;/th&gt;
					&lt;th&gt;Labels&lt;/th&gt;
					&lt;th&gt;Buckets&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;inferencecache_lookup_route_latency_seconds&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;100µs, 250µs, 500µs, 1ms, 2.5ms, 5ms, 10ms, 25ms, 50ms, 100ms&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;h2 id="controller-metrics-inferencecache-controller"&gt;
Controller metrics (&lt;code&gt;inferencecache-controller&lt;/code&gt;)
&lt;a href="#controller-metrics-inferencecache-controller" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The controller pod has &lt;strong&gt;no Service&lt;/strong&gt; in front of it — scrape it with a &lt;code&gt;PodMonitor&lt;/code&gt; (the
shipped observability bundle includes one) or pod-IP service discovery, or the controller-side
alerts have no series to evaluate.&lt;/p&gt;</description></item><item><title>Reason codes</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/reason-codes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/reference/reason-codes/</guid><description>&lt;p&gt;&lt;code&gt;reason_code&lt;/code&gt; is a &lt;strong&gt;string, not a proto enum&lt;/strong&gt; — new codes can be added without breaking old
clients. &lt;strong&gt;Clients must treat any unrecognized code as the no-hint default&lt;/strong&gt; (fail open,
round-robin).&lt;/p&gt;


&lt;h2 id="lookuproute--lookuppdroute"&gt;
LookupRoute / LookupPDRoute
&lt;a href="#lookuproute--lookuppdroute" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Code&lt;/th&gt;
					&lt;th&gt;When emitted&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;PREFIX_MATCH&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;A replica holds the exact prefix or a leading block-run; the ranker returns a non-empty list; at least one replica clears &lt;code&gt;minimumMatchedTokens&lt;/code&gt; (default 64) &lt;strong&gt;and&lt;/strong&gt; the top score clears &lt;code&gt;routingFloorScore&lt;/code&gt; (default 0.1).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;NO_HINT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The fail-open default: a novel prefix with no affinity fallback, an empty/unspecified key, cold start (globally empty index), a request gated below &lt;code&gt;minimumPrefixTokens&lt;/code&gt;, a sub-floor matched-tokens/score result (with affinity disabled), or a disabled index.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;TENANT_HOT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Prefix miss, &lt;code&gt;strategy.enableTenantHot ≠ false&lt;/code&gt;, and a warm replica exists (recent stats, &lt;code&gt;hit_rate&lt;/code&gt; above the floor, serving the requested scheme). &lt;code&gt;matched_tokens = 0&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;AFFINITY_HINT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Would-be &lt;code&gt;NO_HINT&lt;/code&gt;, &lt;code&gt;affinityRouting: Enabled&lt;/code&gt;, a usable fingerprint, and ≥1 serving replica. A single stable replica; &lt;code&gt;score&lt;/code&gt; / &lt;code&gt;matched_tokens&lt;/code&gt; / &lt;code&gt;estimated_cache_hit_prob&lt;/code&gt; are all &lt;code&gt;0&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;POLICY_REQUIRES_CHAIN&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;strategy.requireChain: true&lt;/code&gt; and the request has no valid block-hash chain. Returned before touching the index.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;TIMEOUT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The lookup deadline expired (context deadline, or &lt;code&gt;lookupTimeoutMs&lt;/code&gt; elapsed). Fail-open. Clients may also synthesize this locally.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;UNKNOWN_TENANT&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Miss, and the (non-empty) &lt;code&gt;tenant_id&lt;/code&gt; has zero entries anywhere (index not globally empty). A contract-key mismatch — likely a misconfigured client.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;UNKNOWN_MODEL&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Miss, tenant known, but &lt;code&gt;(tenant, model)&lt;/code&gt; has zero entries.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;code&gt;UNKNOWN_HASH_SCHEME&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Miss, &lt;code&gt;(tenant, model)&lt;/code&gt; has entries, but none under the request&amp;rsquo;s &lt;code&gt;hash_scheme&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;LookupPDRoute&lt;/code&gt; is a stub today and always returns no hint.&lt;/p&gt;</description></item><item><title>CLI: inferencecache doctor</title><link>https://cachebox-project.github.io/inference-cache/docs/reference/cli-doctor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cachebox-project.github.io/inference-cache/docs/reference/cli-doctor/</guid><description>&lt;p&gt;&lt;code&gt;inferencecache doctor&lt;/code&gt; is a &lt;strong&gt;read-only&lt;/strong&gt; pre-flight diagnostic — the cache-plane analogue
of &lt;code&gt;istioctl analyze&lt;/code&gt;. It runs against a live install, prints stable finding codes, and
returns CI-friendly exit codes. The binary is &lt;code&gt;bin/inferencecache&lt;/code&gt; (from &lt;code&gt;make build&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;inferencecache doctor -n serving
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="checks-and-finding-codes"&gt;
Checks and finding codes
&lt;a href="#checks-and-finding-codes" class="anchor-link"&gt;
 

&lt;svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="24" height="24" viewBox="0 0 24 24"&gt;
 &lt;path d="M0 0h24v24H0z" fill="none"&gt;&lt;/path&gt;
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;After the Kubernetes API prerequisite (check 0), nine diagnostic checks run in a fixed
order. Finding codes are stable and greppable; severity is shown in parentheses.&lt;/p&gt;</description></item></channel></rss>