Data Augmentation
soup data augment expands a JSONL dataset with LLM-driven rewrites. Added in v0.25.0.
Usage
# Rephrase each example 3x
soup data augment \
--input data.jsonl \
--output augmented.jsonl \
--strategy rephrase \
--count 3
# Translate to other languages
soup data augment --input data.jsonl --strategy translate --lang ru,zh,es
# Rewrite in multiple styles
soup data augment --input data.jsonl --strategy style --styles formal,casual,technicalStrategies
| Strategy | Purpose |
|---|---|
rephrase | Preserve meaning, diversify wording |
translate | Add examples in other languages for multilingual fine-tuning |
style | Rewrite in formal / casual / technical / etc. tones |
Providers
Augmentation uses the judge providers: ollama, anthropic, vllm. Select with --provider.
soup data augment \
--input data.jsonl \
--strategy rephrase \
--count 2 \
--provider ollama \
--dedupFlags
| Flag | Meaning |
|---|---|
--input, -i | The source JSONL (required) |
--output, -o | Where to write; default augmented.jsonl |
--strategy, -s | rephrase (default) / translate / style |
--provider, -p | ollama (default), anthropic or vllm |
--count | Augmentation multiplier for rephrase (default 2, 1 to 10). translate and style ignore it and write one variant per language or style |
--lang | Target languages for translate, comma-separated: at most 10 entries of 32 characters each |
--styles | Style list for style, comma-separated: at most 10 entries of 32 characters each |
--model | Model id to ask the provider for |
--base-url | Provider endpoint for ollama or vllm. An Ollama server must be on localhost; a remote vLLM server must use HTTPS, and since v0.75.2 its host may not be a private, link-local or reserved IP address (name it by hostname). A host written only as numbers that is not a valid IPv4 address (10.0.0.256, 4294967296) is refused too (v0.76.0). anthropic needs ANTHROPIC_API_KEY instead |
--requests-per-minute | Client-side rate limit, 1 to 600 (default 60) |
--dedup | Deduplicate augmented + original data |
When the provider fails (v0.76.0)
A call that fails (a transport error, a non-200 status, a malformed reply) or returns an empty or whitespace-only reply never becomes a row: that variant is dropped, and a row is never written with an empty or unrewritten field. The summary reports N of M provider calls failed for --provider <name> (<endpoint>); first error: .... When no call produced a usable row the command prints No usable rows produced and exits 1 without writing an output file. A partial outage keeps the rows that succeeded and shows them under a yellow panel that reports the failure count.
Re-run this. Through v0.75.2
soup data augmentbuilt its provider so that a connection error, an HTTP 404, 429 or 500, or a malformed reply came back as empty text. Arephrase,translateorstylepass over a provider that was down or rate-limiting wrote rows whose rewritten field was""next to the originals, and the command exited 0. Open an augmented file made that way and look for empty fields.soup distill-prompthad the same defect from the other side: it dropped every failed row and wrote an empty file withRows: 0, also with exit 0.
Safety
- Input/output paths are resolved and constrained to the current working directory.
- Output format must match the input format, enforced after generation.
--countis capped at 10 to prevent accidental 1000× blow-ups.- Requests honor
--requests-per-minuteinherited fromsoup data generate.
Soup is free and Apache-2.0. If it saved you a training run, starring the repo costs nothing and helps most. You can also fund the GPU time behind the work a 4 GB laptop cannot reach.