# MentorModelUsage record

> The MentorModelUsage record of Novior.MentorAgent.Abstractions.Models: Per-model usage, cost and time series for the admin dashboard (roadmap #9). One entry…

- URL: https://docs.mentoragent.net/api/novior-mentoragent-abstractions-models/mentormodelusage
- Verified with: MentorAgent 1.2.0
- Last updated: 2026-10-27
- Packages: Novior.MentorAgent.Abstractions

Per-model usage, cost and time series for the admin dashboard (roadmap \#9). One entry per distinct model id seen at runtime — typically the cheap chat model, the strong routing model, and the embedding model. Cost is populated only when `MentorOptions.ModelPricing` has an entry for [`MentorModelUsage.ModelId`](https://docs.mentoragent.net/api/novior-mentoragent-abstractions-models/mentormodelusage#modelid).

## Definition

Namespace: `Novior.MentorAgent.Abstractions.Models`. Package: `Novior.MentorAgent.Abstractions`.

`public sealed record MentorModelUsage : IEquatable<MentorModelUsage>`

```shell
dotnet add package Novior.MentorAgent.Abstractions
```

## Constructors

`public MentorModelUsage()`

## Properties

### `AvgLatencyMs`

`public double? AvgLatencyMs { get; init; }`

Average full-response latency (ms) across all calls, or `null`.

### `AvgTimeToFirstByteMs`

`public double? AvgTimeToFirstByteMs { get; init; }`

Average time-to-first-byte (ms) for streaming calls, or `null`.

### `InputCost`

`public decimal? InputCost { get; init; }`

Estimated input cost, or `null` when no pricing is configured for this model.

### `InputTokens`

`public long InputTokens { get; init; }`

### `Kind`

`public MentorModelKind Kind { get; init; }`

### `ModelId`

`public required string ModelId { get; init; }`

### `OutputCost`

`public decimal? OutputCost { get; init; }`

Estimated output cost, or `null` when no pricing is configured.

### `OutputTokens`

`public long OutputTokens { get; init; }`

### `RequestCount`

`public long RequestCount { get; init; }`

### `RequestsWithoutUsage`

`public long RequestsWithoutUsage { get; init; }`

How many of [`MentorModelUsage.RequestCount`](https://docs.mentoragent.net/api/novior-mentoragent-abstractions-models/mentormodelusage#requestcount) reached the provider but reported no token usage — in practice, turns the user stopped mid-stream.

Providers send usage in the final streaming update, so a cancelled stream never delivers it. Those calls are still billed, and billed for the entire input prompt, so omitting them understates spend; but their token counts are genuinely unknown and inventing a number — zero included — would quietly drag every per-request average down. They are therefore counted as requests, contribute nothing to the token totals, and are disclosed here (BUG-032).

### `Series`

`public IReadOnlyList<MentorUsagePoint> Series { get; init; }`

Time-series buckets, oldest first.

### `TotalCost`

`public decimal? TotalCost { get; }`

Estimated total cost, or `null` when pricing is not available.

### `TotalTokens`

`public long TotalTokens { get; }`

---

- Previous: [MentorModelKind enum](https://docs.mentoragent.net/api/novior-mentoragent-abstractions-models/mentormodelkind.md)
- Next: [MentorRagResult record](https://docs.mentoragent.net/api/novior-mentoragent-abstractions-models/mentorragresult.md)
