# `ADK.LLM`
[🔗](https://github.com/zeroasterisk/adk-elixir/blob/main/lib/adk/llm.ex#L1)

LLM behaviour and mock implementation for testing.

# `response`

```elixir
@type response() :: %{content: map(), usage_metadata: map() | nil}
```

# `generate`

```elixir
@callback generate(model :: String.t(), request :: map()) ::
  {:ok, response()} | {:error, term()}
```

# `gemini_backend`

```elixir
@spec gemini_backend() :: module()
```

Returns the Gemini backend module.

# `generate`

```elixir
@spec generate(String.t(), map(), keyword()) :: {:ok, response()} | {:error, term()}
```

Generate a response using the configured LLM backend.

## Options

  * `:retry` - Retry options keyword list, or `false` to disable (default: enabled with defaults)
  * `:circuit_breaker` - Circuit breaker server name/pid, or `nil` to disable (default: `nil`)

## Examples

    ADK.LLM.generate("gemini-flash-latest", %{messages: msgs})
    ADK.LLM.generate("gemini-flash-latest", %{messages: msgs}, retry: [max_retries: 5])
    ADK.LLM.generate("gemini-flash-latest", %{messages: msgs}, retry: false)
    ADK.LLM.generate("gemini-flash-latest", %{messages: msgs}, circuit_breaker: :llm_breaker)

---

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