Skip to content
NVIDIA NeMo Data Designer

NVIDIA NeMo Data DesignerSkill

Released
5 views
Apache-2.0
Repository Docs

Summary

NVIDIA's official skill for building synthetic datasets with NeMo Data Designer — describe the data you want and the agent writes a declarative generation pipeline, column by column.

Features

  • Turns a plain-language dataset description into a declarative Data Designer pipeline
  • Interactive mode asks clarifying questions; Autopilot mode decides for you on request
  • Encodes the library's API pitfalls — sampler params, Jinja2 column references, judge score access
  • Dedicated references for person/demographic sampling and for seed datasets
  • Keeps all generated columns by default rather than silently pruning them
  • Reuses an existing dataset script when one matches, instead of writing a second one

Install This Skill

Add this skill to your favorite AI agent in a few steps.

Any AI agent

This skill is plain instructions — it works with any assistant that accepts custom instructions or system prompts.

  1. Copy the skill content with the button below.
  2. Paste it into your agent's instruction file or system prompt (for example AGENTS.md, .cursorrules, or a custom instructions field).
  3. Ask the agent to apply the skill whenever the task matches.

Skill Content

Markdown Content

Copy this content and use it with your preferred AI agent

---
name: data-designer
description: Use when the user wants to create a dataset, generate synthetic data, or build a data generation pipeline.
argument-hint: [describe the dataset you want to generate]
license: Apache-2.0
metadata:
  owner: DataDesigner
---

# Before You Start

Do not explore the workspace first. The workflow's Learn step gives you everything you need.

# Goal

Build a synthetic dataset using the Data Designer library that matches this description:

$ARGUMENTS

# Workflow

Use **Autopilot** mode if the user implies they don't want to answer questions — e.g., they say something like "be opinionated", "you decide", "make reasonable assumptions", "just build it", "surprise me", etc. Otherwise, use **Interactive** mode (default).

Read **only** the workflow file that matches the selected mode, then follow it:

- **Interactive** → read `workflows/interactive.md`
- **Autopilot** → read `workflows/autopilot.md`

# Rules

- Keep all columns in the output by default. The only exceptions for dropping a column are: (1) the user explicitly asks, or (2) it is a helper column that exists solely to derive other columns (e.g., a sampled person object used to extract name, city, etc.). When in doubt, keep the column.
- Do not suggest or ask about seed datasets. Only use one when the user explicitly provides seed data or asks to build from existing records. When using a seed, read `references/seed-datasets.md`.
- When the dataset requires person data (names, demographics, addresses), read `references/person-sampling.md`.
- If a dataset script that matches the dataset description already exists, ask the user whether to edit it or create a new one.

# Usage Tips and Common Pitfalls

- **Sampler and validation columns need both a type and params.** E.g., `sampler_type="category"` with `params=dd.CategorySamplerParams(...)`.
- **Jinja2 templates** in `prompt`, `system_prompt`, and `expr` fields: reference columns with `{{ column_name }}`, nested fields with `{{ column_name.field }}`.
- **`SamplerColumnConfig`:** Takes `params`, not `sampler_params`.
- **LLM judge score access:** `LLMJudgeColumnConfig` produces a nested dict where each score name maps to `{reasoning: str, score: int}`. To get the numeric score, use the `.score` attribute. For example, for a judge column named `quality` with a score named `correctness`, use `{{ quality.correctness.score }}`. Using `{{ quality.correctness }}` returns the full dict, not the numeric score.

# Troubleshooting

- **`data-designer` CLI not found:** Tell the user that `data-designer` is not installed in this environment (requires Python >= 3.10). Ask if they would like you to create a virtual environment and install it, or if they prefer to do it themselves. Do not install anything without the user's permission.
- **Network errors during preview:** A sandbox environment may be blocking outbound requests. Ask the user for permission to retry the command with the sandbox disabled. Only as a last resort, if retrying outside the sandbox also fails, tell the user to run the command themselves.

# Output Template

Write a Python file to the current directory with a `load_config_builder()` function returning a `DataDesignerConfigBuilder`. Name the file descriptively (e.g., `customer_reviews.py`). Use PEP 723 inline metadata for dependencies.

