# `PromptRunner.LLM`
[🔗](https://github.com/nshkrdotcom/prompt_runner_sdk/blob/v0.4.0/lib/prompt_runner/llm.ex#L1)

Behaviour and types for LLM integrations.

# `close_fun`

```elixir
@type close_fun() :: (-&gt; any())
```

# `provider`

```elixir
@type provider() :: sdk()
```

# `sdk`

```elixir
@type sdk() :: :claude | :codex | :amp
```

# `stream`

```elixir
@type stream() :: Enumerable.t()
```

# `stream_event`

```elixir
@type stream_event() :: map()
```

# `normalize_provider`

```elixir
@callback normalize_provider(term()) :: provider() | {:error, term()}
```

# `normalize_sdk`

```elixir
@callback normalize_sdk(term()) :: sdk() | {:error, term()}
```

# `start_stream`

```elixir
@callback start_stream(map(), String.t()) ::
  {:ok, stream(), close_fun(), map()} | {:error, term()}
```

---

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