omnidevx-core v0.3.0 Release Notes¶
Release Date: 2026-07-26
Overview¶
Third release of omnidevx-core: cost estimation and model-level aggregation. These two features close the gap in historical telemetry (events collected before oTel mode was enabled lack explicit cost) and enable per-model breakdowns for dashboards and analytics.
Highlights¶
-
Cost backfill from model pricing — When events have model + token attributes but lack
cost_usd, the report pipeline now estimates cost using a built-in pricing table. Estimated cost is tracked in bothcost_usd(total) andcost_usd_estimated(backfilled portion only), so consumers can distinguish observed from estimated cost. The pricing table covers Claude models (Opus, Sonnet, Haiku, Fable) with July 2026 rates and uses the 5-minute cache TTL multipliers (0.1x read, 1.25x write). -
Model-level aggregation —
ByModeldimension inMetricSetandDailySummarygroups token and cost metrics by model name. This enables donut charts (total by model) and stacked bar charts (period-over-period by model) in downstream dashboard exports. -
Externalized pricing — Model pricing is now embedded from
pricing.jsoninstead of hard-coded in Go, making rate updates easier.
Pricing Table¶
| Model | Input | Output | Cache Read | Cache Write |
|---|---|---|---|---|
| claude-opus-4-8 | $5.00 | $25.00 | $0.50 | $6.25 |
| claude-fable-5 | $10.00 | $50.00 | $1.00 | $12.50 |
| claude-sonnet-5 | $2.00 | $10.00 | $0.20 | $2.50 |
| claude-haiku-4-5 | $1.00 | $5.00 | $0.10 | $1.25 |
Prices per 1M tokens. LookupPricing supports exact match and
longest-prefix matching — version suffixes like [1m] (extended context)
or -20251001 (dated snapshot) resolve correctly. Boundary validation
prevents claude-opus-4-80 from matching claude-opus-4-8.
Verification¶
- Cost backfill tested against fabricated events: backfill when absent, no backfill when cost already set, skip unknown models (no silent zero-cost).
KindEstimatedmeasurement kind preserved in both Combined and BySource output paths via sharedmetricKind()helper.validTokenCountrejects negative, fractional, and out-of-range token values to prevent bogus cost estimates.- ByModel aggregation verified: model-level grouping correct, non-model events (commits) excluded from ByModel.
Installation¶
Usage¶
r := report.Build(events, subject, period)
// Observed + estimated cost in Combined view
totalCost := r.Metrics.Combined["cost_usd"]
estimatedPortion := r.Metrics.Combined["cost_usd_estimated"]
// Per-model breakdown
for model, metrics := range r.Metrics.ByModel {
fmt.Printf("%s: %d tokens, $%.2f\n",
model, metrics["input_tokens"].Value, metrics["cost_usd"].Value)
}
Documentation¶
- Site: https://plexusone.github.io/omnidevx-core
- Period Reports concept — updated with cost estimation behavior
Related¶
devfolio—devfolio devx dashboard --period monthlyuses ByModel to build donut and stacked bar charts in period dashboards.visionstudio— renders period dashboards with model breakdowns.
Migration¶
No breaking changes from v0.2.0. ByModel is a new field in MetricSet
and DailySummary, purely additive. Cost backfill is automatic for
events missing cost_usd — no configuration required.
What's Next¶
Session-to-commit correlation remains on the roadmap. The SPACE/AI-SPACE analytics engines will consume ByModel data to compute model-specific efficiency metrics.
See CHANGELOG.md for the categorized commit list.