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.

[](https://tokenzero.sh/audit/Arize-ai/phoenix)
Models referenced
none detected
Findings
| Severity | Where | Finding | Est. |
|---|---|---|---|
| info | packages/phoenix-evals/src/phoenix/evals/llm/adapters/anthropic/adapter.py:197 | Tool 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% |
| info | packages/phoenix-evals/src/phoenix/evals/llm/adapters/anthropic/adapter.py:224 | Tool 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