# `GEPA.LLM.Request`
[🔗](https://github.com/nshkrdotcom/gepa_ex/blob/v0.3.0/lib/gepa/llm/request.ex#L1)

Normalized request passed from GEPA to LLM adapters.

# `prompt`

```elixir
@type prompt() :: String.t() | [map()]
```

# `t`

```elixir
@type t() :: %GEPA.LLM.Request{
  input: prompt() | nil,
  max_tokens: pos_integer() | nil,
  messages: [map()] | nil,
  metadata: map(),
  model: String.t() | nil,
  provider_opts: keyword(),
  schema: keyword() | map() | nil,
  session: term(),
  stream?: boolean(),
  system: String.t() | nil,
  temperature: float() | nil,
  timeout: pos_integer() | nil,
  tool_choice: :auto | :none | :required | {:tool, String.t()} | nil,
  tools: [term()],
  top_p: float() | nil
}
```

# `from_prompt`

```elixir
@spec from_prompt(
  prompt(),
  keyword()
) :: t()
```

# `prompt`

```elixir
@spec prompt(t()) :: prompt() | nil
```

# `structured`

```elixir
@spec structured(
  prompt(),
  keyword()
) :: t()
```

# `to_text`

```elixir
@spec to_text(prompt() | nil) :: String.t() | nil
```

Render prompt messages to plain text for adapters that only support text.

---

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