# `Agentic.LLM.Error`

Normalized error returned from a transport's `parse_chat_response/3`
(or surfaced from a transport network failure).

## Classification taxonomy

`:classification` is one of:

  * `:rate_limit`       — HTTP 429, throttled, quota exceeded
  * `:overloaded`       — 503 + capacity language
  * `:auth`             — 401, ambiguous auth issue
  * `:auth_permanent`   — key revoked/disabled/deleted
  * `:billing`          — 402, insufficient credits
  * `:timeout`          — network timeout, connection reset
  * `:format`           — bad request format (bug in our request)
  * `:model_not_found`  — 404, model deactivated
  * `:context_overflow` — input too long (doesn't trigger failover)
  * `:session_expired`  — 410, needs reauth
  * `:transient`        — generic 5xx, unknown server-side issue
  * `:permanent`        — everything else

# `classification`

```elixir
@type classification() ::
  :rate_limit
  | :overloaded
  | :auth
  | :auth_permanent
  | :billing
  | :timeout
  | :format
  | :model_not_found
  | :context_overflow
  | :session_expired
  | :transient
  | :permanent
```

# `t`

```elixir
@type t() :: %Agentic.LLM.Error{
  classification: classification(),
  message: String.t(),
  rate_limit: Agentic.LLM.RateLimit.t() | nil,
  raw: term(),
  retry_after_ms: non_neg_integer() | nil,
  status: non_neg_integer() | nil
}
```

---

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