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

# Structured Output

> Get JSON back instead of prose

Asking a model for JSON in a system prompt works most of the time, which is the problem.
`generateStructured` validates the result against a schema and can repair it.

```ts theme={"theme":{"light":"vitesse-light","dark":"vitesse-black"}}
interface Person {
  name: string
  age: number
}

const result = await RunAnywhere.llm.generateStructured<Person>(
  'Extract the name and age: Dana is 34.',
  schema,
  'validationOnly',
  { temperature: 0.1 }
)
```

## Enforcement modes

| Mode | Behaviour |
| - | - |
| `'validationOnly'` | Generate freely, then validate. The default. |
| `'repair'` | Validate, then retry once with a repair instruction. |
| `'constrained'` | **Throws today.** |

Validation-only is the default and is right when a retry is cheap. Repair costs a second
generation when the first is invalid, which is worth it when the call is user-facing and a
failure means showing an error.

## The schema

```ts theme={"theme":{"light":"vitesse-light","dark":"vitesse-black"}}
const schema = {
  /* your JSON schema */
}
```

Keep schemas small. A small model handles four flat fields reliably and a deeply nested
structure badly. When you need something complex, ask for the pieces separately rather than
one large object.

Naming fields the way a person would helps: `totalPrice` gets better results than `tp`.

## Reading the result

```ts theme={"theme":{"light":"vitesse-light","dark":"vitesse-black"}}
// React Native's generateStructured is generic over the parsed type,
// so the result is typed without a cast
```

## When to reach for this

| Task | Approach |
| - | - |
| Extracting fields from text | Structured output |
| Classifying into fixed labels | Structured output, or a one-word prompt |
| Anything you will `JSON.parse` | Structured output |
| Prose for a human to read | Plain generation |

If you are about to write a regex over a model's reply, you want this instead.

## Temperature

Lower it. Structured extraction is not a creative task, and `0.1` to `0.3` produces far more
consistent field values than the default.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.