# `Nous.Eval.Metrics`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/eval/metrics.ex#L1)

Metrics collected during evaluation runs.

Tracks token usage, latency, tool calls, and costs.

## Example

    metrics = Metrics.new()
    metrics = Metrics.from_usage(agent_result.usage)
    IO.puts("Total tokens: #{metrics.total_tokens}")

# `t`

```elixir
@type t() :: %Nous.Eval.Metrics{
  estimated_cost: float() | nil,
  first_token_ms: non_neg_integer() | nil,
  input_tokens: non_neg_integer(),
  iterations: non_neg_integer(),
  model_latency_ms: non_neg_integer(),
  output_tokens: non_neg_integer(),
  requests: non_neg_integer(),
  retries: non_neg_integer(),
  tool_calls: non_neg_integer(),
  tool_errors: non_neg_integer(),
  tool_latency_ms: non_neg_integer(),
  tools_used: %{required(String.t()) =&gt; non_neg_integer()},
  total_duration_ms: non_neg_integer(),
  total_tokens: non_neg_integer()
}
```

# `from_agent_result`

```elixir
@spec from_agent_result(map(), non_neg_integer()) :: t()
```

Create metrics from an agent result.

# `from_usage`

```elixir
@spec from_usage(Nous.Usage.t()) :: t()
```

Create metrics from a Nous.Usage struct.

# `merge`

```elixir
@spec merge(t(), t()) :: t()
```

Merge two metrics structs.

# `new`

```elixir
@spec new() :: t()
```

Create empty metrics.

# `with_cost`

```elixir
@spec with_cost(t(), String.t()) :: t()
```

Add cost estimation to metrics.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
