static audit · 2026-10-25T22:33:53.238Z

Arize-ai/phoenix

120 source files scanned · 20 LLM call site(s) · ~0% of LLM spend looks recoverable (static heuristics · repo looks like a library)

Library/SDK layout detected (installable Python package with src/ layout and no app entry point): call sites are most likely pass-through wrappers where the caller chooses the model and prompt, so findings are downgraded one level and the estimate is discounted.

badge   ![TokenZero audit](https://tokenzero.sh/v1/badge/audit/aud_nOQBN0ULN9fWBqmjQjshqQ.svg)

repo badge   [![LLM spend audited by TokenZero](https://tokenzero.sh/v1/badge/repo/Arize-ai/phoenix.svg)](https://tokenzero.sh/audit/arize-ai/phoenix)

Models referenced

none detected

Findings

SeverityWhereFindingEst.
infopackages/phoenix-evals/src/phoenix/evals/llm/adapters/anthropic/adapter.py:197Tool definitions sent without a cache breakpoint
Tool schemas render before the system prompt in the cached prefix. Without a breakpoint on the last tool they are billed in full on every call.
Fix: TokenZero marks the last tool automatically; manually, add `cache_control` to the last tool definition.
8%
infopackages/phoenix-evals/src/phoenix/evals/llm/adapters/anthropic/adapter.py:224Tool definitions sent without a cache breakpoint
Tool schemas render before the system prompt in the cached prefix. Without a breakpoint on the last tool they are billed in full on every call.
Fix: TokenZero marks the last tool automatically; manually, add `cache_control` to the last tool definition.
8%

Fix all of it with one line

OPENAI_BASE_URL=https://tokenzero.sh/v1
ANTHROPIC_BASE_URL=https://tokenzero.sh

Keys pass through untouched. Cache formatting and exact caching are on by default; cascade routing stays opt-in. How it works