diff --git a/docs/studio/data-designer-build.mdx b/docs/studio/data-designer-build.mdx index 5b139eebbf..2d9d766755 100644 --- a/docs/studio/data-designer-build.mdx +++ b/docs/studio/data-designer-build.mdx @@ -3,7 +3,7 @@ title: "Data Designer in NeMo Studio" description: "Build, preview, and edit synthetic-data jobs visually with the Data Designer builder." --- -Data Designer lets you generate and transform datasets visually — no JSON to write. You lay out columns in the builder, wire them together by referencing one another, preview a handful of rows, then run the full job and inspect, profile, and edit the result. +Data Designer lets you generate and transform datasets visually — no JSON to write. You start from a template, an AI-drafted config, a clone of an earlier job, or an empty canvas; lay out columns in the builder and wire them together by referencing one another; preview a handful of rows; then run the full job and inspect, profile, edit, and split the result. @@ -14,8 +14,8 @@ Studio is still in early development. Many features are missing or should be exp This page walks through the full workflow: 1. [View existing jobs](#view-jobs) -2. [Create a new job](#create-a-new-job) -3. [Build a recipe with the builder](#the-dag-builder) +2. [Start a new fileset](#start-a-new-fileset) +3. [Build a recipe with the builder](#the-builder) 4. [Add columns](#add-columns) 5. [Configure column properties](#configure-column-properties) 6. [Add and configure models](#add-and-configure-models) @@ -23,6 +23,7 @@ This page walks through the full workflow: 8. [Create the job](#create-the-job) 9. [View job details after completion](#view-job-details) 10. [Edit rows after completion](#edit-rows-after-completion) +11. [Split the dataset](#split-the-dataset) --- @@ -32,28 +33,71 @@ This page walks through the full workflow: Navigate to **Data Designer** in the workspace sidebar to open the jobs list. The list shows every Data Designer job in the current workspace with its status, and supports searching by name, filtering by status, and narrowing by creation or update date range. -Selecting a job opens its [details page](#view-job-details). Each row also has a quick-actions menu with **Cancel** (when the job is still cancellable) and **Delete**. +Selecting a job opens its [details page](#view-job-details). Each row also has a quick-actions menu with **View details**, **Clone**, **Cancel** (when the job is still cancellable), and **Delete**. Job status values match the platform-wide [Jobs](/documentation/studio#jobs) statuses (Created, Pending, Active, Completed, Error, Cancelled, and so on). --- -## Create a new job + -Click **New Job** on the jobs list to open the **Create a fileset** start screen. Choose how you want to start: +## Start a new fileset -| Start option | What it does | -| ------------------------- | -------------------------------------------------------------------------------------------------- | -| **Build from scratch** | Opens the builder with an empty schema list. | -| **Start from a template** | Pick a prebuilt recipe card; the builder opens pre-seeded with that template's columns and models. | +Click **New Job** on the jobs list to open the **Create a fileset** start screen. Pick a start option; a detail area for that option opens below the tiles, and **Continue** at the bottom of the page takes you into the builder. -Selecting a template pre-fills the builder with its columns and models, so you can adjust an existing recipe rather than start blank. Building from scratch opens an empty builder. +| Start option | What it does | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| **Describe with AI** | Describe the dataset in plain language and have a model draft the columns, prompts, and model configs for you. | +| **Start from a template** | Pick a prebuilt recipe card; the builder opens pre-seeded with that template's columns and models. | +| **Build from scratch** | Opens the builder with an empty schema list. | -Either choice lands you in the **builder**. +**Continue** stays disabled until the chosen option has everything it needs — a selected recipe card for a template, a validated draft for AI — and the reason is shown next to the button. + +A fourth path skips this screen entirely: **Clone** on any existing job (from the jobs list or the job details page) opens the builder pre-filled with that job's name, row count, columns, and models. See [Clone an existing job](#clone-an-existing-job). + +### Describe with AI + +The **Describe with AI** panel has two halves: the prompt on the left, and the verdict on the draft on the right. + +- **Model** — the model that drafts the config. It must support tool calling, since the config comes back as a tool call. The same model is also written into every model config in the draft, so the LLM columns generate with a model that is known to exist in your workspace. +- **What do you want to generate?** — a plain-language description of the dataset (row count, columns, labels, sampling, and so on). +- **Generate** — sends the request. Once you have a draft, the button becomes **Regenerate**. + +Every draft is checked against the builder's own rules before it can be loaded, so a broken config never reaches the canvas. The result panel shows one of: + +- **Valid job config** — plus a summary of the fileset name, record count, and each generated column with its type. **Continue** is now enabled. +- **Errors** — the draft can't be loaded (for example, no columns the builder can edit, or an LLM column pointing at a `model_alias` no model defines). **Fix these errors** sends the draft and the error list back to the same model for a repair pass. +- **Warnings** — the draft is loadable but something was adjusted: a model was substituted, a column type the builder can't edit was skipped, or a non-positive record count was defaulted to 100. **Fix these warnings** runs the same repair pass. + +**View config** opens a side panel with the model's raw tool-call output, so you can inspect a draft before loading it — or work out why one was rejected. It shows exactly what the model returned, so it can differ from the config that lands on the canvas when a model had to be substituted. + +Once loaded, the generated config is fully editable in the builder like any other recipe — it is not opaque JSON. + +### Templates + +Selecting **Start from a template** shows the recipe cards. Each card carries a use-case tag that follows you into the builder toolbar. + +| Recipe | Tag | What it generates | +| -------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- | +| **Phishing email triage (evaluation set)** | Evaluation | Labeled synthetic emails for the email-phishing-analyzer benchmark; the label is sampled, not model-authored. | +| **Phishing analyzer fine-tuning (SFT)** | Fine-tuning | Prompt–completion pairs teaching a small model the phishing-analyzer task, with a validated JSON verdict as output. | +| **Instruction fine-tuning (SFT)** | Fine-tuning | Instruction–response pairs: a sampled topic, an LLM-generated instruction, and a model answer. | +| **All samplers (showcase)** | Showcase | One column per previewable sampler sub-type, seeded with valid params. | +| **Code generation + validation (Python)** | Fine-tuning | Python coding challenges with LLM-generated solutions and a pass/fail validation column. | +| **Structured data extraction** | Fine-tuning | Free-form text paired with its structured JSON representation. | +| **Preference pairs (reward modeling)** | Alignment | An instruction with chosen and rejected answers plus an LLM judge score, for DPO and reward modeling. | +| **Semantic search dataset** | Retrieval | Query–passage pairs with vector embeddings. Requires an embedding model under the `embedder` alias. | +| **Expression transforms (no LLM)** | Transform | Derived columns computed via Jinja2 expressions. No LLM calls, so it previews instantly. | + + + +### Clone an existing job + +Choose **Clone** from any job's quick-actions menu. The builder opens with the source job's columns, models, and row count already loaded, under the name `Clone of `. Edit anything you like and create it as a new job — the source job is untouched. --- - + ## The builder @@ -62,7 +106,9 @@ The builder is a three-pane layout with a toolbar across the top: - **Toolbar** (top) — fileset name, column count, template badge, view toggle, row count, and the **Preview** and **Create fileset** actions. - **Left palette** — a segmented **Columns** / **Models** switch for adding columns or models to the recipe. - **Center pane** — your columns, shown in whichever view mode is active (see [View modes](#view-modes) below). -- **Right config pane** — properties for whichever column or model is currently selected. +- **Right config pane** — properties for whichever column or model is currently selected. With nothing selected it prompts you to pick a column or model, or add one from the left. + + ### View modes @@ -70,18 +116,18 @@ A segmented control in the toolbar lets you switch between two views of your col | View | Icon | Description | | --- | --- | --- | -| **List** (default) | List-tree icon | A flat, top-to-bottom list of columns. Each row shows the column's type badge, name, a one-line summary, and inline `{{ reference }}` tags showing its dependencies. Click a row to select it; use the trash icon at the right to delete it. | +| **List** (default) | List-tree icon | A flat, top-to-bottom list of columns, ordered by generation order rather than the order you added them. Each row shows an icon badge, the column name, a type badge, a one-line summary, and inline `{{ reference }}` tags for its dependencies. Click a row to select it; use the trash icon at the right to delete it. | | **Canvas** | Spline icon | A directed acyclic graph (DAG) where columns appear as nodes and dependencies as arrows. Use this view to see the full dependency graph at a glance. | Both views open the same config pane when a column is selected. All edits made in one view are immediately reflected in the other. ### The toolbar -- **Name** — the fileset name. Click the pencil icon to rename it (defaults to `untitled-dataset`, or the template id when starting from a template). A name is required to create the job. +- **Name** — the fileset name. Click the pencil icon to rename it (defaults to `untitled-dataset`, the template id when starting from a template, or `Clone of …` when cloning). A name is required to create the job. - **Column count** — a live count of columns in the recipe. - **View toggle** — switches between the list and canvas views (see [View modes](#view-modes)). - **Rows** — the number of records the full run generates. Must be a whole number of at least 1. -- **Preview** — runs a small sample (up to 10 rows). See [Preview a job](#preview-a-job). +- **Preview N rows** — runs a small sample. `N` is your row count, capped at 10. See [Preview a job](#preview-a-job). While a preview runs, a **Stop** button appears next to it to abort the run. - **Create fileset** — validates the recipe and submits the job. See [Create the job](#create-the-job). ### How columns connect @@ -92,7 +138,7 @@ Column dependencies are tracked automatically. Whenever one column refers to ano ## Add columns -Open the **Columns** tab in the left palette and pick a column type. The catalog is grouped to mirror the [Data Designer column concepts](https://docs.nvidia.com/nemo/datadesigner/concepts/columns): +Open the **Columns** tab in the left palette and pick a column type. A search box filters the catalog across column names and descriptions. The catalog is grouped to mirror the [Data Designer column concepts](https://docs.nvidia.com/nemo/datadesigner/concepts/columns): | Group | Column types | | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -102,11 +148,11 @@ Open the **Columns** tab in the left palette and pick a column type. The catalog | **Validate** | Validation — check target columns against rules (code, local callable, or remote validator). | | **Data & custom** | Seed Dataset (bootstrap rows from a file), Custom (Python function logic). | -Adding a column appends it to the list (or drops a node on the canvas in canvas view), selects it, and opens its config pane immediately. A default, unique column name (for example `category_1`) is assigned; you can rename it in the config pane. +Adding a column appends it to the list (and centers the new node in canvas view), selects it, and opens its config pane immediately. A default, unique column name (for example `category_1`) is assigned; you can rename it in the config pane. -Only **one Seed Dataset** column is supported per recipe. After you add one, the Seed Dataset option is disabled in the palette. +Only **one Seed Dataset** column is supported per recipe. After you add one, the Seed Dataset card is disabled in the palette and explains why on hover. @@ -118,7 +164,7 @@ To remove a column, use the trash icon on its row in list view, or select its no ## Configure column properties -Select any column node to open its properties in the right config pane. Every column type has its own set of fields; the builder only shows the fields relevant to the selected type. +Select any column to open its properties in the right config pane. Every column type has its own set of fields; the builder only shows the fields relevant to the selected type. Common patterns: @@ -139,16 +185,20 @@ Empty required fields, invalid values, and duplicate or invalid names are all ca Generate columns (LLM-Text, LLM-Code, LLM-Structured, LLM-Judge, Image, Embedding) reference a model by **alias**. Switch the left palette to the **Models** tab to add and manage the models your recipe uses. - **Add a model** — pick a model from the workspace model groups and a provider; it's added with an editable alias. -- **Configure a model** — select it to edit its alias (which must be unique) and provider/model settings in the config pane. +- **Configure a model** — select it to open the model config pane, which has: + - **Alias** — how LLM columns refer to this model. Must be unique. Changing the model re-derives the alias from the new model name and updates every column that referenced the old alias. + - **Model** — the workspace model, along with its inference parameters. + - **Max parallel requests** — how many generation requests this model may have in flight at once. Lower it if your inference provider rate-limits the job. + - **Remove model** — deletes it from the recipe. - **Wire it up** — set a Generate column's **Model alias** field to the model's alias. -When you open a template, its seeded models are auto-filled from the workspace model list once that list finishes loading, so you usually don't need to reselect them. +When you open a template, its seeded models are auto-filled from the workspace model list once that list finishes loading, so you usually don't need to reselect them. Configs drafted by **Describe with AI** are pointed at the model you picked in that panel. --- ## Preview a job -Click **Preview 10 rows** in the toolbar to generate a small sample with the current recipe. This is a fast way to sanity-check prompts, sampler settings, and dependencies before committing to a full run. +Click **Preview N rows** in the toolbar to generate a small sample with the current recipe (`N` is your row count, capped at 10). This is a fast way to sanity-check prompts, sampler settings, and dependencies before committing to a full run. Use **Stop** to abort a preview that's still running. The details panel below the toolbar opens automatically and shows: @@ -171,15 +221,16 @@ On success, the job is created with your configured name, row count, and generat ## View job details after completion -The job details page shows the job name, status badge, description, and created/updated timestamps, plus a **View config** button (opens the generated Data Designer config) and a job actions menu (**Cancel**, **Delete**). +The job details page shows the job name, status badge, description, and created/updated timestamps, plus a **Split** action (see [Split the dataset](#split-the-dataset)) and a job actions menu with **View config** (opens the generated Data Designer config), **Clone**, **Cancel**, and **Delete**. -Details are organized into three tabs: +Details are organized into four tabs. The page opens on **Profile** for a job in a terminal state and on **Logs** for one that's still running. -| Tab | What it shows | -| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Profile** | A dataset profile once the job reaches a terminal state — completeness (rows generated vs. target) and per-column statistics cards. While the job is still running, or if no profile was generated, live job logs are streamed here instead. | -| **Data** | The generated data files, rendered as editable rows. See [Edit rows after completion](#edit-rows-after-completion). | -| **Output files** | The raw files in the job's output fileset, with preview and download. | +| Tab | What it shows | +| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Profile** | A dataset profile once the job reaches a terminal state — completeness (rows generated vs. target) and per-column statistics cards. Before then it points you at the Logs tab. | +| **Data** | The generated data files, rendered as editable rows. See [Edit rows after completion](#edit-rows-after-completion). | +| **Output files** | The raw files in the job's output fileset, with preview and download. | +| **Logs** | Live job logs, streamed while the job runs and available afterwards. | --- @@ -199,7 +250,7 @@ In the editor you can: How your edits are saved depends on the file format: - **Text formats** (`.json`, `.jsonl`, `.csv`) are updated in place. -- **Parquet** files can't be rewritten in the browser, so your edits are saved to a new `.edited.jsonl` file alongside the original, leaving the source `.parquet` untouched. +- **Parquet** files can't be rewritten in the browser, so your edits are saved to a new `.edited.jsonl` file alongside the original, leaving the source `.parquet` untouched. The tab then defaults to that edited file. @@ -209,6 +260,20 @@ Files larger than 8 MB (non-Parquet) can't be edited in the browser. Download th --- + + +## Split the dataset + +Once a job has produced `.json`, `.jsonl`, or `.parquet` output, the **Split** button on the details page opens the **Create Split** modal, which carves the generated data into the training, validation, and test subsets you need to fine-tune and evaluate a model. + +- **Source file** — which output file to split. +- **Split percentage** — 80/10/10 (recommended), 60/20/20, 80/20, 90/10, or a custom split. +- **Distribution type** — **Random** when row order doesn't affect model performance, or **Sequential** for tasks with sequence dependencies. Advanced options let you set a seed or a sort key. + +The splits are written back into the job's output fileset. + +--- + ## Related topics - [About NeMo Studio](/documentation/studio)