From e33c119801fc769cfba6c50def41c3069fb64a14 Mon Sep 17 00:00:00 2001 From: rajkumarsakthivel Date: Thu, 11 Jun 2026 14:02:43 +0100 Subject: [PATCH 1/4] feat: add multi-provider pricing and custom rate overrides Savings estimates were locked to Anthropic model pricing, showing wrong numbers for users on GPT-4o, Gemini, etc. Now supports 15 models across three providers with static fallbacks, and users can override rates via pricing.input/pricing.output in cce.toml for unlisted models. Dashboard savings page now shows estimated cost saved with the active pricing model and rates. Closes #99 --- src/context_engine/cli.py | 9 +-- src/context_engine/config.py | 6 ++ src/context_engine/dashboard/_page.py | 15 +++++ src/context_engine/dashboard/server.py | 12 ++++ src/context_engine/pricing.py | 88 ++++++++++++++++++++++---- tests/dashboard/test_server.py | 5 ++ tests/test_cli_smoke.py | 12 +++- 7 files changed, 126 insertions(+), 21 deletions(-) diff --git a/src/context_engine/cli.py b/src/context_engine/cli.py index 1e3e3ef..20ac051 100644 --- a/src/context_engine/cli.py +++ b/src/context_engine/cli.py @@ -1432,17 +1432,14 @@ def _load_buckets(project_dir: Path) -> tuple[dict, dict]: return empty, {} from context_engine.cli_style import dim, bold - from context_engine.pricing import get_model_pricing + from context_engine.pricing import resolve_pricing - _all_pricing = get_model_pricing() - _pricing_model = config.pricing_model.lower() - _default = _all_pricing.get("opus", {"input": 15.0, "output": 75.0}) - _model_pricing = _all_pricing.get(_pricing_model, _default) + _model_label, _model_pricing = resolve_pricing(config) _input_price_per_m = _model_pricing["input"] _output_price_per_m = _model_pricing["output"] _INPUT_COST = _input_price_per_m / 1_000_000 _OUTPUT_COST = _output_price_per_m / 1_000_000 - _model_label = _pricing_model.capitalize() + _model_label = _model_label.capitalize() _GRID_COLS = 10 _FILLED = "⛁" _EMPTY = "⛶" diff --git a/src/context_engine/config.py b/src/context_engine/config.py index 2309762..8821b98 100644 --- a/src/context_engine/config.py +++ b/src/context_engine/config.py @@ -95,6 +95,8 @@ class Config: # Pricing (for savings estimates) pricing_model: str = "opus" + pricing_input: float | None = None # $/1M input tokens override + pricing_output: float | None = None # $/1M output tokens override # Storage storage_path: str = str(_CCE_HOME / "projects") @@ -137,6 +139,8 @@ def _deep_merge(base: dict, override: dict) -> dict: "audit_log_enabled": bool, "storage_path": str, "pricing_model": str, + "pricing_input": (int, float), + "pricing_output": (int, float), } @@ -159,6 +163,8 @@ def _apply_dict_to_config(config: Config, data: dict) -> None: ("audit", "enabled"): "audit_log_enabled", ("storage", "path"): "storage_path", ("pricing", "model"): "pricing_model", + ("pricing", "input"): "pricing_input", + ("pricing", "output"): "pricing_output", } for (section, key), attr in mapping.items(): if section in data and isinstance(data[section], dict) and key in data[section]: diff --git a/src/context_engine/dashboard/_page.py b/src/context_engine/dashboard/_page.py index ff75c0f..a11a4c6 100644 --- a/src/context_engine/dashboard/_page.py +++ b/src/context_engine/dashboard/_page.py @@ -768,7 +768,14 @@ +
+
+
Est. cost saved
+
\u2014
+
+
+
@@ -1423,11 +1430,19 @@ var pct = d.savings_pct || 0; var usedPct = baseline > 0 ? Math.round(served/baseline*100) : 0; + var costSaved = d.cost_saved || 0; + var pricingModel = d.pricing_model || 'opus'; + var inputPrice = d.input_price_per_m || 0; + var outputPrice = d.output_price_per_m || 0; + // Stat cards document.getElementById('sv-queries').textContent = fmt(queries); document.getElementById('sv-saved').textContent = fmtK(saved); document.getElementById('sv-pct').textContent = pct+'%'; + document.getElementById('sv-cost').textContent = costSaved < 0.01 && costSaved > 0 ? '<$0.01' : '$'+costSaved.toFixed(2); drawMiniRing('sv-ring', pct, 'var(--purple)'); + document.getElementById('sv-pricing-note').textContent = + 'Cost estimate based on '+pricingModel+' pricing (input $'+inputPrice+'/1M, output $'+outputPrice+'/1M). Configure via pricing.model in cce.toml.'; // Big donut if (baseline > 0) { diff --git a/src/context_engine/dashboard/server.py b/src/context_engine/dashboard/server.py index fb52e2e..431daf8 100644 --- a/src/context_engine/dashboard/server.py +++ b/src/context_engine/dashboard/server.py @@ -330,12 +330,24 @@ async def get_savings() -> dict: baseline = full_file if full_file > 0 else raw saved = max(0, baseline - served) pct = int(saved / baseline * 100) if baseline > 0 else 0 + + from context_engine.pricing import resolve_pricing, list_available_models + + label, model_pricing = resolve_pricing(config) + input_cost = saved * model_pricing["input"] / 1_000_000 + cost_saved = input_cost + return { "queries": stats.get("queries", 0), "baseline_tokens": baseline, "served_tokens": served, "tokens_saved": saved, "savings_pct": pct, + "pricing_model": label, + "input_price_per_m": model_pricing["input"], + "output_price_per_m": model_pricing["output"], + "cost_saved": round(cost_saved, 2), + "available_models": list_available_models(), } # ── action routes ────────────────────────────────────────────────────── diff --git a/src/context_engine/pricing.py b/src/context_engine/pricing.py index 3dc26d8..096ed76 100644 --- a/src/context_engine/pricing.py +++ b/src/context_engine/pricing.py @@ -1,4 +1,8 @@ -"""Dynamic model pricing — fetched from Anthropic docs, cached locally.""" +"""Model pricing for savings estimates. + +Anthropic pricing is fetched from docs and cached. Other providers use +static fallbacks that are updated with releases. +""" import json import re import time @@ -16,20 +20,39 @@ class ModelPricing(TypedDict): output: float # $/1M output tokens -# Used only when fetch fails and no cache exists -_FALLBACK: dict[str, ModelPricing] = { +# Anthropic fallback (used when fetch fails and no cache exists) +_ANTHROPIC_FALLBACK: dict[str, ModelPricing] = { "opus": {"input": 15.0, "output": 75.0}, "sonnet": {"input": 3.0, "output": 15.0}, "haiku": {"input": 0.80, "output": 4.0}, } -# Flat input-only fallback kept for backward compat with existing cache files -_FALLBACK_INPUT: dict[str, float] = { - "opus": 15.0, - "sonnet": 3.0, - "haiku": 0.80, +# Static pricing for non-Anthropic models. Updated with releases. +# Keys are lowercase, matched against config pricing.model. +_STATIC_PRICING: dict[str, ModelPricing] = { + # OpenAI + "gpt-4o": {"input": 2.50, "output": 10.0}, + "gpt-4o-mini": {"input": 0.15, "output": 0.60}, + "gpt-4.1": {"input": 2.0, "output": 8.0}, + "gpt-4.1-mini": {"input": 0.40, "output": 1.60}, + "gpt-4.1-nano": {"input": 0.10, "output": 0.40}, + "o3": {"input": 2.0, "output": 8.0}, + "o3-mini": {"input": 1.10, "output": 4.40}, + "o4-mini": {"input": 1.10, "output": 4.40}, + "codex-mini": {"input": 1.50, "output": 6.0}, + # Google + "gemini-2.5-pro": {"input": 1.25, "output": 10.0}, + "gemini-2.5-flash": {"input": 0.15, "output": 0.60}, + "gemini-2.0-flash": {"input": 0.10, "output": 0.40}, + # Anthropic (duplicated here so static lookup works without fetching) + "opus": {"input": 15.0, "output": 75.0}, + "sonnet": {"input": 3.0, "output": 15.0}, + "haiku": {"input": 0.80, "output": 4.0}, } +# Backward compat alias +_FALLBACK = _ANTHROPIC_FALLBACK + def _parse_html(html: str) -> dict[str, ModelPricing] | None: """Parse per-family input + output pricing from Anthropic docs HTML table.""" @@ -137,12 +160,53 @@ def _save_cache(pricing: dict[str, ModelPricing]) -> None: def get_model_pricing() -> dict[str, ModelPricing]: - """Return {family: {input, output}} pricing per 1M tokens. Cached 7 days.""" + """Return {model: {input, output}} pricing per 1M tokens. + + Merges static pricing for all providers with live Anthropic pricing + (fetched from docs, cached 7 days). Live data wins for Anthropic models. + """ + result = dict(_STATIC_PRICING) cached = _load_cache() if cached: - return cached + result.update(cached) + return result fetched = _fetch() if fetched: _save_cache(fetched) - return fetched - return dict(_FALLBACK) + result.update(fetched) + return result + return result + + +def list_available_models() -> list[str]: + """Return sorted list of all model keys with known pricing.""" + return sorted(get_model_pricing().keys()) + + +def resolve_pricing(config: "Config") -> tuple[str, ModelPricing]: + """Return (model_label, {input, output}) respecting config overrides. + + Priority: + 1. Explicit pricing.input / pricing.output in config (full override) + 2. Lookup by pricing.model in the merged pricing table + 3. Fallback to Opus + """ + from context_engine.config import Config # noqa: F811 — deferred import + + model = config.pricing_model.lower() + all_pricing = get_model_pricing() + default = all_pricing.get("opus", {"input": 15.0, "output": 75.0}) + base = all_pricing.get(model, default) + + resolved: ModelPricing = { + "input": config.pricing_input if config.pricing_input is not None else base["input"], + "output": config.pricing_output if config.pricing_output is not None else base["output"], + } + + # Label reflects whether user overrode rates + if config.pricing_input is not None or config.pricing_output is not None: + label = f"{model} (custom)" + else: + label = model + + return label, resolved diff --git a/tests/dashboard/test_server.py b/tests/dashboard/test_server.py index c918b12..a128ab4 100644 --- a/tests/dashboard/test_server.py +++ b/tests/dashboard/test_server.py @@ -159,6 +159,9 @@ def test_savings_no_data(tmp_path): assert data["queries"] == 0 assert data["tokens_saved"] == 0 assert data["savings_pct"] == 0 + assert "pricing_model" in data + assert "available_models" in data + assert isinstance(data["available_models"], list) def test_savings_with_data(tmp_path): @@ -172,6 +175,8 @@ def test_savings_with_data(tmp_path): assert data["baseline_tokens"] == 48000 assert data["tokens_saved"] == 33800 assert data["savings_pct"] == 70 + assert data["pricing_model"] == "opus" + assert data["cost_saved"] == round(33800 * 15.0 / 1_000_000, 2) def test_export_returns_combined(tmp_path): diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index 02d6236..88ca34a 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -256,14 +256,20 @@ def test_pricing_fetch_and_fallback(): def test_pricing_fallback_on_network_error(): - """When fetch fails, fallback pricing is returned.""" - from context_engine.pricing import get_model_pricing, _FALLBACK, _CACHE_PATH + """When fetch fails, static pricing for all providers is returned.""" + from context_engine.pricing import get_model_pricing, _STATIC_PRICING, _CACHE_PATH # Clear cache so it tries to fetch if _CACHE_PATH.exists(): _CACHE_PATH.unlink() with patch("context_engine.pricing._fetch", return_value=None): pricing = get_model_pricing() - assert pricing == _FALLBACK + assert pricing == _STATIC_PRICING + # Anthropic models present + assert "opus" in pricing + assert "sonnet" in pricing + # Non-Anthropic models present + assert "gpt-4o" in pricing + assert "gemini-2.5-pro" in pricing def test_pricing_shown_in_savings_output(runner, storage): From 844df1ef5ebe5bd948fbf86769aa18d99292a54c Mon Sep 17 00:00:00 2001 From: rajkumarsakthivel Date: Thu, 11 Jun 2026 14:08:17 +0100 Subject: [PATCH 2/4] fix: resolve ruff lint errors in pricing module Use TYPE_CHECKING import for Config to satisfy both F821 (undefined name) and F401 (unused import) rules. --- src/context_engine/pricing.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/context_engine/pricing.py b/src/context_engine/pricing.py index 096ed76..aa35e9e 100644 --- a/src/context_engine/pricing.py +++ b/src/context_engine/pricing.py @@ -3,11 +3,16 @@ Anthropic pricing is fetched from docs and cached. Other providers use static fallbacks that are updated with releases. """ +from __future__ import annotations + import json import re import time from pathlib import Path -from typing import TypedDict +from typing import TYPE_CHECKING, TypedDict + +if TYPE_CHECKING: + from context_engine.config import Config _CCE_HOME = Path.home() / ".cce" _CACHE_PATH = _CCE_HOME / "pricing_cache.json" @@ -183,7 +188,7 @@ def list_available_models() -> list[str]: return sorted(get_model_pricing().keys()) -def resolve_pricing(config: "Config") -> tuple[str, ModelPricing]: +def resolve_pricing(config: Config) -> tuple[str, ModelPricing]: """Return (model_label, {input, output}) respecting config overrides. Priority: @@ -191,8 +196,6 @@ def resolve_pricing(config: "Config") -> tuple[str, ModelPricing]: 2. Lookup by pricing.model in the merged pricing table 3. Fallback to Opus """ - from context_engine.config import Config # noqa: F811 — deferred import - model = config.pricing_model.lower() all_pricing = get_model_pricing() default = all_pricing.get("opus", {"input": 15.0, "output": 75.0}) From 310ebcff48b9f7fa7dc66cf961a593e6128e1c15 Mon Sep 17 00:00:00 2001 From: rajkumarsakthivel Date: Thu, 11 Jun 2026 14:41:49 +0100 Subject: [PATCH 3/4] docs: add dashboard savings screenshot for PR review --- docs/images/dashboard-savings.png | Bin 0 -> 92738 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/dashboard-savings.png diff --git a/docs/images/dashboard-savings.png b/docs/images/dashboard-savings.png new file mode 100644 index 0000000000000000000000000000000000000000..8768bba18600476a07c72749977df69942752f36 GIT binary patch literal 92738 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 literal 0 HcmV?d00001 From 2be4f36d63e47dfa9f1da94e22888b3cb80801e4 Mon Sep 17 00:00:00 2001 From: rajkumarsakthivel Date: Mon, 15 Jun 2026 18:57:04 +0100 Subject: [PATCH 4/4] fix: address Copilot review feedback on pricing - list_available_models() no longer triggers network fetch - resolve_pricing() strips whitespace, shows fallback label when model unknown - Config accepts None for pricing_input/pricing_output (YAML null) - Dashboard pricing note references correct config file paths - Dashboard /api/savings uses fetch_live=False to avoid request-path latency - Savings tests patched to be hermetic (no network/cache side effects) --- src/context_engine/config.py | 4 +-- src/context_engine/dashboard/_page.py | 2 +- src/context_engine/dashboard/server.py | 2 +- src/context_engine/pricing.py | 45 ++++++++++++++++++-------- tests/dashboard/test_server.py | 8 +++-- 5 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/context_engine/config.py b/src/context_engine/config.py index 8821b98..f3b13d0 100644 --- a/src/context_engine/config.py +++ b/src/context_engine/config.py @@ -139,8 +139,8 @@ def _deep_merge(base: dict, override: dict) -> dict: "audit_log_enabled": bool, "storage_path": str, "pricing_model": str, - "pricing_input": (int, float), - "pricing_output": (int, float), + "pricing_input": (int, float, type(None)), + "pricing_output": (int, float, type(None)), } diff --git a/src/context_engine/dashboard/_page.py b/src/context_engine/dashboard/_page.py index a11a4c6..bd868f1 100644 --- a/src/context_engine/dashboard/_page.py +++ b/src/context_engine/dashboard/_page.py @@ -1442,7 +1442,7 @@ document.getElementById('sv-cost').textContent = costSaved < 0.01 && costSaved > 0 ? '<$0.01' : '$'+costSaved.toFixed(2); drawMiniRing('sv-ring', pct, 'var(--purple)'); document.getElementById('sv-pricing-note').textContent = - 'Cost estimate based on '+pricingModel+' pricing (input $'+inputPrice+'/1M, output $'+outputPrice+'/1M). Configure via pricing.model in cce.toml.'; + 'Cost estimate based on '+pricingModel+' pricing (input $'+inputPrice+'/1M, output $'+outputPrice+'/1M). Configure via pricing.model, pricing.input, pricing.output in ~/.cce/config.yaml or .context-engine.yaml.'; // Big donut if (baseline > 0) { diff --git a/src/context_engine/dashboard/server.py b/src/context_engine/dashboard/server.py index 431daf8..ab36093 100644 --- a/src/context_engine/dashboard/server.py +++ b/src/context_engine/dashboard/server.py @@ -333,7 +333,7 @@ async def get_savings() -> dict: from context_engine.pricing import resolve_pricing, list_available_models - label, model_pricing = resolve_pricing(config) + label, model_pricing = resolve_pricing(config, fetch_live=False) input_cost = saved * model_pricing["input"] / 1_000_000 cost_saved = input_cost diff --git a/src/context_engine/pricing.py b/src/context_engine/pricing.py index aa35e9e..9606609 100644 --- a/src/context_engine/pricing.py +++ b/src/context_engine/pricing.py @@ -164,41 +164,58 @@ def _save_cache(pricing: dict[str, ModelPricing]) -> None: pass -def get_model_pricing() -> dict[str, ModelPricing]: +def get_model_pricing(*, fetch_live: bool = True) -> dict[str, ModelPricing]: """Return {model: {input, output}} pricing per 1M tokens. Merges static pricing for all providers with live Anthropic pricing (fetched from docs, cached 7 days). Live data wins for Anthropic models. + + When *fetch_live* is False, only static + cached pricing is used (no + network request). Use this on hot paths like dashboard requests. """ result = dict(_STATIC_PRICING) cached = _load_cache() if cached: result.update(cached) return result - fetched = _fetch() - if fetched: - _save_cache(fetched) - result.update(fetched) - return result + if fetch_live: + fetched = _fetch() + if fetched: + _save_cache(fetched) + result.update(fetched) + return result return result def list_available_models() -> list[str]: - """Return sorted list of all model keys with known pricing.""" - return sorted(get_model_pricing().keys()) + """Return sorted list of all model keys with known pricing. + Uses static pricing plus any cached live pricing without triggering + a network fetch, so this is safe for dashboard/CLI hot paths. + """ + result = dict(_STATIC_PRICING) + cached = _load_cache() + if cached: + result.update(cached) + return sorted(result.keys()) -def resolve_pricing(config: Config) -> tuple[str, ModelPricing]: + +def resolve_pricing( + config: Config, *, fetch_live: bool = True +) -> tuple[str, ModelPricing]: """Return (model_label, {input, output}) respecting config overrides. Priority: 1. Explicit pricing.input / pricing.output in config (full override) 2. Lookup by pricing.model in the merged pricing table 3. Fallback to Opus + + When *fetch_live* is False, skip network fetch (use static + cache only). """ - model = config.pricing_model.lower() - all_pricing = get_model_pricing() - default = all_pricing.get("opus", {"input": 15.0, "output": 75.0}) + model = config.pricing_model.strip().lower() + all_pricing = get_model_pricing(fetch_live=fetch_live) + opus_default: ModelPricing = {"input": 15.0, "output": 75.0} + default = all_pricing.get("opus", opus_default) base = all_pricing.get(model, default) resolved: ModelPricing = { @@ -206,9 +223,11 @@ def resolve_pricing(config: Config) -> tuple[str, ModelPricing]: "output": config.pricing_output if config.pricing_output is not None else base["output"], } - # Label reflects whether user overrode rates + # Label reflects whether user overrode rates or fell back if config.pricing_input is not None or config.pricing_output is not None: label = f"{model} (custom)" + elif model not in all_pricing: + label = f"opus (fallback from {model})" else: label = model diff --git a/tests/dashboard/test_server.py b/tests/dashboard/test_server.py index a128ab4..8969195 100644 --- a/tests/dashboard/test_server.py +++ b/tests/dashboard/test_server.py @@ -151,7 +151,9 @@ def test_sessions_returns_persisted(tmp_path): assert len(data[0]["decisions"]) == 1 -def test_savings_no_data(tmp_path): +@patch("context_engine.pricing._fetch", return_value=None) +@patch("context_engine.pricing._load_cache", return_value=None) +def test_savings_no_data(mock_cache, mock_fetch, tmp_path): client, _ = _make_client(tmp_path) r = client.get("/api/savings") assert r.status_code == 200 @@ -164,7 +166,9 @@ def test_savings_no_data(tmp_path): assert isinstance(data["available_models"], list) -def test_savings_with_data(tmp_path): +@patch("context_engine.pricing._fetch", return_value=None) +@patch("context_engine.pricing._load_cache", return_value=None) +def test_savings_with_data(mock_cache, mock_fetch, tmp_path): client, storage_base = _make_client(tmp_path) stats = {"queries": 38, "full_file_tokens": 48000, "served_tokens": 14200, "raw_tokens": 14200} (storage_base / "stats.json").write_text(json.dumps(stats))