When the data does not exist yet, generate it
Every other source in a data flow reads something that already exists. This one does not. Name the subject, the columns and how many rows you want, and a model writes the records, on your own infrastructure, so that "produce a dataset and train something smaller on it" is one path instead of two tools and a script in between.
It runs on your machines, never ours
Start here, because it is the constraint the rest of the feature is built around. Our own AI gateway, the one that serves the in-app assistant, can never be a generation source. Not "is not by default": cannot. It is a separate closed set of providers, separate keychain slots, separate settings and separate code, so it is enforced by the shape of the types rather than by a check somebody could remove.
What you can use is your own Ollama server, local or remote, with an optional bearer token, or your own vendor key. The records you generate, and the brief you generated them from, are between you and the machine you chose.
It is a workbench, not a button
Generating a dataset is not a fire-and-forget operation, because the first batch is usually wrong in some way you could not have predicted from the brief. So it has its own workspace: the brief sits beside the records, batches land in the grid as the model produces them, and you edit rows, cut the ones that are bad, and ask for more.
Nothing is committed until you commit it. What you are building is a working set, and it becomes a dataset when you say it does.
Seed it from what you already have
Generating from a model's own knowledge gets you generic records. Often what you want is records shaped like your material: your documents, your PDFs, your phrasing.
So generation can be seeded from your own files, and when it is, every record names the seed it was written from. That provenance travels with the row, which matters later when you are looking at a training set and asking where a particular example came from.
Everything downstream is unchanged
This is a source, and that is all it is. The transforms do not know or care that the rows were written rather than read, so filtering, deduplication and redaction work exactly as they do on a CSV. So do the destinations: land the result in a table, a collection, a file, or the validated JSONL a fine-tuning job expects.
What we are not claiming
Synthetic data is a field with a lot of confident marketing in it, so, plainly: this generates records from a brief using a model you supply. It does not verify that those records are true, it does not guarantee they are diverse, and it will happily produce a thousand rows of subtly repetitive nonsense if the brief is vague and you do not read them. The workbench exists precisely because you have to look.