Reading cost views
Time ranges, grouping, modality badges, media units, and the two kinds of $0.
A project's Costs tab shows what the project spent and where. Every number on it comes from bounded metadata — token counts, media quantities, and selectors the SDK reported. Nothing here was computed from your prompts or responses, because Solwyn never saw them.
Ranges and grouping
The range toggle drives the whole tab: 7d, 30d, 90d, or 365d. Group the breakdown by day, model, or provider — model groups are split by model and provider, because the same model id can price differently on different providers.
Both axes are tier-gated: the Free tier has 7-day range and by-day grouping; wider ranges and more groupings unlock by tier, up to 365 days on Scale. See Plans & billing for the exact gates.
Modality is deliberately not a grouping axis. There are no per-modality cost roll-ups — the product is model-first, and a model's row already carries its modality.
Modality on the events table
The cost-events table shows modality two ways:
- A per-row badge on the model cell —
Image,Audio,Video, orEmbedding. Text is the baseline and carries no badge. - A filter above the table: All modalities / Text / Image / Audio / Video / Embedding.
Expanding a non-text event shows its Media Units — the non-token quantities the call was priced on, like 3 images · 1024x1024 · hd or a video's seconds. When a quantity is an SDK-side estimate rather than a provider-reported count, it renders with a ~ prefix and a tooltip saying so — the same convention estimated token counts use.
The two kinds of $0
Two different facts can put a $0 on this page, and the UI keeps them apart — each has its own tooltip:
- Local — $0 by design. Calls to self-hosted providers (
ollama,vllm,lmstudio). They genuinely cost nothing; the neutral note exists for visibility, and they are included in call counts. - Unpriced — real spend Solwyn declined to guess at. A call that cost real money but exposed no observable quantity to price on. It is flagged with a warning tone and excluded from cost totals — the hero total says so whenever unpriced events exist in the range. Never a fabricated $0.
This is the dashboard face of the surface-coverage honesty lane: recorded, visible, explicitly not costed.
Grouping costs by tag
Tags attached via the SDK (SDK v0.3.0+) — solwyn.run(name, tags={...}) per scope, or solwyn_tags={...} per call — power tag-based showback: choose Tag as the cost-breakdown dimension and enter a tag key (1–64 characters) to group spend by that key's values. Events without the key fall under (untagged). Available on Team and Scale. See Tags for how to attach them and their bounds.
The events table does not yet filter or display individual tags — grouping by key is the tag view today.
Blocked-call savings
When a hard-deny budget blocks calls, the Costs tab shows a savings callout — the blocked call count and an estimated ~$ saved, computed from the input tokens those calls declared. Blocked calls never appear in spend; they never happened. See Budgets.