Releases: facebook/Ax
Ax 1.2.4
Bug Fixes
- Fix incorrect feasibility computation when using
qLogProbabilityOfFeasibilityfor MOO — objective weights were applied twice via both the posterior transform and the constraint matrix, leading to incorrect results when only objective thresholds (no outcome constraints) were present (#4935) - Add defensive
issubclassguard for acquisition function dispatch to prevent silent fallthrough for future subclasses ofqLogProbabilityOfFeasibility(#4938) - Require only opt_config metrics for
prepare_arm_datato fixArmEffectsPlotfailures when tracking metrics are missing (#4957)
Other changes
- Bumped pinned botorch version to 0.17.2 (#4959). This picks up the following changes from botorch 0.17.2:
- Support
post_processing_funcinoptimize_with_nsgaiifor post-processing optimization results, e.g., to round discrete dimensions to valid values
- Support
- Remove unused
objective_thresholdsparameter fromAcquisition.get_botorch_objective_and_transform— the parameter was silently discarded (#4939) - Add
Selftype annotations to clone methods for better type inference in subclasses (#4907) - Heterogeneous search space utilities for transfer learning benchmarks (#4767)
- Migrate benchmarking state dict files for GPyTorch compatibility (#4916)
- Move
merge_multiple_curvesto Advanced tier in complexity classification (#4949) - Move
infer_reference_point_from_experimentandget_tensor_converter_adaptertoax/service/utils/best_point.py(#4940) - Replace disclosure triangle with info icon in Bento notebooks for analysis cards (#4956)
V1.2.3 - Feb 19 2026
V1.2.3 -- Feb 19, 2026
⚠️ Breaking Changes
Requirements
Method Removals
transition_tonow required onTransitionCriterion(#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_nodeoverride (#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)
UtilityProgressionAnalysissupport with "User Preference Score" UI (#4793)
BONSAI (Pruning)
- New
pruning_target_parameterizationAPI parameter (#4775) - Tutorial and documentation added (#4865, #4871)
New methods
add_tracking_metrics()method (#4858)TorchAdapter.botorch_modelconvenience property (#4827)DerivedParameternow supportsboolandstrtypes (#4847)- LLM integration:
LLMProvider/LLMMessageabstractions andllm_messageson Experiment (#4826, #4904)
Visualization
- Improved slice/contour plots: uses status_quo → best trial → center hierarchy (#4841)
- Sensitivity analysis excludes 'step' by default (#4777)
ScalarizedOutcomeConstraintsupport in feasibility analysis (#4856)
⚡ Performance
- Data handling:
DataRow-backedDataclass 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.Selfinstead oftyping_extensions.Self(#4867)StrEnuminstead of(str, Enum)(#4868)ExceptionGroup(PEP 654) for structured errors (#4877)asyncio.TaskGroupfor structured concurrency (#4878)- PEP 604 type annotations (
X | None) (#4912)
Full Changelog
For the complete list of 90+ PRs, see the GitHub releases page.
Ax 1.2.2
NOTE: this will be the last Ax release before SQLAlchemy becomes a required dependency
Deprecations
- Add deprecation warning to AxClient (#4749)
- Add deprecation warning to 'optimize' loop API (#4697)
- Deprecate Trial.runner (#4460)
- Deprecate TensorboardMetric's
percentilein favor ofquantile(#4676) - Deprecate default_data_type argument to Experiment (#4698)
New Features
- Efficient leave-one-out cross-validation for Gaussian processes (#4631)
- Add patience parameter to PercentileEarlyStoppingStrategy (#4595)
- Log-scale support for ChoiceParameter (#4591)
- Support ChoiceParameter in Log transform (#4592)
- Add robust trial status polling to Orchestrator (#4756)
- Expose validation for TL experiments and fetching of candidate TL sources through AxService (#4615)
- Add PreferenceOptimizationConfig with storage layer support (#4638)
- Add PLBO transform and metric ordering validation (#4633)
- Add expect_relativized_outcomes flag to PreferenceOptimizationConfig (#4632)
- Add kendall tau rank correlation diagnostic (#4617)
- Vectorize SearchSpace membership check for performance (#4762)
Analyses
- New UtilityProgression Analysis for tracking optimization progress over time (#4535)
- New Best Trials Analysis for identifying top-performing trials (#4545)
- New Early Stopping Healthcheck analysis (#4569)
- New Predictable Metrics Healthcheck analysis (#4598)
- New Baseline Improvement Healthcheck analysis (#4673)
- New Complexity Rating Healthcheck for assessing optimization difficulty (#4556)
- Analysis to visualize experiment generation strategy (#4759)
- Add Pareto frontier display on MOO objective scatter plots (#4708)
- Add Progression Plots for MapMetric experiments to ResultsAnalysis (#4705)
- Add SEM display option to ContourPlot (#4690)
- Add markers to ProgressionPlot line charts (#4693)
- GraphvizAnalysisCard and HierarchicalSearchSpaceGraph visualization (#4616)
- IndividualConstraintsFeasibilityAnalysis replaces ConstraintsFeasibilityAnalysis (#4527)
Bug Fixes
- Fix tied trial bug in PercentileESS: Use rank() for n_best_trial protection (#4587)
- Fix StandardizeY not updating weights in ScalarizedObjective (#4619)
- Fix StratifiedStandardizeY behavior with ScalarizedObjective & ScalarizedOutcomeConstraint (#4621)
- Fix floating point precision issue in step_size validation (#4604)
- Fix progression normalization logic in early-stopping strategies (#4525)
- Fix dependent parameter handling in Log transform (#4679)
- Drop NaN values in MAP_KEY column before align_partial_results (#4634)
- Filter failed trials from plots (#4725)
- Allow single progression early stopping checks when patience > 0 (#4635)
- Update SOBOL transition criterion to exclude ABANDONED and FAILED trials (#4776)
Other
- Speed up MapDataReplayMetric (#4654)
- Fast MapData.df implementation (#4487)
- Validate patience <= min_progression in PercentileEarlyStoppingStrategy (#4639)
- Enforce
smoothingin[0, 1)for TensorBoardMetric (#4661) - Enforce sort_values=True for numeric ordered ChoiceParameter (#4597)
- Add error if PowerTransformY is used with ScalarizedObjective (#4622)
- Support ScalarizedObjective in get_best_parameters with model predictions (#4594)
- Rename model_kwargs -> generator_kwargs (#4668)
- Rename model_gen_kwargs -> generator_gen_kwargs (#4667)
- Rename model_cv_kwargs -> cv_kwargs (#4669)
Ax 1.2.1
Ax 1.2.0
New features
DerivedParameterConfigallows users to specify parameters which are not tuned,
instead taking the value of some expression of other tunable parameters (#4454)- New argument
simplify_parameter_changesinclient.configure_generation_strategy
(defaulted toFalse) which whenTrueinforms Ax to change as few parameters as
possible relative to the status quo without degrading optimization performance. Has
a near-zero effect on generation time (#4409) - Default to
qLogNParEgoacquisition function for multi-objective optimization in
multi-objective optimization when the number of objectives is > 4, leading to
improved walltime performance (#4347)
Bug fixes
- Fix issue during candidate generation involving
MapMetricsproviding progressions
at different scales i.e. one progression goes up to 10^9 and the other goes up to
10^6 by normalizing to [0, 1] (#4458)
Other changes
- Improve visual clarity in
ArmEffectsPlotby removing certain elements including
red "infeasibility" halos and optional cumulative best line (#4397, #4398) - Instructions on citing Ax included in README.md and ax.dev (#4317, #4357)
- New "Using external methods for candidate generation in Ax" tutorial on website (#4298)
Ax 1.1.2
Ax 1.1.1
Bug fixes
- Correctly filter out observations from Abandoned trials/arms during candidate
generation (#4155) - Handle scalarized objectives in ResultsAnalysis (#4193)
- Fix bug in polytope sampler when generating more than one candidate in a batch (#4244)
Other changes
- Transition from setup.py to pyproject.toml for builds, modernizing Ax's build
configuration and bringing it in compliance with PEP 518 and PEP 621 (#4100) - Add py.typed file, which allows typecheckers like Pyre, mypy, etc. to see Ax's types
and avoid a TypeStub error when importing Ax (#4139) - Improve legibility of ArmEffectPlot by modifying legend and x-axis labels (#4220,
#4243) - Address logspew in OneHotEncoder transform (#4232)
Ax 1.1.0
New Features
- New option for the
methodparameter inclient.configure_generation_strategy:
quality-- allows uers to indicate they would like Ax to generate the highest
quality candidates it is able to at the expense of slower runtime (#4042) - New logic for deciding which analyses to produce by default in
client.compute_analyses(#4013) - New parameters in
client.summarizeallow users to filter their summary by trial
index and/or trial status (#4012, #4118)
Bug Fixes
- Allow
client.summarizeto be called without aGenerationStrategybeing set
(i.e. beforeclient.configure_generation_strategyorclient.get_next_trails
has been called.) (#3801) - Fixed incorrect grouping in
TopSurfacesAnalysis(#4095) - Fixed
ContourPlotfailing to compute in certain search spaces with parameter
constraints (#4124) - Misc. plotting fixes and improvements
Other changes
Ax 1.0.0
We released Ax in 2019 along with Botorch, and both libraries have evolved significantly since their initial release. Today, we are excited to release Ax version 1.0.0.
Along with typical new features, improvements, and bug fixes this release introduces a new public API (found in ax.api) which allows users to access all fully supported Ax features via a singular entry point. Classes and functions from Ax entry points (“Loop API, “Service API”, and “Developer API”) remain present in the library, but are considered deprecated and may be changed backwards incompatibly (or removed) in subsequent major or minor releases of Ax.
This release also comes with a full rewrite of our documentation which can be found at ax.dev
Highlights
- New unified API can be found in
ax.apimodule. The classes and functions here constitute the Ax public API- The
Clientclass manages state throughout the optimization process - Various
Configclasses allow the user to configure their search space, the optimization’s goals, etc.
- The
- Complete documentation overhaul
- An entirely rewritten https://ax.dev/ introduces users to important concepts, demonstrates usage on synthetic and real-world optimization problems, and thoroughly documents the API
Breaking changes
Now that we have defined a singular Ax API, users should make efforts to use this as an entry point into the library. This will give users assurance that the method signatures they use will remain stable between major versions of Ax, and allow our team to provide better support via Github Issues.
This will be straightforward for those previously using the “Service API”, which closely resembles the current API – users of the “Loop API” should look towards the Quickstart Guide (https://ax.dev/docs/next/tutorials/quickstart/) for an example which demonstrates using the new API for the simple optimizations the Loop API previously served, and “Developer API” users should also use the full documentation to understand how the new API can serve their needs.
Maintenance Release, New Website, Improved Performance in Mixed Search Spaces
Compatibility
- Require BoTorch 0.13.0
Highlights
- AX website has been upgraded to utilize Docusaurus v3, with the API reference being hosted by ReadTheDocs. The tutorials now expose an option to open with Colab, for easy access to a runtime with modifiable tutorials. The old versions of the website can be found at archive.ax.dev.
- Updated the default transforms and optimizers used in MBM-based models, to offer improved optimization performance in mixed discrete search spaces.
- Implemented a preview version of Ax 1.0 API (ax/preview). The new API is available for use & testing, but remains subject to change until the 1.0 release.
- Introduced new Analysis cards (ax/analysis) for analyzing experiment progress, results and model quality; which will replace various plotting and reporting utilities with a unified API.
- Deprecated a number of legacy models, including GPEI, in favor of the modular BoTorch model (MBM) API.
- Refactored Ax benchmark APIs to simplify problem setup and to support additional use cases such as noisy & asynchronous benchmarking.
- Added EBAshr model, which is used for repeating arms in online experiments as well as regression analysis in the health checks (#3276).
- New advanced capabilities:
- MBM now supports per-metric model specification and model selection.
- Support for new transition criteria and input constructors in GenerationNodes.