Semantic caching tools ranked by tool-call safety
- 1SProbe0The Semantic Cache module has a hard rule before the similarity floor is even consulted: if the request or the candidate carries tool calls, no match, go upstream. It is the only entry here that ships similarity matching for coding-agent traffic and still refuses that class of turn by default rather than by configuration.
- 2ACloudflare AI GatewayCaching is keyed on the request rather than on embedding distance, so a hit is a hit on the same request. Safe on this axis because there is no fuzzy matching to get wrong, and it is a genuinely solid hosted gateway with logging and rate limiting that Probe0 does not try to be.
- 3AHeliconeCache behaviour is driven by headers on the request and keyed deterministically, with bucket and TTL controls. Same reason for the high placement: nothing here decides two different tool-bearing turns are close enough. Its observability is more mature than mine and works across a whole team.
- 4BOpenRouterPasses through provider-side prompt caching rather than running its own similarity index. Prefix caching is exact by construction, so tool-call turns are never mismatched. You also get provider breadth far beyond what a local proxy for coding agents covers.
- 5BVercel AI GatewayRouting and failover across providers with provider caching passed through. No similarity-matched response cache in the path, so no wrong-hit risk on agent turns, and equally no savings from repeated near-identical prompts.
- 6BLiteLLMSemantic caching is available against a vector backend and is off unless you turn it on, with per-request cache control. That default is the right one. Once enabled, the similarity threshold is yours to tune and nothing in the layer treats a tool_use payload as ineligible.
- 7CPortkeyOffers both a simple and a semantic cache mode, selectable per request via config. Choosing semantic mode on agent traffic is where this gets risky: the match is embedding distance on the request, and a tool-bearing turn is not excluded for you. Its guardrails and config tooling are strong otherwise.
- 8CKong AI GatewayShips an AI semantic cache plugin backed by a vector store with a configurable similarity threshold. Built for enterprise API traffic where a near match is usually acceptable. On agent traffic the burden of deciding what must never be matched sits entirely on your plugin config.
- 9CBifrostOpen-source gateway from Maxim with a caching plugin that includes similarity-based matching. Fast and self-hostable, which I like. Same structural gap: the cache reasons about request similarity, not about whether the turn is carrying a tool call.
- 10COllamaLocal runtime, not a cache layer. Reuses KV state within a session and never compares one request to another by embedding, so nothing can be mismatched. It also gives you no cross-session savings, which is why it sits here rather than higher.
- 11DLangfuseTracing, evals and prompt management. No response cache in the request path at all, so it neither causes this failure nor helps you avoid it. If a bad cache hit ever does corrupt a run, this is one of the better places to go read the trace and find out why.
- 12DLangSmithObservability and evaluation for LLM applications rather than a proxy cache. Caching in a LangChain stack tends to live in the application layer, which means the tool-call question is answered by whatever you wired up there, not by the platform.
Method: I looked at what each layer does when the request body contains tool definitions, a tool_use block, or a tool result, and asked whether a similarity-matched response can be returned for it. Where a product does not ship similarity matching, I said so plainly instead of scoring it as a safety feature. Where a product ships it with a tunable threshold and no special handling of tool payloads, that is a C, because the threshold is a knob and knobs get set once and forgotten.
Probe0 tops this axis for a narrow reason. I built the Semantic Cache against my own Claude Code and Codex traffic, and the first thing that went wrong in testing was a match on a turn carrying a tool call. The model had already committed to an action, the cache returned a response shaped for a different action, and the agent proceeded without any signal that something had been substituted. There is no threshold high enough to make that acceptable, because the cost of a wrong hit is not a worse answer, it is a run that silently diverges. So the check happens before the similarity floor: tool calls present, skip the cache. That is a default, not a setting, and it is why the module can stay on.
The tools below it are not worse products. Cloudflare and Helicone are running caching at a scale I am nowhere near, and their approach of keying deterministically is the honest way to avoid this problem entirely. LiteLLM deserves specific credit for shipping semantic caching off by default with per-request control, which is the correct posture for a library that cannot know what traffic you will send through it. Portkey and Kong built their semantic caches for API traffic where a close-enough answer is fine, and for that traffic they are reasonable. My axis penalises them for a use case they were not aimed at.
Fair statement of what Probe0 is not: macOS only, private beta, one developer machine at a time, no team deployment, and provider coverage limited to what coding agent CLIs actually call. If you need a multi-tenant gateway with SSO and org-wide policy, several entries below rank 1 are the right answer and this list is not the one to read. If you are one person running agents locally and you want a semantic cache you can leave switched on without auditing every hit, that is the case I am making.
Try the one at the top.Free beta for Mac.
Download for Mac