---
title: AI Cost Tracker — Pricing Sources
tags: [how-to, ai, cost-tracking, pricing]
created: 2026-04-27
updated: 2026-04-27
---

# AI Cost Tracker — Pricing Sources

The cost-tracker uses a **three-layer hybrid pricing pipeline**. Understanding the priority order is essential for accurate billing attribution.

## Priority order

```
override  (highest — set manually by admin)
  yaml    (fallback — versioned in repo for non-LLM providers)
  litellm (lowest — auto-synced daily from open source)
```

`compute_cost(provider, model, units, ts)` returns the cost using the **highest-priority active price** for the given model at timestamp `ts`.

---

## Layer 1 — LiteLLM auto-sync (LLM providers)

**Source:** `https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json`

**Coverage:** Gemini, OpenAI, Anthropic, Cohere, Mistral, Together, and 100+ others.

**Sync schedule:** Celery beat task `tasks/pricing_sync.py` runs **daily at 02:00 UTC**.

**What happens on sync:**
1. Fetches the JSON (pinned to a configurable commit hash in `LITELLM_COMMIT_HASH` env var)
2. Maps `input_cost_per_token` / `output_cost_per_token` to our schema
3. For each model:
   - If no existing price → creates new `model_prices` record with `source="litellm"`
   - If price unchanged → updates `litellm_commit_hash`, no other change
   - If price **changed** → closes old record (`effective_to=today`), creates new record, sends **admin notification email**

> **Note:** Auto-price changes never silently modify `source="override"` records. If you have an override active, the sync logs a divergence warning but leaves your override intact.

**To pin a specific version** (for reproducibility):
```env
LITELLM_COMMIT_HASH=abc123def456   # pin to a known-good commit
```

See [[wiki/concepts/litellm-pricing-source|litellm-pricing-source]] for deeper explanation.

---

## Layer 2 — YAML (non-LLM providers)

**File:** `backend/app/pricing/models.yaml` — versioned in the cost-tracker repo.

Contains providers that LiteLLM does not cover:

```yaml
# ElevenLabs
- provider: elevenlabs
  model: eleven_multilingual_v2
  billing_unit: char
  price_per_1k_usd: 0.30
  effective_from: "2025-01-01"

- provider: elevenlabs
  model: eleven_flash_v2_5
  billing_unit: char
  price_per_1k_usd: 0.11
  effective_from: "2025-01-01"

# Google Cloud TTS
- provider: google_tts
  model: standard
  billing_unit: char
  price_per_1m_usd: 4.00
  effective_from: "2024-01-01"

- provider: google_tts
  model: wavenet
  billing_unit: char
  price_per_1m_usd: 16.00
  effective_from: "2024-01-01"
```

**When to update YAML:**
- ElevenLabs raises/lowers per-char pricing
- Google Cloud TTS changes tier pricing
- Adding a brand-new non-LLM provider

**How to update:**
1. Add a new entry with the new price and `effective_from: "YYYY-MM-DD"`
2. Leave the old entry — it is used for historical cost attribution
3. Deploy the new YAML → loader upserts on startup

**Do NOT delete old entries** — they are needed for retroactive reports.

---

## Layer 3 — Admin override (UI)

Use when you have:
- A negotiated enterprise contract price (different from public pricing)
- A volume discount or committed-use agreement
- A temporary promotional rate
- A price correction before the next LiteLLM sync

**How to create an override:**
1. Admin UI → **Pricing** → find the model → **Override price**
2. Set: `price_per_unit_usd`, `effective_from` (defaults to today), optional `override_reason`
3. Save → old price gets `effective_to=effective_from`, override is now active

Override records are never auto-modified by LiteLLM sync.

---

## Historical pricing and retroactive reports

Every usage event is stored with `price_id` — a reference to the exact `model_prices` record active at the time of the call:

- **Retroactive reports are always accurate** — changing a price today does not affect yesterday's costs
- Old `model_prices` records with `effective_to` set are never deleted
- Re-evaluating historical costs with new pricing = manual export + spreadsheet (not a built-in feature)

---

## Monthly reconciliation

Recommended monthly check:
1. Download invoice from Google Cloud Console / ElevenLabs dashboard
2. Compare with cost-tracker "Actual vs Billed" report (Admin UI → Analytics → Reconciliation)
3. If >5% discrepancy: check for `pricing_missing=true` events and add missing model prices
