# Summarize records with a model

Use **LLM summarize records** to load a bounded set of retained records, generate a one-sentence summary for each, and store the results as a chosen record type.

## Configure the template

| Parameter | What to enter |
| --- | --- |
| `workflow_name` | A nonempty workflow name. |
| `data_source_id` | The retained-record source to summarize. |
| `limit` | Records to load: 1–5,000, default 200. |
| `model` | A supported provider-prefixed model; the seeded template stores `openai:gpt-4.1-mini`. |
| `record_type` | A nonempty type for saved results; default `summary`. |

Confirm the selected model is offered in your workspace. A stored template default can remain in a definition even when you should select another available model for your process.

## Generate a first result

1. Choose the template and select the source.
2. Set a small limit and confirm the model.
3. Create the workflow and inspect `load → summarize → persist`.
4. Review the prompt and output field in the model job.
5. Validate and start a Manual run.
6. Compare saved summaries against their source content.

The loader requests `shape: normalized`. The prompt asks for one sentence and includes `${content}`. Check that normalized content contains what you expect; a record's metadata alone may not be the material you want summarized.

The model job writes text at `summary`, with a 256-token output limit, temperature 0.2, and concurrency 2. A one-sentence instruction is a request to the model, not a schema that proves every output is exactly one sentence.

## Inspect quality and usage

The job preserves input context alongside the summary and can include finish-reason and usage fields. Check truncated responses, error fields, missing content, and unusually long input. A successful workflow is not a guarantee of factual correctness.

The destination keys include the run and record sequence. New runs can create new results rather than replacing a single permanent summary for each source record. Choose a stable identity strategy if you adapt the process for ongoing updates.

This recipe's loader is bounded and nonbatched; a result count equal to `limit` may mean more source records remain. Model calls and preview execution can incur usage.

See [LLM](/docs/steps/llm-complete), [run modes](/docs/workflows/run-modes), and [workflow outputs](/docs/workflows/outputs).

## Prepared job settings

The starter is enabled and uses a Manual trigger. These settings are supplied by the recipe; review them in the editor before adapting the process. `${…}` values below refer to the corresponding template parameter or run variable.

| Setting | Prepared value |
| --- | --- |
| `load.config.data_source_id` | `"${data_source_id}"` |
| `load.config.limit` | `"${limit}"` |
| `load.config.shape` | `"normalized"` |
| `summarize.config.model` | `"${model}"` |
| `summarize.config.prompt_template` | `"Summarize the following record in one sentence:\n\n${content}"` |
| `summarize.config.output_path` | `"summary"` |
| `summarize.config.max_tokens` | `256` |
| `summarize.config.temperature` | `0.2` |
| `summarize.config.concurrency` | `2` |
| `persist.config.record_type` | `"${record_type}"` |
| `persist.config.idempotency_key_template` | `"summarize:${run_id}:${record_seq}"` |
