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

# Recipes

> Run training and evaluation workflows

Recipes are pre-built workflows for training and evaluating models. Run them on Adaptive's compute infrastructure.

<Tabs>
  <Tab title="SDK" icon="code">
    ## Run a recipe

    ```python theme={null}
    job = adaptive.jobs.run(
        recipe_key="sft",
        num_gpus=1,
        args={
            "model_to_train": "llama-3.1-8b-instruct",
            "output_model_key": "my-model-v1",
            "dataset": "my-training-data",
            "epochs": 3,
            "data_seed": 42,
        },
    )
    ```

    | Parameter    | Type | Required | Description                                   |
    | ------------ | ---- | -------- | --------------------------------------------- |
    | `recipe_key` | str  | Yes      | Recipe identifier (see below)                 |
    | `num_gpus`   | int  | Yes      | Number of GPUs to use                         |
    | `args`       | dict | No       | Recipe-specific arguments (defaults to empty) |

    ### Common training arguments

    | Argument               | Type  | Default | Description                                                                                                 |
    | ---------------------- | ----- | ------- | ----------------------------------------------------------------------------------------------------------- |
    | `data_seed`            | int   | `42`    | Seed for dataset shuffling. Set for reproducible training runs.                                             |
    | `checkpoint_frequency` | float | `0.2`   | Fraction of total training steps between saves. `0.2` = save every 20% of training (5 checkpoints per run). |

    All training recipes (`sft`, `preference_rlhf`, `metric_rlhf`, `rl`) support both arguments. Evaluation recipes use neither.

    <Warning>
      `checkpoint_frequency` is a **fraction of total steps**, not an absolute step count. `checkpoint_frequency=0.1` saves every 10% of training; it is not "every 10 steps." Disk usage scales linearly with frequency × model size × run length — a 70B model checkpointed every 10% of a long run uses meaningful storage.
    </Warning>

    ## Built-in recipes

    **Training:**

    | Recipe                 | Key               | Use when                                      |
    | ---------------------- | ----------------- | --------------------------------------------- |
    | Supervised fine-tuning | `sft`             | You have high-quality completions             |
    | RL on preferences      | `preference_rlhf` | You have preferred/rejected pairs             |
    | RL on metrics          | `metric_rlhf`     | You have completion-level scores              |
    | RL with grader         | `rl`              | Criteria can be expressed in natural language |

    **Evaluation:**

    | Recipe               | Key    | Use when                    |
    | -------------------- | ------ | --------------------------- |
    | Evaluate with grader | `eval` | Comparing model performance |

    **Optimization:**

    | Recipe                         | Key                 | Use when                                            |
    | ------------------------------ | ------------------- | --------------------------------------------------- |
    | Speculative decoding alignment | `specdec_alignment` | You want to accelerate inference with a draft model |

    ## Run an evaluation

    ```python theme={null}
    adaptive.jobs.run(
        recipe_key="eval",
        num_gpus=2,
        args={
            "dataset": "eval-prompts",
            "models_to_evaluate": ["model-a", "model-b"],
            "graders": ["quality-judge"],
        },
    )
    ```

    Results appear as evaluation artifacts with score tables and per-sample interactions. Evaluations use [Graders](/v0.14/core/graders) to score completions.

    ## Resume an interrupted run

    Resume picks up from the last saved checkpoint and keeps the same job ID — it does not fork a new run. Resume from the **Runs** tab in the UI, or re-launch the job with resume enabled.

    Resume is step-level, not epoch-level. Multi-stage runs (currently `preference_rlhf`, which orchestrates DPO / PPO / GRPO under one recipe) track each stage's progress independently — resume picks up at the active stage's last checkpoint, not the first stage.

    ## Promote a checkpoint

    Any saved checkpoint can be promoted to a standalone model in the project registry. See [Promoted checkpoints](/v0.14/core/models#promoted-checkpoints) on the Models page for the full workflow, including the LoRA-backbone footgun.

    For custom recipes, see [Custom Recipes](/v0.14/harmony/overview).

    See [SDK Reference](/v0.14/reference/sdk) for all job methods.
  </Tab>

  <Tab title="UI" icon="mouse-pointer">
    ## Run a recipe

    Navigate to your project and open the **Recipes** tab. Select a recipe and configure its parameters.

    <Frame caption="Configure recipe parameters in the UI">
      <img src="https://mintcdn.com/adaptiveml/R5QotOduSKbjj2fS/static/recipe-run-ui.png?fit=max&auto=format&n=R5QotOduSKbjj2fS&q=85&s=0ade1307597eed292c594f2cca1552f4" width="3390" height="1896" data-path="static/recipe-run-ui.png" />
    </Frame>

    Click **Run** to launch. Track progress in the **Runs** tab.

    ## Monitor runs

    Open the **Monitoring** tab to watch training telemetry in real time. See [Monitoring](/v0.14/core/monitoring) for the full guide — loss curves, reward signals, side-by-side run comparison, and how to log custom metrics from a Harmony recipe.

    ## Promote a checkpoint

    Open a run and pick **Promote checkpoint** on any saved checkpoint. See [Promoted checkpoints](/v0.14/core/models#promoted-checkpoints) for the full workflow.

    If a run is interrupted, resume it from the **Runs** tab. Resume picks up at the last saved checkpoint and keeps the same run record; multi-stage runs resume at the active stage.

    ## View evaluation results

    After an evaluation completes, click the run to see the score table.

    <Frame caption="Evaluation results show scores across models and graders">
      <img src="https://mintcdn.com/adaptiveml/-JTAI1NWyW3EKe1R/static/score_card_light.png?fit=max&auto=format&n=-JTAI1NWyW3EKe1R&q=85&s=db4df7edc9f5eb8db75cb99b2dd531be" className="block dark:hidden" width="1280" height="500" data-path="static/score_card_light.png" />

      <img src="https://mintcdn.com/adaptiveml/-JTAI1NWyW3EKe1R/static/score_card_dark.png?fit=max&auto=format&n=-JTAI1NWyW3EKe1R&q=85&s=f0ecfa649c9bf06a5849c92a28c3d20f" className="hidden dark:block" width="1280" height="500" data-path="static/score_card_dark.png" />
    </Frame>

    Click any row to drill down into individual interactions and compare model outputs side-by-side.
  </Tab>
</Tabs>
