Skip to content

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 both cost_usd (total) and cost_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 aggregationByModel dimension in MetricSet and DailySummary groups 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.json instead 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).
  • KindEstimated measurement kind preserved in both Combined and BySource output paths via shared metricKind() helper.
  • validTokenCount rejects 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

go get github.com/plexusone/omnidevx-core@v0.3.0

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
  • devfoliodevfolio devx dashboard --period monthly uses 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.