```python
# /// script
# dependencies = [
#   "data-designer", # always required
#   "pydantic", # only if this script imports from pydantic
#   # add additional dependencies here
# ]
# ///
import data_designer.config as dd
from pydantic import BaseModel, Field


# Use Pydantic models when the output needs to conform to a specific schema
class MyStructuredOutput(BaseModel):
    field_one: str = Field(description="...")
    field_two: int = Field(description="...")


# Use custom generators when built-in column types aren't enough
@dd.custom_column_generator(
    required_columns=["col_a"],
    side_effect_columns=["extra_col"],
)
def generator_function(row: dict) -> dict:
    # add custom logic here that depends on "col_a" and update row in place
    row["name_in_custom_column_config"] = "custom value"
    row["extra_col"] = "extra value"
    return row


def load_config_builder() -> dd.DataDesignerConfigBuilder:
    config_builder = dd.DataDesignerConfigBuilder()

    # Seed dataset (only if the user explicitly mentions a seed dataset path)
    # config_builder.with_seed_dataset(dd.LocalFileSeedSource(path="path/to/seed.parquet"))

    # config_builder.add_column(...)
    # config_builder.add_processor(...)

    return config_builder
```

Only include Pydantic models, custom generators, seed datasets, and extra dependencies when the task requires them.

Usage Instructions

Learn how to use this skill with different AI agents.

Generic Instructions

Install with npx skills add nvidia/skills --skill data-designer, or copy skills/data-designer from github.com/NVIDIA/skills into your agent's skills directory. Supported agents include Claude Code, Codex, Cursor and Kiro.

Example Usage

Generate a 5,000-row synthetic dataset of customer support tickets with product category, sentiment and a resolution note — be opinionated.

Description

Synthetic data is usually needed at exactly the moment you have least patience for it: an eval set that does not exist yet, a fine-tuning corpus with no licensable source, a demo that cannot use real customer records. NeMo Data Designer is NVIDIA's library for generating such datasets declaratively — you compose columns from samplers, LLM prompts, expressions and judges rather than writing a bespoke generation script — and this official skill teaches an agent to drive it.

How it works

You describe the dataset in plain language. The skill picks a mode and then follows a workflow file rather than improvising:

  • Interactive (the default) asks clarifying questions as it designs the schema.
  • Autopilot takes over when you signal you do not want to be asked — "be opinionated", "you decide", "just build it" — and makes the reasonable calls itself.

Either way it reads its workflow file first and explicitly does not go exploring your workspace beforehand, which is a small but sensible design choice: it keeps the agent from inferring a schema from whatever files happen to be lying around.

What it knows

The skill carries the library's sharp edges as explicit rules, which is most of its value. Sampler and validation columns need both a type and params (sampler_type="category" with CategorySamplerParams(...)). SamplerColumnConfig takes params, not sampler_params. Jinja2 templates in prompt, system_prompt and expr fields reference columns as {{ column_name }} and nested fields as {{ column_name.field }}. LLMJudgeColumnConfig produces a nested dict keyed by score name. Person data routes to a dedicated person-sampling reference; seed datasets are only used when you actually supply one, never suggested unprompted.

It also defaults to keeping every column in the output, dropping one only when you ask or when it exists purely to derive others — the right default for a dataset you are going to inspect before you trust.

Getting it

Part of NVIDIA's agent-skills catalogue: npx skills add nvidia/skills --skill data-designer, or copy the directory. Apache-2.0.

Covered in the Weekly

Related Skills

New

Google's official skill for the gws CLI — drive Gmail, Drive, Calendar, Sheets, Docs, Chat and Admin APIs from an agent, with Model Armor screening.

4 views 1 copies
New

Netlify's official skill for zero-config managed Postgres — querying from Functions, Drizzle setup, migrations and per-preview database branches.

3 views

Official WordPress skill for Gutenberg block work: block.json, attributes and serialization, dynamic rendering, and the deprecation path that keeps existing content valid.

2 views

Skill: claude-mem

by thedotmack

New

Persistent cross-session memory for coding agents: hooks capture each session, a local SQLite + vector store compresses it, and a mem-search skill reads it back.

1 views
Browse all skills →