--- title: Applying preferences to a dataset | Adaption description: Three ways to inject your preferences, instructions, or guidelines into an Adaptive Data run — universal prompts, context columns, and the brand-controls blueprint. --- A common question: **“How do I push my preferences into the dataset?”** You have an instruction, a tone, a policy, or a piece of context that should shape what Adaptive Data produces—and you want it applied to the run, not the upstream pipeline. There are **three** places to encode that, each with different scope. They’re complementary: most real runs combine at least two. | Approach | Where it lives | Scope | | -------------------- | ----------------------------- | ------------------------------------------------------------ | | **Universal prompt** | Web app (columns step) | One instruction applied to every row | | **Context columns** | SDK or app | Per-row supporting material | | **Blueprint** | SDK (`brand_controls`) or app | One brand/voice/policy applied to every generated completion | ## Universal prompt A **universal prompt** is a single instruction—written once—that the platform applies to every row of your dataset. It’s the right tool when **every row should be processed the same way** but your data doesn’t have a per-row prompt column. For example, if every row holds a customer review and you want to classify each one, your universal prompt might be: > Classify the sentiment of this review as one of: positive, neutral, negative. Respond with one word. The universal prompt is configured in the web app today. Walk-through: [Universal prompts](/guides/universal-prompts/index.md). Universal prompt is currently a web-app feature and is not part of the public SDK’s `column_mapping`. If your workflow is SDK-driven and you need the same instruction on every row, the closest equivalent is a fixed string column in your dataset mapped to **`prompt`**. ## Context columns **Context columns** carry **per-row** background information, reference material, or metadata that the model needs to answer the prompt. Use them when your preferences vary row by row—a target audience, a product line, a retrieved document, an internal label—and should ride alongside each prompt. You can tag **multiple** columns as context. They are passed to the model together with the prompt at generation time. ``` run = client.datasets.run( dataset_id, column_mapping={ "prompt": "instruction", "completion": "response", "context": ["audience", "product_line", "reference_doc"], }, ) ``` Use this when the preference is **structured per row**—different audiences for different rows, different reference passages, different policy regions. For the broader concept and the other column roles, see [Column selection](/guides/column-selection/index.md). ## Blueprint (brand controls) The **blueprint** is a freeform string injected as a **system prompt on every generated completion**. It’s the right tool for **qualitative** preferences that apply to the whole run: tone, persona, language, or any guideline that doesn’t fit a structured field. ``` run = client.datasets.run( dataset_id, column_mapping={"prompt": "instruction", "completion": "response"}, brand_controls={ "blueprint": ( "You are a customer-success assistant for Acme. " "Answer in British English, stay warm but concise, " "and never recommend third-party tools." ), }, ) ``` Blueprint sits alongside the structured `brand_controls` fields—`length`, `safety_categories`, `hallucination_mitigation`—on the same run. For the full set of brand-control options, see [Brand controls](/guides/safety-and-length-constraints/index.md). ## Choosing between them The three approaches differ along three axes: - **Scope** — universal prompt and blueprint apply **to every row**; context columns are **per row**. - **Where the preference lives** — universal prompt and blueprint are part of the **run configuration**; context columns are part of your **dataset**. - **What they steer** — universal prompt becomes the **instruction** the model is asked to follow; context columns supply **material** the model reads; blueprint becomes a **system prompt** that shapes how every completion is written. These compose: - **Universal prompt + context columns** — the instruction is constant; the per-row content varies. - **Per-row prompts + blueprint** — your dataset already has prompts; blueprint adds the brand voice on top. - **Universal prompt + context columns + blueprint** — a constant task, per-row content, and a global voice all on the same run. Universal prompt and per-row `prompt` columns are alternatives: a row has either an instruction in its prompt cell, or a universal instruction supplied at run time, but not both.