diff --git a/package-lock.json b/package-lock.json
index 12bd2d8f95..0e90a983ba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10697,6 +10697,7 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
@@ -15527,9 +15528,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
- "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz",
+ "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==",
"license": "MIT",
"funding": {
"type": "opencollective",
diff --git a/package.json b/package.json
index c433f0f8ae..e81c13254e 100644
--- a/package.json
+++ b/package.json
@@ -161,6 +161,7 @@
]
},
"overrides": {
- "dompurify": "^3.3.2"
+ "dompurify": "^3.3.2",
+ "path-to-regexp": "^8.4.0"
}
}
diff --git a/src/app/(dashboard)/dashboard/cache/page.tsx b/src/app/(dashboard)/dashboard/cache/page.tsx
new file mode 100644
index 0000000000..eaa51e4ad6
--- /dev/null
+++ b/src/app/(dashboard)/dashboard/cache/page.tsx
@@ -0,0 +1,340 @@
+"use client";
+
+import { useState, useEffect, useCallback } from "react";
+import { Card, Button, EmptyState } from "@/shared/components";
+import { useNotificationStore } from "@/store/notificationStore";
+import { useTranslations } from "next-intl";
+
+// ─── Types ───────────────────────────────────────────────────────────────────
+
+interface SemanticCacheStats {
+ memoryEntries: number;
+ dbEntries: number;
+ hits: number;
+ misses: number;
+ hitRate: string;
+ tokensSaved: number;
+}
+
+interface IdempotencyStats {
+ activeKeys: number;
+ windowMs: number;
+}
+
+interface CacheStats {
+ semanticCache: SemanticCacheStats;
+ idempotency: IdempotencyStats;
+}
+
+// ─── Sub-components ──────────────────────────────────────────────────────────
+
+function StatCard({
+ icon,
+ label,
+ value,
+ sub,
+ valueClass = "text-text",
+}: {
+ icon: string;
+ label: string;
+ value: string | number;
+ sub?: string;
+ valueClass?: string;
+}) {
+ return (
+
+
+
+ {icon}
+
+ {label}
+
+
{value}
+ {sub &&
{sub}
}
+
+ );
+}
+
+function HitRateBar({ hitRate, label }: { hitRate: number; label: string }) {
+ const colorClass = hitRate >= 70 ? "bg-green-500" : hitRate >= 40 ? "bg-amber-400" : "bg-red-500";
+ const textClass =
+ hitRate >= 70 ? "text-green-500" : hitRate >= 40 ? "text-amber-400" : "text-red-500";
+
+ return (
+
+
+ {label}
+ {hitRate.toFixed(1)}%
+
+
+
+ );
+}
+
+function InfoRow({ icon, children }: { icon: string; children: React.ReactNode }) {
+ return (
+
+
+ {icon}
+
+ {children}
+
+ );
+}
+
+// ─── Page ────────────────────────────────────────────────────────────────────
+
+const REFRESH_INTERVAL_MS = 10_000;
+const REFRESH_INTERVAL_SECONDS = REFRESH_INTERVAL_MS / 1000;
+
+export default function CachePage() {
+ const t = useTranslations("cache");
+ const [stats, setStats] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [clearing, setClearing] = useState(false);
+ const notify = useNotificationStore();
+
+ const fetchStats = useCallback(async () => {
+ try {
+ const res = await fetch("/api/cache");
+ if (res.ok) {
+ const data: CacheStats = await res.json();
+ setStats(data);
+ }
+ } catch (error) {
+ // Network error — keep stale stats rather than clearing the UI
+ console.error("[CachePage] Failed to fetch cache stats:", error);
+ } finally {
+ setLoading(false);
+ }
+ }, []);
+
+ useEffect(() => {
+ void fetchStats();
+ const id = setInterval(() => void fetchStats(), REFRESH_INTERVAL_MS);
+ return () => clearInterval(id);
+ }, [fetchStats]);
+
+ const handleClearAll = async () => {
+ setClearing(true);
+ try {
+ const res = await fetch("/api/cache", { method: "DELETE" });
+ if (res.ok) {
+ const data = await res.json();
+ notify.add({
+ type: "success",
+ message: t("clearSuccess", { count: data.expiredRemoved ?? 0 }),
+ });
+ await fetchStats();
+ } else {
+ notify.add({ type: "error", message: t("clearError") });
+ }
+ } catch (error) {
+ console.error("[CachePage] Failed to clear cache:", error);
+ notify.add({ type: "error", message: t("clearError") });
+ } finally {
+ setClearing(false);
+ }
+ };
+
+ const sc = stats?.semanticCache;
+ const idp = stats?.idempotency;
+ const hitRate = sc ? parseFloat(sc.hitRate) : 0;
+ const totalRequests = sc ? sc.hits + sc.misses : 0;
+
+ return (
+
+ {/* Header */}
+
+
+
{t("title")}
+
{t("description")}
+
+
+
+
+
+
+
+ {/* Loading skeleton */}
+ {loading && (
+
+ {Array.from({ length: 4 }).map((_, i) => (
+
+ ))}
+
+ )}
+
+ {/* Error / empty state */}
+ {!loading && !stats && (
+
void fetchStats()}
+ />
+ )}
+
+ {/* Main content */}
+ {!loading && stats && (
+ <>
+ {/* Stats grid */}
+
+
+
+
+
+
+
+ {/* Hit rate + breakdown */}
+
+
+
+
{t("performance")}
+
+ {t("autoRefresh", { seconds: REFRESH_INTERVAL_SECONDS })}
+
+
+
+
+
+
+ {sc?.hits ?? 0}
+
+
{t("hits")}
+
+
+
+ {sc?.misses ?? 0}
+
+
{t("misses")}
+
+
+
{totalRequests}
+
{t("total")}
+
+
+
+
+
+ {/* Cache behavior */}
+
+
+
{t("behavior")}
+
+ {t("behaviorDeterministic")}
+
+ {t.rich("behaviorBypass", {
+ header: () => (
+
+ X-OmniRoute-No-Cache: true
+
+ ),
+ })}
+
+ {t("behaviorTwoTier")}
+
+ {t.rich("behaviorTtl", {
+ envVar: () => (
+
+ SEMANTIC_CACHE_TTL_MS
+
+ ),
+ })}
+
+
+
+
+
+ {/* Idempotency */}
+
+
+
+
+ fingerprint
+
+
{t("idempotency")}
+
+
+
+
{idp?.activeKeys ?? 0}
+
{t("activeDedupKeys")}
+
+
+
+ {idp ? `${(idp.windowMs / 1000).toFixed(0)}s` : "—"}
+
+
{t("dedupWindow")}
+
+
+
+
+ >
+ )}
+
+ );
+}
diff --git a/src/app/api/cache/route.ts b/src/app/api/cache/route.ts
index 2d759f351f..ebb02dc2f4 100644
--- a/src/app/api/cache/route.ts
+++ b/src/app/api/cache/route.ts
@@ -1,7 +1,18 @@
-import { NextResponse } from "next/server";
-import { getCacheStats, clearCache, cleanExpiredEntries } from "@/lib/semanticCache";
+import { NextRequest, NextResponse } from "next/server";
+import {
+ getCacheStats,
+ clearCache,
+ cleanExpiredEntries,
+ invalidateByModel,
+ invalidateBySignature,
+ invalidateStale,
+} from "@/lib/semanticCache";
import { getIdempotencyStats } from "@/lib/idempotencyLayer";
+function errorMessage(error: unknown): string {
+ return error instanceof Error ? error.message : String(error);
+}
+
/**
* GET /api/cache — Cache statistics
*/
@@ -15,19 +26,67 @@ export async function GET() {
idempotency: idempotencyStats,
});
} catch (error) {
- return NextResponse.json({ error: error.message }, { status: 500 });
+ return NextResponse.json({ error: errorMessage(error) }, { status: 500 });
}
}
/**
- * DELETE /api/cache — Clear all caches
+ * DELETE /api/cache — Clear all caches or targeted invalidation.
+ *
+ * Exactly one optional query parameter may be provided:
+ * ?model= — invalidate all entries for a specific model
+ * ?signature= — invalidate a single entry by its SHA-256 signature
+ * ?staleMs= — invalidate entries older than N milliseconds
+ * (no params) — clear all cache entries
+ *
+ * Providing more than one parameter returns 400 Bad Request.
*/
-export async function DELETE() {
+export async function DELETE(req: NextRequest) {
try {
+ const { searchParams } = new URL(req.url);
+ const model = searchParams.get("model");
+ const signature = searchParams.get("signature");
+ const staleMsParam = searchParams.get("staleMs");
+
+ // Enforce mutual exclusivity — only one invalidation mode per request
+ const paramCount = [model, signature, staleMsParam].filter(Boolean).length;
+ if (paramCount > 1) {
+ return NextResponse.json(
+ {
+ error:
+ "Only one invalidation parameter (model, signature, or staleMs) may be provided per request.",
+ },
+ { status: 400 }
+ );
+ }
+
+ if (model) {
+ const removed = invalidateByModel(model);
+ return NextResponse.json({ ok: true, invalidated: removed, scope: "model", model });
+ }
+
+ if (signature) {
+ const removed = invalidateBySignature(signature);
+ return NextResponse.json({ ok: true, invalidated: removed ? 1 : 0, scope: "signature" });
+ }
+
+ if (staleMsParam) {
+ const maxAgeMs = parseInt(staleMsParam, 10);
+ if (Number.isNaN(maxAgeMs) || maxAgeMs <= 0) {
+ return NextResponse.json(
+ { error: "staleMs must be a positive integer (milliseconds)." },
+ { status: 400 }
+ );
+ }
+ const removed = invalidateStale(maxAgeMs);
+ return NextResponse.json({ ok: true, invalidated: removed, scope: "stale", maxAgeMs });
+ }
+
+ // Full clear
clearCache();
- const cleaned = cleanExpiredEntries();
- return NextResponse.json({ ok: true, expiredRemoved: cleaned });
+ const expiredRemoved = cleanExpiredEntries();
+ return NextResponse.json({ ok: true, expiredRemoved, scope: "all" });
} catch (error) {
- return NextResponse.json({ error: error.message }, { status: 500 });
+ return NextResponse.json({ error: errorMessage(error) }, { status: 500 });
}
}
diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json
index f83044ce85..c32e7a8e93 100644
--- a/src/i18n/messages/ar.json
+++ b/src/i18n/messages/ar.json
@@ -185,7 +185,9 @@
"agents": "وكلاء",
"cliToolsShort": "أدوات",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "المواضيع",
@@ -2847,5 +2849,37 @@
"userInitial": "انا بحاجة الى مساعدة مع",
"userFollowUp": "هل يمكنك توضيح ذلك؟"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json
index 0fa7a693a0..b6c4878290 100644
--- a/src/i18n/messages/bg.json
+++ b/src/i18n/messages/bg.json
@@ -185,7 +185,9 @@
"agents": "Агенти",
"cliToolsShort": "Инструменти",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Теми",
@@ -2847,5 +2849,37 @@
"userInitial": "Имам нужда от помощ за",
"userFollowUp": "Можете ли да разкажете по-подробно за това?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json
index fe874c5e17..702fd2b320 100644
--- a/src/i18n/messages/cs.json
+++ b/src/i18n/messages/cs.json
@@ -185,7 +185,9 @@
"themeViolet": "Fialová",
"themeOrange": "Oranžová",
"themeCyan": "Azurová",
- "cliToolsShort": "Nástroje"
+ "cliToolsShort": "Nástroje",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Motivy",
@@ -2847,5 +2849,37 @@
"userInitial": "Potřebuji pomoct",
"userFollowUp": "Můžete to upřesnit?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json
index 93ccc43bc4..47515358d6 100644
--- a/src/i18n/messages/da.json
+++ b/src/i18n/messages/da.json
@@ -185,7 +185,9 @@
"agents": "Agenter",
"cliToolsShort": "Værktøjer",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Temaer",
@@ -2847,5 +2849,37 @@
"userInitial": "Jeg har brug for hjælp til",
"userFollowUp": "Kan du uddybe det?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json
index ae5d22a5ef..393c1c34fd 100644
--- a/src/i18n/messages/de.json
+++ b/src/i18n/messages/de.json
@@ -185,7 +185,9 @@
"agents": "Agenten",
"cliToolsShort": "Werkzeuge",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themen",
@@ -2847,5 +2849,37 @@
"userInitial": "Ich brauche Hilfe dabei",
"userFollowUp": "Können Sie das näher erläutern?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json
index 6e11c136c2..c5b3d79207 100644
--- a/src/i18n/messages/en.json
+++ b/src/i18n/messages/en.json
@@ -185,7 +185,9 @@
"themeViolet": "Violet",
"themeOrange": "Orange",
"themeCyan": "Cyan",
- "cliToolsShort": "Tools"
+ "cliToolsShort": "Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2849,5 +2851,37 @@
"userInitial": "I need help with",
"userFollowUp": "Can you elaborate on that?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntries": "DB Entries",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHits": "Cache Hits",
+ "cacheHitsSub": "of {total} total",
+ "tokensSaved": "Tokens Saved",
+ "tokensSavedSub": "Estimated from hits",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behavior": "Cache Behavior",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "idempotency": "Idempotency Layer",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running."
}
}
diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json
index ac9164c944..19a9488af0 100644
--- a/src/i18n/messages/es.json
+++ b/src/i18n/messages/es.json
@@ -185,7 +185,9 @@
"agents": "Agentes",
"cliToolsShort": "Herramientas",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Temas",
@@ -2847,5 +2849,37 @@
"userInitial": "necesito ayuda con",
"userFollowUp": "¿Puedes dar más detalles sobre eso?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json
index 07a26af0f0..f27bb8c497 100644
--- a/src/i18n/messages/fi.json
+++ b/src/i18n/messages/fi.json
@@ -185,7 +185,9 @@
"agents": "Agentit",
"cliToolsShort": "Työkalut",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Teemat",
@@ -2847,5 +2849,37 @@
"userInitial": "Tarvitsen apua",
"userFollowUp": "Voitko tarkentaa sitä?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json
index deaf426564..273e04c4e0 100644
--- a/src/i18n/messages/fr.json
+++ b/src/i18n/messages/fr.json
@@ -185,7 +185,9 @@
"agents": "Agents",
"cliToolsShort": "Outils",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Thèmes",
@@ -2847,5 +2849,37 @@
"userInitial": "J'ai besoin d'aide pour",
"userFollowUp": "Pouvez-vous développer cela ?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json
index 66d7eb9958..2654c8f598 100644
--- a/src/i18n/messages/he.json
+++ b/src/i18n/messages/he.json
@@ -185,7 +185,9 @@
"agents": "סוכנים",
"cliToolsShort": "כלים",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "אני צריך עזרה עם",
"userFollowUp": "אתה יכול לפרט על זה?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json
index 3fe453e86f..e8713cf7aa 100644
--- a/src/i18n/messages/hi.json
+++ b/src/i18n/messages/hi.json
@@ -107,7 +107,9 @@
"agents": "एजेंट",
"cliToolsShort": "उपकरण",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2689,5 +2691,37 @@
"domainPlaceholder": "example.com",
"requestTimedOut": "Request timed out ({seconds}s)",
"networkError": "Network error"
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json
index 713c66e87d..5dcb1dcd22 100644
--- a/src/i18n/messages/hu.json
+++ b/src/i18n/messages/hu.json
@@ -185,7 +185,9 @@
"agents": "Ügynökök",
"cliToolsShort": "Eszközök",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Témák",
@@ -2847,5 +2849,37 @@
"userInitial": "Segítségre van szükségem",
"userFollowUp": "Kifejtenéd ezt bővebben?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json
index 17182baa20..5a842d263e 100644
--- a/src/i18n/messages/id.json
+++ b/src/i18n/messages/id.json
@@ -185,7 +185,9 @@
"agents": "Agen",
"cliToolsShort": "Alat",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Saya butuh bantuan",
"userFollowUp": "Bisakah Anda menjelaskannya lebih lanjut?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json
index 556ec1db53..b71c764458 100644
--- a/src/i18n/messages/in.json
+++ b/src/i18n/messages/in.json
@@ -185,7 +185,9 @@
"themeViolet": "बैंगनी",
"themeOrange": "नारंगी",
"themeCyan": "सियान",
- "cliToolsShort": "उपकरण"
+ "cliToolsShort": "उपकरण",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "थीम्स",
@@ -2843,5 +2845,37 @@
"userInitial": "मुझे मदद चाहिए",
"userFollowUp": "क्या आप इसके बारे में विस्तार से बता सकते हैं?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json
index 7522e01614..0a8a1b7b71 100644
--- a/src/i18n/messages/it.json
+++ b/src/i18n/messages/it.json
@@ -185,7 +185,9 @@
"agents": "Agenti",
"cliToolsShort": "Strumenti",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Ho bisogno di aiuto con",
"userFollowUp": "Puoi approfondire questo argomento?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json
index 8562a0940e..e95de736a7 100644
--- a/src/i18n/messages/ja.json
+++ b/src/i18n/messages/ja.json
@@ -185,7 +185,9 @@
"agents": "エージェント",
"cliToolsShort": "ツール",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "助けが必要です",
"userFollowUp": "それについて詳しく教えてもらえますか?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json
index 3ce258c5b9..8bf5e6f603 100644
--- a/src/i18n/messages/ko.json
+++ b/src/i18n/messages/ko.json
@@ -185,7 +185,9 @@
"agents": "에이전트",
"cliToolsShort": "도구",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "도움이 필요해요",
"userFollowUp": "그것에 대해 자세히 설명해주실 수 있나요?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json
index d0eec9f859..65ee78cbb3 100644
--- a/src/i18n/messages/ms.json
+++ b/src/i18n/messages/ms.json
@@ -185,7 +185,9 @@
"agents": "Ejen",
"cliToolsShort": "Alat",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Saya perlukan bantuan",
"userFollowUp": "Bolehkah anda menghuraikan perkara itu?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json
index e5ac8c15ac..6d4091a272 100644
--- a/src/i18n/messages/nl.json
+++ b/src/i18n/messages/nl.json
@@ -185,7 +185,9 @@
"agents": "Agenten",
"cliToolsShort": "Gereedschap",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Ik heb hulp nodig bij",
"userFollowUp": "Kunt u dat nader toelichten?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json
index 913273accb..83f6fa6531 100644
--- a/src/i18n/messages/no.json
+++ b/src/i18n/messages/no.json
@@ -185,7 +185,9 @@
"agents": "Agenter",
"cliToolsShort": "Verktøy",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Jeg trenger hjelp med",
"userFollowUp": "Kan du utdype det?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json
index cd75715b22..1a52ab7911 100644
--- a/src/i18n/messages/phi.json
+++ b/src/i18n/messages/phi.json
@@ -185,7 +185,9 @@
"agents": "Mga Agent",
"cliToolsShort": "Mga Tool",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Kailangan ko ng tulong sa",
"userFollowUp": "Maaari mo bang ipaliwanag iyon?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json
index 912782ac93..ba10dfdc41 100644
--- a/src/i18n/messages/pl.json
+++ b/src/i18n/messages/pl.json
@@ -185,7 +185,9 @@
"agents": "Agenci",
"cliToolsShort": "Narzędzia",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Potrzebuję pomocy",
"userFollowUp": "Możesz to rozwinąć?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json
index 247e6815bb..9580eb8410 100644
--- a/src/i18n/messages/pt-BR.json
+++ b/src/i18n/messages/pt-BR.json
@@ -185,7 +185,9 @@
"playground": "Playground",
"agents": "Agentes",
"cliToolsShort": "Ferramentas",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2865,5 +2867,37 @@
"userInitial": "preciso de ajuda com",
"userFollowUp": "Você pode explicar isso?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json
index 56c17b371c..06f9ca808f 100644
--- a/src/i18n/messages/pt.json
+++ b/src/i18n/messages/pt.json
@@ -185,7 +185,9 @@
"agents": "Agentes",
"cliToolsShort": "Ferramentas",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "preciso de ajuda com",
"userFollowUp": "Você pode explicar isso?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json
index 094ffb737d..724d4773d7 100644
--- a/src/i18n/messages/ro.json
+++ b/src/i18n/messages/ro.json
@@ -185,7 +185,9 @@
"agents": "Agenți",
"cliToolsShort": "Instrumente",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Am nevoie de ajutor cu",
"userFollowUp": "Puteți detalia asta?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json
index 0051c1f4d8..de34de5cda 100644
--- a/src/i18n/messages/ru.json
+++ b/src/i18n/messages/ru.json
@@ -185,7 +185,9 @@
"agents": "Агенты",
"cliToolsShort": "Инструменты",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Темы",
@@ -2847,5 +2849,37 @@
"userInitial": "мне нужна помощь с",
"userFollowUp": "Можете ли вы рассказать об этом подробнее?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json
index 4d09320aa5..ecd64092f4 100644
--- a/src/i18n/messages/sk.json
+++ b/src/i18n/messages/sk.json
@@ -185,7 +185,9 @@
"agents": "Agenti",
"cliToolsShort": "Nástroje",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Potrebujem pomoc s",
"userFollowUp": "Môžete to upresniť?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json
index 47647d700e..faa78450da 100644
--- a/src/i18n/messages/sv.json
+++ b/src/i18n/messages/sv.json
@@ -185,7 +185,9 @@
"agents": "Agenter",
"cliToolsShort": "Verktyg",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Jag behöver hjälp med",
"userFollowUp": "Kan du utveckla det?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json
index 638536fdf0..65d0d1cdfb 100644
--- a/src/i18n/messages/th.json
+++ b/src/i18n/messages/th.json
@@ -185,7 +185,9 @@
"agents": "เอเจนต์",
"cliToolsShort": "เครื่องมือ",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "ธีมส์",
@@ -2847,5 +2849,37 @@
"userInitial": "ฉันต้องการความช่วยเหลือเกี่ยวกับ",
"userFollowUp": "คุณช่วยอธิบายรายละเอียดเกี่ยวกับเรื่องนั้นได้ไหม?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json
index e284cb6a17..03bf90b266 100644
--- a/src/i18n/messages/uk-UA.json
+++ b/src/i18n/messages/uk-UA.json
@@ -185,7 +185,9 @@
"agents": "Агенти",
"cliToolsShort": "Інструменти",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Мені потрібна допомога з",
"userFollowUp": "Чи можете ви розповісти про це?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json
index 60272e01be..d0ea7b6160 100644
--- a/src/i18n/messages/vi.json
+++ b/src/i18n/messages/vi.json
@@ -185,7 +185,9 @@
"agents": "Tác nhân",
"cliToolsShort": "Công cụ",
"autoCombo": "Auto Combo",
- "searchTools": "Search Tools"
+ "searchTools": "Search Tools",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "Themes",
@@ -2847,5 +2849,37 @@
"userInitial": "Tôi cần giúp đỡ với",
"userFollowUp": "Bạn có thể giải thích về điều đó?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json
index f2dcc08de7..44ea4b62cb 100644
--- a/src/i18n/messages/zh-CN.json
+++ b/src/i18n/messages/zh-CN.json
@@ -185,7 +185,9 @@
"themeViolet": "紫罗兰",
"themeOrange": "橙色",
"themeCyan": "青色",
- "cliToolsShort": "工具"
+ "cliToolsShort": "工具",
+ "cache": "Cache",
+ "cacheShort": "Cache"
},
"themesPage": {
"title": "主题",
@@ -2843,5 +2845,37 @@
"userInitial": "我需要帮助来处理",
"userFollowUp": "你可以再详细说明一下吗?"
}
+ },
+ "cache": {
+ "title": "Cache Management",
+ "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
+ "refresh": "Refresh",
+ "clearAll": "Clear All",
+ "memoryEntries": "Memory Entries",
+ "dbEntries": "DB Entries",
+ "cacheHits": "Cache Hits",
+ "tokensSaved": "Tokens Saved",
+ "hitRate": "Hit Rate",
+ "performance": "Cache Performance",
+ "behavior": "Cache Behavior",
+ "idempotency": "Idempotency Layer",
+ "clearSuccess": "Cache cleared. {count} expired entries removed.",
+ "clearError": "Failed to clear cache.",
+ "unavailable": "Cache unavailable",
+ "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
+ "memoryEntriesSub": "In-memory LRU",
+ "dbEntriesSub": "Persisted (SQLite)",
+ "cacheHitsSub": "of {total} total",
+ "tokensSavedSub": "Estimated from hits",
+ "autoRefresh": "Auto-refreshes every {seconds}s",
+ "hits": "Hits",
+ "misses": "Misses",
+ "total": "Total",
+ "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
+ "behaviorBypass": "Bypass with header {header}.",
+ "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
+ "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
+ "activeDedupKeys": "Active Dedup Keys",
+ "dedupWindow": "Dedup Window"
}
}
diff --git a/src/shared/components/Sidebar.tsx b/src/shared/components/Sidebar.tsx
index 74dc85b895..24165899dc 100644
--- a/src/shared/components/Sidebar.tsx
+++ b/src/shared/components/Sidebar.tsx
@@ -21,6 +21,7 @@ const navItemDefs = [
{ href: "/dashboard/costs", i18nKey: "costs", icon: "account_balance_wallet" },
{ href: "/dashboard/analytics", i18nKey: "analytics", icon: "analytics" },
{ href: "/dashboard/limits", i18nKey: "limits", icon: "tune" },
+ { href: "/dashboard/cache", i18nKey: "cache", icon: "cached" },
];
const cliItemDefs = [