Files
NewsAgent/src/view_costs.py
2026-01-27 09:25:11 +01:00

61 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""View cost statistics from the database"""
import asyncio
from .config import get_config
from .storage.database import Database
async def main():
"""Display cost statistics"""
config = get_config()
db = Database(config.database.path)
print("\n" + "=" * 60)
print("News Agent Cost Statistics")
print("=" * 60 + "\n")
# Get total cost
total_cost = await db.get_total_cost()
print(f"💰 Total Cumulative Cost: ${total_cost:.4f}")
print()
# Get recent runs
runs = await db.get_run_stats(limit=20)
if not runs:
print("No runs recorded yet.")
return
print(f"Recent Runs (last {len(runs)}):")
print("-" * 60)
print(f"{'Date':<12} {'Articles':<10} {'Included':<10} {'Cost':<10}")
print("-" * 60)
for run in runs:
date = run["run_date"]
articles = run["articles_processed"]
included = run["articles_included"]
cost = run["total_cost"]
print(f"{date:<12} {articles:<10} {included:<10} ${cost:<9.4f}")
print("-" * 60)
# Calculate averages
if runs:
avg_cost = sum(r["total_cost"] for r in runs) / len(runs)
avg_articles = sum(r["articles_included"] for r in runs) / len(runs)
print(f"\nAverages (last {len(runs)} runs):")
print(f" Cost per run: ${avg_cost:.4f}")
print(f" Articles per digest: {avg_articles:.1f}")
if avg_articles > 0:
print(f" Cost per article: ${avg_cost / avg_articles:.4f}")
print("\n" + "=" * 60 + "\n")
if __name__ == "__main__":
asyncio.run(main())