Skip to content

V1.2.3 - Feb 19 2026

Choose a tag to compare

@mgarrard mgarrard released this 19 Feb 18:51
· 64 commits to main since this release

V1.2.3 -- Feb 19, 2026

⚠️ Breaking Changes

Requirements

  • Python 3.11+ required (#4810)
  • Pandas 3.0 upgrade (#4838)
  • BoTorch 0.17.0 (#4911)

Method Removals

  • transition_to now required on TransitionCriterion (#4848) — Users must explicitly specify transition targets
  • Removed callable serialization (#4806) — Encoding callables now raises an exception
  • Removed legacy classes: TData (#4771), MinimumTrialsInStatus (#4786), completion criteria (#4850), arms_per_node override (#4822)

🚀 New Features

Experiment Lifecycle Tracking

New ExperimentStatus enum (DRAFT, INITIALIZATION, OPTIMIZATION, COMPLETED) with automatic status updates from the Scheduler based on generation strategy phase. (#4737, #4738, #4891)

BOPE (Preference Learning)

  • Utility-based traces via PairwiseGP preference models (#4792)
  • UtilityProgressionAnalysis support with "User Preference Score" UI (#4793)

BONSAI (Pruning)

  • New pruning_target_parameterization API parameter (#4775)
  • Tutorial and documentation added (#4865, #4871)

New methods

  • add_tracking_metrics() method (#4858)
  • TorchAdapter.botorch_model convenience property (#4827)
  • DerivedParameter now supports bool and str types (#4847)
  • LLM integration: LLMProvider/LLMMessage abstractions and llm_messages on Experiment (#4826, #4904)

Visualization

  • Improved slice/contour plots: uses status_quo → best trial → center hierarchy (#4841)
  • Sensitivity analysis excludes 'step' by default (#4777)
  • ScalarizedOutcomeConstraint support in feasibility analysis (#4856)

⚡ Performance

  • Data handling: DataRow-backed Data class with itertuples — 3.6x faster tensor creation (#4773, #4774, #4798)
  • Generation strategy caching: Significant speedup in high trial count regimes (#4830)
  • Optimization complete logic: O(nodes × TC) → O(TC on current node) (#4828)

🐛 Bug Fixes

  • Fix GeneratorRun.clone() not copying metadata (mutations affected original) (#4892)
  • Fix OneHot transform not updating hierarchical parameter dependents (#4825)
  • Fix Float parameters loaded as ints from SQA (#4853)
  • Fix scikit-learn 1.8.0 compatibility with XGBoost (#4816)
  • Trials now marked ABANDONED (not FAILED) on metric fetch failure (#4779)
  • Baseline improvement healthcheck now shows WARNING instead of FAIL (#4883)

🧹 Modernization

Codebase updated to Python 3.11+ idioms:

  • typing.Self instead of typing_extensions.Self (#4867)
  • StrEnum instead of (str, Enum) (#4868)
  • ExceptionGroup (PEP 654) for structured errors (#4877)
  • asyncio.TaskGroup for structured concurrency (#4878)
  • PEP 604 type annotations (X | None) (#4912)

Full Changelog

For the complete list of 90+ PRs, see the GitHub releases page.