feat(opencode): add modelBreakdowns to JSON output#816
feat(opencode): add modelBreakdowns to JSON output#816mjyoo2 wants to merge 1 commit intoryoppippi:mainfrom
Conversation
Add per-model token breakdown to all opencode commands for consistency with ccusage output. This enables tracking usage across different models. Modified commands: - daily: includes modelBreakdowns in JSON output - monthly: includes modelBreakdowns in JSON output - weekly: includes modelBreakdowns in JSON output - session: includes modelBreakdowns in JSON output Each breakdown contains: - modelName, inputTokens, outputTokens - cacheCreationTokens, cacheReadTokens, cost Implementation matches ccusage exactly: - TokenStats type for aggregation - createModelBreakdowns() helper function - Sorted by cost descending - Skip <synthetic> model - Fallback to 'unknown' for missing model names
📝 WalkthroughWalkthroughThis PR introduces per-model token and cost aggregation across four report command files (daily, monthly, session, weekly). Each command now accumulates metrics separately per model, creates sorted breakdowns, and extends output structures with a modelBreakdowns array. Synthetic model entries are skipped during aggregation. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Add
modelBreakdownsfield to@ccusage/opencodeJSON output for feature parity withccusage(Claude Code).Currently
@ccusage/opencodeonly providesmodelsUsed(model name array), whileccusageprovides detailedmodelBreakdownswith per-model token counts and costs.Changes
modelBreakdownsarray to JSON output in daily, weekly, monthly, and session reportsmodelName,inputTokens,outputTokens,cacheCreationTokens,cacheReadTokens,costmodelsUsedarray is preservedBefore/After
Before
{ "daily": [{ "date": "2026-01-20", "inputTokens": 228, "outputTokens": 346277, "totalCost": 95.38, "modelsUsed": ["claude-opus-4-5", "gpt-5.2-codex"] }] }After
{ "daily": [{ "date": "2026-01-20", "inputTokens": 228, "outputTokens": 346277, "totalCost": 95.38, "modelsUsed": ["claude-opus-4-5", "gpt-5.2-codex"], "modelBreakdowns": [ { "modelName": "claude-opus-4-5", "inputTokens": 200, "outputTokens": 340000, "cacheCreationTokens": 7268400, "cacheReadTokens": 82593000, "cost": 94.50 }, { "modelName": "gpt-5.2-codex", "inputTokens": 28, "outputTokens": 6277, "cacheCreationTokens": 0, "cacheReadTokens": 0, "cost": 0.88 } ] }] }Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.