NVIDIA-NeMo / NVIDIA-NeMo/DataDesigner
Skill: auto-port custom columns to plugin packages
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.2k
- Forks
- 211
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 40
Description
Problem
Custom columns (@custom_column_generator) are convenient for local/notebook use but hit a hard wall when users need serialization - the generator function serializes to just its __name__, so configs can't round-trip through YAML/JSON. The recommended path is to rewrite as a plugin, but the transformation is mechanical and the boilerplate is easy to get wrong.
Proposal
Add a /port-to-plugin Claude Code skill (.agents/skills/) that takes a Python file containing one or more @custom_column_generator functions and scaffolds a complete, installable plugin package.
Transformation mapping
| Custom column | Plugin |
|---|---|
@custom_column_generator(required_columns=..., side_effect_columns=...) |
required_columns / side_effect_columns properties on config class |
generator_params: BaseModel fields |
Promoted to config class fields |
model_aliases decorator arg |
Config field + resource_provider.model_registry access in impl |
Function body with row param |
ColumnGeneratorCellByCell.generate() |
Function body with df param |
ColumnGeneratorFullColumn.generate() |
GenerationStrategy choice |
Base class selection |
Output structure
Given /port-to-plugin path/to/my_workflow.py:
data-designer-<name>-plugin/
src/<package_name>/
__init__.py
config.py # SingleColumnConfig subclass with Literal discriminator
impl.py # ColumnGenerator{CellByCell,FullColumn} subclass
plugin.py # Plugin() registration object
pyproject.toml # Entry point under data_designer.plugins
Scope
- Single custom column per invocation (v1), multi-column bundling as a follow-up
- Rewrites
modelsparameter access toself.resource_provider.model_registry - Flattens
generator_paramsinto config fields - Uses
docs/plugins/example.mdandtests_e2e/.../plugins/column_generator/as scaffolding templates
Why a skill and not a CLI command
The transformation requires understanding intent (naming the discriminator, choosing config field types, handling edge cases in function bodies). An LLM-backed skill can make judgment calls that a rigid code generator can't, while the plugin structure is constrained enough that the output is verifiable.
Acceptance criteria
- Skill file at
.agents/skills/port-to-plugin/ - Handles cell-by-cell and full-column strategies
- Handles
generator_paramsflattening - Handles
modelsparameter rewriting - Generated plugin installs and passes
data_designer.pluginsentry point discovery - Includes a test scaffold
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing docs/plugins/example.md and tests_e2e/.../plugins/column_generator/ as scaffolding templates, then inspect the .agents/skills/ structure. Define the /port-to-plugin skill for one custom column, covering both generation strategies, parameter flattening, and models rewriting. Done means the generated package installs, its data_designer.plugins entry point is discovered, and a test scaffold covers the transformation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100