Data Mixing Optimizer & Dynamic Curriculum (v0.48.0 — BETA)

soup data mix --optimize

Bayesian search over per-dataset mixture weights against a held-out objective.

bash
soup data mix --optimize \
  --datasets sft.jsonl,preference.jsonl,instruct.jsonl \
  --output mix.yaml

soup data mix --apply mix.yaml --output ./mixed.jsonl

BudgetTracker caps wall-clock and token budget per search.

Since v0.73.3 the emitted recipe loads. It names the single highest-weighted dataset in data.train and keeps the full ranked breakdown as a comment, because the field is typed as one string and the mixture is not yet consumed by training.

Dynamic curriculum learning

yaml
training:
  curriculum: true
  curriculum_dynamic: true
  curriculum_buckets: 5
  curriculum_metric: loss      # length | perplexity | loss

DynamicCurriculumPolicy re-weights buckets every N steps based on history.jsonl. compute_bucket_weights clamps to a stable simplex.

bash
soup runs curriculum-curve --history ./runs/$LAST/history.jsonl

Renders the per-bucket weight curve over training.

Both features are BETA in v0.48.0. Symlink containment hardening lands across all file paths.

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.