Behaviour for LLM chat completions.
Implementations must provide chat/2 and chat_structured/3 callbacks
that take messages and options, returning a Response struct.
Summary
Types
Callbacks
@callback chat(messages :: [message()], opts :: keyword()) :: {:ok, Mnemosyne.LLM.Response.t()} | {:error, Mnemosyne.Errors.Framework.AdapterError.t()}
@callback chat_structured(messages :: [message()], schema :: term(), opts :: keyword()) :: {:ok, Mnemosyne.LLM.Response.t()} | {:error, Mnemosyne.Errors.Framework.AdapterError.t()}