5.9 KiB
5.9 KiB
Cost Tracking
News Agent automatically tracks and displays the cost of each run in your daily email digest.
Features
- Per-Run Cost: Shows exactly how much each digest cost to generate
- Cumulative Total: Tracks total spending across all runs
- Database Storage: All cost data saved in SQLite database
- Email Display: Costs shown at the bottom of every digest email
How It Works
- OpenRouter API Returns Costs: Each API call includes cost information
- Client Tracks Session Cost: Accumulates cost during the run
- Database Stores Run Data: Saves cost along with article counts
- Email Shows Costs: Displays both session and cumulative costs
Email Display
At the bottom of each digest email, you'll see:
💰 Cost Information
This digest: $0.0234 | Total spent: $1.2456
- This digest: Cost for generating this specific email (filtering + summarization)
- Total spent: Cumulative cost across all runs since you started using the system
View Cost Statistics
Run the cost viewer script:
cd ~/news-agent
source .venv/bin/activate
python -m src.view_costs
Example output:
============================================================
News Agent Cost Statistics
============================================================
💰 Total Cumulative Cost: $1.2456
Recent Runs (last 20):
------------------------------------------------------------
Date Articles Included Cost
------------------------------------------------------------
2026-01-26 152 15 $0.0234
2026-01-25 143 12 $0.0198
2026-01-24 167 15 $0.0245
...
------------------------------------------------------------
Averages (last 20 runs):
Cost per run: $0.0226
Articles per digest: 14.2
Cost per article: $0.0016
============================================================
Cost Breakdown
Typical Costs (with openai/gpt-4o-mini)
| Operation | Articles | Cost |
|---|---|---|
| Filtering | 150 articles | ~$0.015-0.020 |
| Summarization | 15 articles | ~$0.005-0.008 |
| Total per run | - | ~$0.020-0.028 |
Monthly Estimates
| Frequency | Cost/Run | Monthly Cost |
|---|---|---|
| Daily | $0.025 | ~$0.75/month |
| Daily | $0.030 | ~$0.90/month |
Note: Actual costs vary based on:
- Number of articles fetched
- Content length
- Model used
- Number of articles passing filter
Cost Optimization Tips
1. Adjust Filtering Threshold
Higher threshold = fewer articles = lower cost:
ai:
filtering:
min_score: 7.0 # Stricter (was 5.5)
max_articles: 10 # Fewer articles (was 15)
2. Use Cheaper Models
ai:
model: "google/gemini-2.0-flash-exp:free" # FREE (has rate limits)
# OR
model: "openai/gpt-4o-mini" # Cheap and reliable
3. Reduce RSS Sources
Fewer sources = fewer articles = lower cost:
sources:
rss:
# Comment out sources you don't need
4. Track and Set Budget Alerts
Monitor costs and adjust:
# View costs regularly
python -m src.view_costs
# If costs are too high, adjust config.yaml settings
Database Schema
The runs table stores:
CREATE TABLE runs (
id INTEGER PRIMARY KEY,
run_date TEXT NOT NULL,
articles_fetched INTEGER NOT NULL,
articles_processed INTEGER NOT NULL,
articles_included INTEGER NOT NULL,
total_cost REAL NOT NULL,
filtering_cost REAL DEFAULT 0,
summarization_cost REAL DEFAULT 0,
created_at TEXT NOT NULL
);
Query Costs Manually
Using SQLite:
sqlite3 data/articles.db
-- Total cost
SELECT SUM(total_cost) FROM runs;
-- Cost by date
SELECT run_date, total_cost FROM runs ORDER BY run_date DESC;
-- Average cost
SELECT AVG(total_cost) FROM runs;
-- Cost this month
SELECT SUM(total_cost) FROM runs
WHERE run_date >= date('now', 'start of month');
Troubleshooting
Cost Shows $0.0000
Possible causes:
- Using free model - Free models may not report costs
- API response format - OpenRouter might not include cost field
- First run - Database just initialized
Check:
# View logs for cost tracking
grep -i "cost" data/logs/news-agent.log
# Check if runs are being saved
sqlite3 data/articles.db "SELECT * FROM runs ORDER BY created_at DESC LIMIT 5;"
Cost Seems Wrong
Verify model pricing:
- Check https://openrouter.ai/models for current pricing
- Different models have different costs
- Costs change over time
Check API responses:
# Enable debug logging
# Edit config.yaml:
logging:
level: "DEBUG"
# Run and check logs
python -m src.main
grep "cost" data/logs/news-agent.log
Export Cost Data
Export to CSV:
sqlite3 -header -csv data/articles.db \
"SELECT run_date, articles_processed, articles_included, total_cost
FROM runs ORDER BY run_date" > costs.csv
Import into Excel/Sheets for analysis.
Cost Projections
Based on current usage, project future costs:
# Get average cost
python -m src.view_costs
# Multiply by days
# If avg = $0.025/day:
# - Weekly: $0.025 × 7 = $0.175
# - Monthly: $0.025 × 30 = $0.75
# - Yearly: $0.025 × 365 = $9.13
Privacy Note
All cost data is stored locally in your SQLite database (data/articles.db). No cost information is sent anywhere except:
- Displayed in your email (which you control)
- Stored in your local database
Future Enhancements
Potential improvements:
- Split costs - Separate filtering vs summarization costs
- Budget alerts - Email warning if cost exceeds threshold
- Cost predictions - Estimate next run cost
- Web dashboard - Visualize cost trends over time
- Cost per category - Track which categories cost most
Need Help?
- View current costs:
python -m src.view_costs - Check database:
sqlite3 data/articles.db "SELECT * FROM runs;" - Review logs:
tail -f data/logs/news-agent.log - OpenRouter pricing: https://openrouter.ai/models