# `Mnemosyne.LLM`
[🔗](https://github.com/edlontech/mnemosyne/blob/main/lib/mnemosyne/llm.ex#L1)

Behaviour for LLM chat completions.

Implementations must provide `chat/2` and `chat_structured/3` callbacks
that take messages and options, returning a Response struct.

# `message`

```elixir
@type message() :: %{role: atom(), content: String.t()}
```

# `chat`

```elixir
@callback chat(messages :: [message()], opts :: keyword()) ::
  {:ok, Mnemosyne.LLM.Response.t()}
  | {:error, Mnemosyne.Errors.Framework.AdapterError.t()}
```

# `chat_structured`

```elixir
@callback chat_structured(messages :: [message()], schema :: term(), opts :: keyword()) ::
  {:ok, Mnemosyne.LLM.Response.t()}
  | {:error, Mnemosyne.Errors.Framework.AdapterError.t()}
```

---

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