diff --git a/litellm_dashboard.py b/litellm_dashboard.py index b3e094a..c841748 100644 --- a/litellm_dashboard.py +++ b/litellm_dashboard.py @@ -190,7 +190,27 @@ class Tools: lines.append(f"Spend: ${meta.get('total_spend', 0):.2f}{get_spark(spends)}") lines.append(f"Requests: {meta.get('total_successful_requests', 0)} ok, {meta.get('total_failed_requests', 0)} fail") - lines.append("\nBreakdown by Endpoint:") + # Aggregated Model Breakdown + model_totals = {} + for day in results: + models = day.get("breakdown", {}).get("models", {}) + for m_name, m_data in models.items(): + metrics = m_data.get("metrics", {}) + if m_name not in model_totals: + model_totals[m_name] = {"spend": 0, "reqs": 0} + model_totals[m_name]["spend"] += metrics.get("spend", 0) + model_totals[m_name]["reqs"] += metrics.get("successful_requests", 0) + + if model_totals: + lines.append("\nBy Model (Spend > $0.001):") + sorted_models = sorted(model_totals.items(), key=lambda x: x[1]["spend"], reverse=True) + for m_name, m_stats in sorted_models: + if m_stats["spend"] >= 0.001 or not self.valves.default_hide_zero_spend: + # Strip common prefixes for readability + display = m_name.split("/")[-1] + lines.append(f" {display:25s} | ${m_stats['spend']:7.2f} | {m_stats['reqs']:4d} ok") + + lines.append("\nBy Endpoint:") ends = results[0].get("breakdown", {}).get("endpoints", {}) if results else {} for path, edata in ends.items(): m = edata.get("metrics", {})