""" Example demonstrating global usage tracking functionality. This example shows how CAI tracks usage globally across all executions and saves the data to $HOME/.cai/usage.json """ import json import os from pathlib import Path def display_usage_stats(): """Display the current global usage statistics""" usage_file = Path.home() / ".cai" / "usage.json" if not usage_file.exists(): print("No usage data found yet. Run CAI to start tracking usage.") return try: with open(usage_file, "r") as f: usage_data = json.load(f) print("\n=== CAI Global Usage Statistics ===\n") # Display global totals totals = usage_data.get("global_totals", {}) print("šŸ“Š Overall Usage:") print(f" Total Cost: ${totals.get('total_cost', 0):.4f}") print(f" Total Sessions: {totals.get('total_sessions', 0)}") print(f" Total Requests: {totals.get('total_requests', 0)}") print(f" Total Input Tokens: {totals.get('total_input_tokens', 0):,}") print(f" Total Output Tokens: {totals.get('total_output_tokens', 0):,}") print( f" Total Tokens: {totals.get('total_input_tokens', 0) + totals.get('total_output_tokens', 0):,}" ) # Display model usage model_usage = usage_data.get("model_usage", {}) if model_usage: print("\nšŸ¤– Usage by Model:") for model, stats in sorted( model_usage.items(), key=lambda x: x[1].get("total_cost", 0), reverse=True ): print(f"\n {model}:") print(f" Cost: ${stats.get('total_cost', 0):.4f}") print(f" Requests: {stats.get('total_requests', 0)}") print(f" Input Tokens: {stats.get('total_input_tokens', 0):,}") print(f" Output Tokens: {stats.get('total_output_tokens', 0):,}") # Display daily usage for the last 7 days daily_usage = usage_data.get("daily_usage", {}) if daily_usage: print("\nšŸ“… Recent Daily Usage:") sorted_days = sorted(daily_usage.items(), reverse=True)[:7] for day, stats in sorted_days: print(f"\n {day}:") print(f" Cost: ${stats.get('total_cost', 0):.4f}") print(f" Requests: {stats.get('total_requests', 0)}") print( f" Tokens: {stats.get('total_input_tokens', 0) + stats.get('total_output_tokens', 0):,}" ) # Display recent sessions sessions = usage_data.get("sessions", []) if sessions: print("\nšŸ”„ Recent Sessions:") recent_sessions = sessions[-5:] # Last 5 sessions for session in recent_sessions: print(f"\n Session ID: {session.get('session_id', 'Unknown')[:8]}...") print(f" Start: {session.get('start_time', 'Unknown')}") print(f" Cost: ${session.get('total_cost', 0):.4f}") print(f" Requests: {session.get('total_requests', 0)}") print(f" Models: {', '.join(session.get('models_used', []))}") if session.get("end_time"): print(f" End: {session.get('end_time')}") else: print(" Status: Active") print("\n" + "=" * 35 + "\n") except json.JSONDecodeError: print("Error: Unable to read usage data. File may be corrupted.") except Exception as e: print(f"Error: {str(e)}") def reset_usage_stats(): """Reset usage statistics (with confirmation)""" usage_file = Path.home() / ".cai" / "usage.json" if not usage_file.exists(): print("No usage data to reset.") return response = input("Are you sure you want to reset all usage statistics? (yes/no): ") if response.lower() == "yes": # Create backup backup_file = usage_file.with_suffix(".json.backup") import shutil shutil.copy2(usage_file, backup_file) print(f"Backup created at: {backup_file}") # Reset the file usage_file.unlink() print("Usage statistics have been reset.") else: print("Reset cancelled.") def export_usage_report(output_file="cai_usage_report.json"): """Export usage statistics to a file""" usage_file = Path.home() / ".cai" / "usage.json" if not usage_file.exists(): print("No usage data to export.") return import shutil shutil.copy2(usage_file, output_file) print(f"Usage report exported to: {output_file}") if __name__ == "__main__": import sys if len(sys.argv) > 1: command = sys.argv[1] if command == "reset": reset_usage_stats() elif command == "export": export_usage_report(sys.argv[2] if len(sys.argv) > 2 else "cai_usage_report.json") else: print("Usage: python usage_tracking_example.py [reset|export [filename]]") else: display_usage_stats()