Files
ALwrity/docs/Billing_Subscription/BILLING_DASHBOARD_IMPROVEMENTS.md

4.9 KiB

Billing Dashboard Improvements

Summary of Changes

1. Migration Script - Add actual_provider_name Column

Status: Completed successfully

  • Added actual_provider_name column to api_usage_logs table
  • Migration script handles SQLite and MySQL/PostgreSQL
  • Backfilled existing records with detected provider names
  • Column now tracks real providers: WaveSpeed, Google, HuggingFace, etc.

2. Provider Breakdown in Monthly Budget Usage

Status: Completed

Changes Made:

  • Updated usage_tracking_service.py to include all providers in breakdown:
    • Video (WaveSpeed, HuggingFace)
    • Audio (WaveSpeed)
    • Image (Stability, WaveSpeed)
    • Image Edit (WaveSpeed)
    • Search APIs (Tavily, Serper, Exa)
  • Added provider breakdown display in CompactBillingDashboard.tsx:
    • Shows top 5 providers by cost
    • Displays as chips below the progress bar
    • Format: "Provider: $X.XX"
  • Updated ProviderBreakdown TypeScript interface to include all providers

Location: frontend/src/components/billing/CompactBillingDashboard.tsx (lines ~1040-1063)

3. System Health Card Fix

Status: Fixed

Problem: System Health was showing zeros for all metrics (recent_requests, recent_errors, error_rate)

Solution: Updated get_lightweight_stats() in monitoring_middleware.py to:

  • Query APIRequest table for last 5 minutes
  • Calculate real recent_requests count
  • Calculate real recent_errors count (status >= 400)
  • Calculate real error_rate percentage
  • Determine status based on error rate:
    • critical: error_rate > 10%
    • warning: error_rate > 5%
    • healthy: error_rate <= 5%

Location: backend/services/subscription/monitoring_middleware.py (lines 371-389)

4. API Error Handling for actual_provider_name

Status: Fixed

Problem: API was trying to access actual_provider_name column that didn't exist, causing errors

Solution:

  • Added safe access using getattr() with try/except
  • Falls back to enum value if column doesn't exist
  • Migration script ensures column exists

Location: backend/api/subscription_api.py (lines 1247-1251)

5. Subscription API Review (Lines 611-1017)

Status: Reviewed and Fixed

Issues Found and Fixed:

  1. Missing limits in subscribe response: Added video_calls, audio_calls, image_edit_calls, exa_calls to limits response
  2. Provider breakdown calculation: Updated to include all providers, not just Gemini and HuggingFace
  3. Cost calculation: Updated to sum all provider costs, not just LLM providers

Code Quality:

  • Error handling is comprehensive
  • Logging is detailed and helpful
  • Cache management is properly implemented
  • Database transaction handling is correct

Files Modified

Backend

  1. backend/models/subscription_models.py - Added actual_provider_name field
  2. backend/services/subscription/provider_detection.py - New utility for provider detection
  3. backend/services/subscription/usage_tracking_service.py - Enhanced provider breakdown
  4. backend/services/subscription/monitoring_middleware.py - Fixed System Health stats
  5. backend/services/llm_providers/main_video_generation.py - Added provider detection
  6. backend/services/llm_providers/main_image_generation.py - Added provider detection
  7. backend/services/llm_providers/main_audio_generation.py - Added provider detection
  8. backend/api/subscription_api.py - Fixed error handling, added missing limits
  9. backend/scripts/add_actual_provider_name_column.py - Migration script

Frontend

  1. frontend/src/types/billing.ts - Updated ProviderBreakdown interface
  2. frontend/src/components/billing/CompactBillingDashboard.tsx - Added provider breakdown display
  3. frontend/src/components/billing/UsageLogsTable.tsx - Display actual provider name
  4. frontend/src/components/monitoring/SystemHealthIndicator.tsx - Already correct (needs onRefresh prop)

Testing Checklist

  • Migration script runs successfully
  • Provider breakdown shows in Monthly Budget Usage
  • System Health displays real data (not zeros)
  • API Usage Logs show actual provider names
  • Test with existing data (backfill)
  • Test with new API calls (provider detection)
  • Verify all providers appear in breakdown

Next Steps

  1. Monitor: Watch for any errors related to actual_provider_name column
  2. Verify: Check that System Health shows real data after API calls
  3. Test: Verify provider breakdown appears correctly in compact view
  4. Enhance: Consider adding provider breakdown to detailed view as well

Notes

  • The migration script successfully added the column and backfilled 0 records (no existing records to backfill)
  • System Health now queries real data from APIRequest table
  • Provider breakdown includes all providers, sorted by cost (top 5 displayed)
  • All changes are backward compatible (fallback to enum values if actual_provider_name is missing)