# `Alloy.ModelMetadata`
[🔗](https://github.com/alloy-ex/alloy/blob/v0.10.1/lib/alloy/model_metadata.ex#L1)

Provider model metadata used for context budgeting.

The primary consumer today is `Alloy.Context.Compactor`, but this module
keeps model-window knowledge in one place so provider updates do not require
editing token estimation logic directly.

# `model_entry`

```elixir
@type model_entry() :: %{
  name: String.t(),
  limit: pos_integer(),
  suffix_patterns: [String.t() | Regex.t()]
}
```

# `override_entry`

```elixir
@type override_entry() ::
  pos_integer()
  | %{
      :limit =&gt; pos_integer(),
      optional(:suffix_patterns) =&gt; [String.t() | Regex.t()]
    }
```

# `catalog`

```elixir
@spec catalog() :: [model_entry()]
```

Returns the known model catalog.

# `context_window`

```elixir
@spec context_window(
  String.t(),
  %{optional(String.t()) =&gt; override_entry()} | [{String.t(), override_entry()}]
) :: pos_integer() | nil
```

Returns the known context window limit for a model name.

`overrides` may provide exact-model or family overrides as either:

- `%{"model-name" => 1_000_000}`
- `%{"model-name" => %{limit: 1_000_000, suffix_patterns: ["", ~r/^-+$/]}}`

For overrides that only provide a limit, existing catalog suffix patterns are
reused when available; unknown models default to exact-match only.

Returns `nil` when the model is not in the current catalog or overrides.

# `default_context_window`

```elixir
@spec default_context_window() :: pos_integer()
```

Returns the default fallback context window for unknown models.

---

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