Modality II (v0.52.0)

7 parts. New task families + BitNet + EBFT/GDPO + MoE quant. +237 tests (6968 → 7205).

TTS (task: tts)

5 family allowlists with per-family emotion vocabularies.

yaml
task: tts
modality: audio_out
base: canopylabs/orpheus-3b-0.1-ft
data:
  format: audio
  train: ./data/tts.jsonl
training:
  tts_family: orpheus   # orpheus | sesame_csm | llasa | spark | oute
  tts_emotions: [happy, sad, neutral]

Cross-validator gates per family. canopylabs/orpheus requires tts_family: orpheus.

Distillation (task: distill)

yaml
task: distill
base: meta-llama/Llama-3.2-3B
training:
  teacher_model: meta-llama/Llama-3.1-70B-Instruct
  distill_divergence: kl         # kl | forward_kl | reverse_kl | js
  distill_temperature: 2.0       # [0.05, 100]

Classifier / Reranker / Cross-Encoder

yaml
task: classifier   # | reranker | cross_encoder
training:
  num_labels: 5
  label_names: ["very_bad", "bad", "neutral", "good", "very_good"]

BitNet 1.58-bit quantization

yaml
training:
  quantization: bitnet_1.58

Gates: non-MLX, text modality, task ∈ {sft, pretrain, dpo}. is_bitnet_model heuristic auto-detects Microsoft / Falcon-E checkpoints.

EBFT + GDPO variants

yaml
training:
  ebft_variant: structured       # structured | strided
  gdpo_variant: length_normalized # standard | length_normalized | margin

MoE expert quant

yaml
training:
  moe_expert_quant: nf4          # nf4 | int8_rowwise
  train_router_only: true        # freeze experts, train router only

Reasoning effort dispatch

yaml
training:
  reasoning_effort: medium       # low | medium | high  (gpt-oss family)

All v0.52.0 features ship as schema-only; live trainer wiring lands in v0.52.1.