> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anonalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose the model a space thinks with

> Fourteen models, priced per operation. Pin a cheap one to a noisy space and a strong one to the space that matters.

[← All use cases](/use-cases/overview)

<div className="uc-examples"><a className="uc-api" href="/api-reference/model-selection">API reference</a></div>

## The scenario

Every `reason` call costs credits, and the cost difference between the cheapest
and the most expensive model in the catalog is more than a hundredfold. Most
spaces do not need the expensive one; one or two do.

**What this recipe shows that no other does:** reading the model catalog and
pinning a model **per space**, so cost follows importance instead of being one
global setting.

## Step 1 — See what you can actually use

```python theme={null}
catalog = client.list_catalog_models()
for m in catalog["items"]:
    print(f"{m['id']:45} {m['credits_per_1k_input']} in / {m['credits_per_1k_output']} out")
```

The catalog is generated and checked in, not fetched live, so pricing is
reproducible — a price change arrives as a reviewed release, never as a surprise
on your bill.

Aliases exist for the common cases: `fast`, `balanced`. Naming an alias means
"whatever we currently think is the sensible default at that tier".

## Step 2 — Pin one to a space

```python theme={null}
client.set_reason_settings(space_id="support-logs", model="fast")
client.set_reason_settings(space_id="board-papers", model="balanced")
```

## Step 3 — Check what a space is actually on

```python theme={null}
print(client.get_reason_settings(space_id="board-papers"))
```

`null` means the space is on the deployment default — which is the right answer
for most spaces, and worth confirming before you debug a cost you did not expect.

## Step 4 — Undo it

```python theme={null}
client.reset_reason_settings(space_id="board-papers")
```

Resetting is better than pinning to today's default by name: a space pinned to
an explicit id keeps that model forever, including after we move the default to
something better and cheaper.

## Evals

1. Ask the same question of one space on `fast` and on `balanced`.
2. Compare the answers side by side, not in isolation — the cheap model is often
   indistinguishable on factual recall and noticeably worse on synthesis.
3. Check `get_usage` before and after to see the real credit difference.
4. Pick per space based on that, not on the model's reputation.

## Guardrails

<Warning>
  **A pinned model is pinned forever.** It will not follow the platform default
  forward, so a space pinned today is still on today's model in a year. Reset
  rather than re-pin unless you have a reason to freeze it.
</Warning>

* **Reason settings are owner-only.** A read-only member of a shared space
  cannot change what it thinks with.
* **This is `reason` only.** The drop-in proxy's model is chosen per call or via
  [chat settings](/use-cases/events-not-polling); they are separate knobs.
* **An unknown model id is a 400, not a fallback.** That is deliberate — silently
  answering with a different model than you asked for would corrupt any
  comparison you were trying to make.

## Where to go next

[Cut the bill without cutting recall](/use-cases/cut-the-bill) — the other half
of the cost story, which is how much context you send rather than which model
reads it.
