# `LeXtract.Error.External.Annotation`
[🔗](https://github.com/YgorCastor/lextract.git/blob/main/lib/lextract/error/external/annotation.ex#L1)

Error for LLM annotation/inference failures.

Raised when LLM API calls fail, including network errors, rate limits,
authentication issues, or invalid responses.

## Examples

    iex> error = LeXtract.Error.External.Annotation.exception(
    ...>   reason: "API rate limit exceeded"
    ...> )
    iex> Exception.message(error)
    "LLM annotation failed: API rate limit exceeded"

    iex> error = LeXtract.Error.External.Annotation.exception(
    ...>   reason: "request timeout",
    ...>   request_details: %{model: "gemini-2.0-flash", chunk_id: 5}
    ...> )
    iex> String.contains?(Exception.message(error), "gemini-2.0-flash")
    true

# `t`

```elixir
@type t() :: %LeXtract.Error.External.Annotation{
  __exception__: term(),
  bread_crumbs: term(),
  class: term(),
  path: term(),
  reason: String.t(),
  request_details: map() | nil,
  splode: term(),
  stacktrace: term(),
  vars: term()
}
```

# `exception`

```elixir
@spec exception(opts :: Keyword.t()) :: %LeXtract.Error.External.Annotation{
  __exception__: term(),
  bread_crumbs: term(),
  class: term(),
  path: term(),
  reason: term(),
  request_details: term(),
  splode: term(),
  stacktrace: term(),
  vars: term()
}
```

Create an `Elixir.LeXtract.Error.External.Annotation` without raising it.

## Keys

- :reason
- :request_details

# `message`

```elixir
@spec message(t()) :: String.t()
```

Formats the error message for LLM annotation failures.

---

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