# `CliSubprocessCore.ModelInput`
[🔗](https://github.com/nshkrdotcom/cli_subprocess_core/blob/v0.1.0/lib/cli_subprocess_core/model_input.ex#L1)

Normalizes mixed model input into one authoritative model payload.

Callers may supply either raw model resolution knobs or a pre-resolved
`CliSubprocessCore.ModelRegistry.Selection`. This module centralizes the
arbitration and consistency rules so downstream layers can consume one
canonical payload instead of re-resolving model policy locally.

# `attrs`

```elixir
@type attrs() :: keyword() | map()
```

# `t`

```elixir
@type t() :: %CliSubprocessCore.ModelInput{
  attrs: attrs(),
  provider: atom(),
  selection: CliSubprocessCore.ModelRegistry.Selection.t()
}
```

# `normalize`

```elixir
@spec normalize(atom(), attrs()) :: {:ok, t()} | {:error, term()}
```

Normalizes model input for `provider`.

Returns the authoritative `Selection` and normalized attrs/options with
`:model_payload` attached and raw model-resolution keys removed.

# `normalize`

```elixir
@spec normalize(atom(), attrs(), keyword()) :: {:ok, t()} | {:error, term()}
```

---

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