Skip to content

0.4.0

Choose a tag to compare

@log0u7 log0u7 released this 24 Oct 08:13
· 268 commits to main since this release
v0.4.0
8558714

[0.4.0] - 2026-10-24

Added

  • Portable training: brainforge train check prefights hardware, model
    compatibility (architecture, chat template, pre-quantized and remote-code
    rejection, gated-model HF_TOKEN guidance) and a memory estimate without
    downloading model weights; --json and --strict modes for CI. Device
    auto-detection covers CUDA/ROCm, Intel XPU, Apple MPS and CPU; TPU/NPU
    fail fast with a --device cpu escape. training.device,
    training.quantization and training.backend (new auto defaults)
    resolve a per-run plan recorded in train_summary.json and eval.json.
    make train-check, make install-rocm and make install-xpu targets.
    Docs: new docs/reference/hardware.md; README, tutorial, training,
    configuration, CLI and architecture pages updated. CUDA/ROCm/XPU paths are
    implemented and unit-tested but not hardware-validated.
  • huggingface-hub>=0.26 is now a direct dependency (preflight model
    metadata checks; previously available only transitively).
  • Graceful failure: PipelineDef.fallback_examples (default false) turns a
    rejected case into an abstention training record (assistant target is a
    canonical insufficient_information verdict plus the gate reasons) instead
    of dropping it. Metadata carries fallback and fallback_reason; dataset
    validation accepts those records without a passing quality gate. The
    rejected-case audit trail is unchanged. ADR-0016.
  • train task-eval treats abstention as a third outcome class and reports
    abstain_rate and abstain_recall (of the records the judge could not
    resolve, how many the model refused too).
  • Critic escalation: PipelineDef.retry_with_critic (default null) names a
    critic role that runs, followed by a second judge pass, when the first pass
    is rejected. The critic never sees the first judge verdict. Records from a
    retry carry critic_retry and first_pass_reasons in metadata.

Changed

  • Training and evaluation no longer hard-require CUDA: the device plan
    resolves automatically and qlora degrades to plain LoRA where 4-bit is
    unavailable. train evaluate and train task-eval default to
    --quantization auto; train run accepts --device and
    --quantization overrides.
  • Rewrite the README for evaluators: dataset-first quickstart, verified
    mechanics, explicit limits, and intent-based docs routing. The docs hub and
    first-model tutorial use the same commands, vocabulary, and qualifiers.
  • AirLLM evaluated and not adopted (ADR-0017): layer streaming helps models
    that do not fit VRAM, but its custom training API is incompatible with the
    PEFT/TRL, KD, merge and GGUF contracts, and throughput rules out local
    dataset generation.
  • Provider failures are isolated per case: the case is recorded with a
    provider_error reason and the batch continues instead of aborting. Run
    summaries gain fallback and errors counters.
  • run_pipeline writes the dataset and the KD sidecar once, atomically, at
    the end of the run (temp file plus rename). A crash plus rerun can no
    longer duplicate lines, and a rerun after a config or prompt tweak no
    longer keeps stale records. The dataset file always exists after a run,
    empty when nothing is accepted.
  • New docs/reference/references.md maps each research paper and standard to
    what it informs (judge independence, contamination, QLoRA, KD, RAG,
    graceful failure). Stale links fixed: ADR-0008 pointed at the retired
    GitLab host, README advertised a make docs-serve target that does not
    exist.

Fixed

  • Force pillow>=13.0.0 to clear its known CVEs despite fastembed's <13
    cap, and bump certifi to 2026.10.19.
  • Bump filelock to 4.2.4 in the lock, clearing CVE-2026-112907,
    CVE-2026-112913 and CVE-2026-112940 (fixed upstream in 4.2.1).
  • Audit the uv lock with pip-audit --no-deps --disable-pip so pip's
    resolver cannot reject the Pillow override.