diff --git a/agent/insights.py b/agent/insights.py index a0929c9126..4dafb74876 100644 --- a/agent/insights.py +++ b/agent/insights.py @@ -634,13 +634,7 @@ class InsightsEngine: lines.append(f" Sessions: {o['total_sessions']:<12} Messages: {o['total_messages']:,}") lines.append(f" Tool calls: {o['total_tool_calls']:<12,} User messages: {o['user_messages']:,}") lines.append(f" Input tokens: {o['total_input_tokens']:<12,} Output tokens: {o['total_output_tokens']:,}") - cache_total = o.get("total_cache_read_tokens", 0) + o.get("total_cache_write_tokens", 0) - if cache_total > 0: - lines.append(f" Cache read: {o['total_cache_read_tokens']:<12,} Cache write: {o['total_cache_write_tokens']:,}") - cost_str = f"${o['estimated_cost']:.2f}" - if o.get("models_without_pricing"): - cost_str += " *" - lines.append(f" Total tokens: {o['total_tokens']:<12,} Est. cost: {cost_str}") + lines.append(f" Total tokens: {o['total_tokens']:,}") if o["total_hours"] > 0: lines.append(f" Active time: ~{_format_duration(o['total_hours'] * 3600):<11} Avg session: ~{_format_duration(o['avg_session_duration'])}") lines.append(f" Avg msgs/session: {o['avg_messages_per_session']:.1f}") @@ -650,16 +644,10 @@ class InsightsEngine: if report["models"]: lines.append(" 🤖 Models Used") lines.append(" " + "─" * 56) - lines.append(f" {'Model':<30} {'Sessions':>8} {'Tokens':>12} {'Cost':>8}") + lines.append(f" {'Model':<30} {'Sessions':>8} {'Tokens':>12}") for m in report["models"]: model_name = m["model"][:28] - if m.get("has_pricing"): - cost_cell = f"${m['cost']:>6.2f}" - else: - cost_cell = " N/A" - lines.append(f" {model_name:<30} {m['sessions']:>8} {m['total_tokens']:>12,} {cost_cell}") - if o.get("models_without_pricing"): - lines.append(" * Cost N/A for custom/self-hosted models") + lines.append(f" {model_name:<30} {m['sessions']:>8} {m['total_tokens']:>12,}") lines.append("") # Platform breakdown @@ -739,15 +727,7 @@ class InsightsEngine: # Overview lines.append(f"**Sessions:** {o['total_sessions']} | **Messages:** {o['total_messages']:,} | **Tool calls:** {o['total_tool_calls']:,}") - cache_total = o.get("total_cache_read_tokens", 0) + o.get("total_cache_write_tokens", 0) - if cache_total > 0: - lines.append(f"**Tokens:** {o['total_tokens']:,} (in: {o['total_input_tokens']:,} / out: {o['total_output_tokens']:,} / cache: {cache_total:,})") - else: - lines.append(f"**Tokens:** {o['total_tokens']:,} (in: {o['total_input_tokens']:,} / out: {o['total_output_tokens']:,})") - cost_note = "" - if o.get("models_without_pricing"): - cost_note = " _(excludes custom/self-hosted models)_" - lines.append(f"**Est. cost:** ${o['estimated_cost']:.2f}{cost_note}") + lines.append(f"**Tokens:** {o['total_tokens']:,} (in: {o['total_input_tokens']:,} / out: {o['total_output_tokens']:,})") if o["total_hours"] > 0: lines.append(f"**Active time:** ~{_format_duration(o['total_hours'] * 3600)} | **Avg session:** ~{_format_duration(o['avg_session_duration'])}") lines.append("") @@ -756,8 +736,7 @@ class InsightsEngine: if report["models"]: lines.append("**🤖 Models:**") for m in report["models"][:5]: - cost_str = f"${m['cost']:.2f}" if m.get("has_pricing") else "N/A" - lines.append(f" {m['model'][:25]} — {m['sessions']} sessions, {m['total_tokens']:,} tokens, {cost_str}") + lines.append(f" {m['model'][:25]} — {m['sessions']} sessions, {m['total_tokens']:,} tokens") lines.append("") # Platforms (if multi-platform) diff --git a/tests/agent/test_insights.py b/tests/agent/test_insights.py index 885e34fec0..985d9f0096 100644 --- a/tests/agent/test_insights.py +++ b/tests/agent/test_insights.py @@ -411,8 +411,10 @@ class TestTerminalFormatting: assert "Input tokens" in text assert "Output tokens" in text - assert "Est. cost" in text - assert "$" in text + # Cost and cache metrics are intentionally hidden (pricing was unreliable). + assert "Est. cost" not in text + assert "Cache read" not in text + assert "Cache write" not in text def test_terminal_format_shows_platforms(self, populated_db): engine = InsightsEngine(populated_db) @@ -431,8 +433,8 @@ class TestTerminalFormatting: assert "█" in text # Bar chart characters - def test_terminal_format_shows_na_for_custom_models(self, db): - """Custom models should show N/A instead of fake cost.""" + def test_terminal_format_hides_cost_for_custom_models(self, db): + """Cost display is hidden entirely — custom models no longer show 'N/A' either.""" db.create_session(session_id="s1", source="cli", model="my-custom-model") db.update_token_counts("s1", input_tokens=1000, output_tokens=500) db._conn.commit() @@ -441,8 +443,9 @@ class TestTerminalFormatting: report = engine.generate(days=30) text = engine.format_terminal(report) - assert "N/A" in text - assert "custom/self-hosted" in text + assert "N/A" not in text + assert "custom/self-hosted" not in text + assert "Cost" not in text class TestGatewayFormatting: @@ -461,13 +464,14 @@ class TestGatewayFormatting: assert "**" in text # Markdown bold - def test_gateway_format_shows_cost(self, populated_db): + def test_gateway_format_hides_cost(self, populated_db): engine = InsightsEngine(populated_db) report = engine.generate(days=30) text = engine.format_gateway(report) - assert "$" in text - assert "Est. cost" in text + assert "$" not in text + assert "Est. cost" not in text + assert "cache" not in text.lower() def test_gateway_format_shows_models(self, populated_db): engine = InsightsEngine(populated_db)