Skip to content

Commit b3ddd71

Browse files
saitcakmakmeta-codesync[bot]
authored andcommitted
1.3.0 Relase Notes (#5220)
Summary: Pull Request resolved: #5220 A summary of high level changes since the last release. Reviewed By: dme65 Differential Revision: D107527413 fbshipit-source-id: 3cdc6b1510b45a93956a55ad6d964ee7e9a71cdf
1 parent d0ae700 commit b3ddd71

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,83 @@
11
# Changelog
22

33
The release log for Ax.
4+
5+
## [1.3.0] -- Jun 4, 2026
6+
7+
### Compatibility
8+
9+
* Require BoTorch==0.18.0 (#5216)
10+
* Requires PyTorch>=2.4.0
11+
* Utilizes NumPyro for faster fully-Bayesian model fitting, requiring JAX as a dependency
12+
13+
### API Changes (`ax/api`)
14+
15+
* `Client.attach_data` (and therefore `Client.complete_trial`) now auto-registers metrics in `raw_data` that are not part of
16+
the optimization config as tracking metrics, matching the documented contract. Previously this raised `UserInputError` (#5135)
17+
* `Client.configure_optimization` / objective and outcome-constraint strings now support linear equality constraints (`w^T x == b`) (#5174)
18+
19+
**Docs**
20+
* New example starting an Ax experiment from dataframe data (#5098)
21+
22+
### Core (`ax/core`)
23+
24+
* `Objective` and `OutcomeConstraint` are now expression-based and no longer hold `Metric` instances;
25+
metrics live only on the `Experiment`. Construct them with an expression string, e.g.
26+
`Objective(expression="ne1 + 2*ne2")` or `OutcomeConstraint(expression="qps >= 7000")`
27+
(single, scalarized, and multi-objective are all expressed this way). Old-style constructors still
28+
work but discard the `Metric` after init. `Objective.metric` is removed -- get a metric's name from
29+
the expression and look it up via `Experiment.get_metric(name)`. This is a step toward deprecating
30+
`ScalarizedObjective`, `MultiObjective`, `ScalarizedOutcomeConstraint`, and `ObjectiveThreshold` (#5000, #5122, #5045, #5041)
31+
Note: We are aware of some edge-case bugs in this setup and we may be iterating on this in future releases.
32+
* `ParameterConstraint` gains a new `equality=` kwarg for linear equality constraints (`w^T x == b`); equality constraints are honored in `SearchSpace` membership checks (#5173, #5175)
33+
* Make all `mark_*` methods on `BaseTrial` no-op when the status is unchanged, and avoid rewriting timestamps when the status is unchanged (#5097, #5074)
34+
* Runner lifecycle for search space editing: new `Runner.update` and `Runner.on_search_space_update` methods, a typed `RunnerConfig` infrastructure, and an `UNSET` sentinel (#5131, #5132, #5133, #5130)
35+
* Support for Language-in-the-Loop labeling trials, with data-freshness hashing/stamping and stale-data handling (#4986, #4992, #5144)
36+
* `AddExecutionViability` transform (lives in adapter; relies on core trial/metric plumbing) (#4547)
37+
38+
### Generation (`ax/generators`, `ax/adapter`, `ax/generation_strategy`)
39+
40+
* Replace Pyro with NumPyro (JAX-backed) for fully Bayesian NUTS inference -- roughly 25x faster fit on CPU with equivalent model quality (#5087)
41+
* Threaded equality constraints from `ParameterConstraint` all the way down to BoTorch (#5176, #5177, #5179, #5178, #5182)
42+
* Open-sourced the Transfer Learning stack: `TransferLearningAdapter` (registered as `Generators.BOTL`) (#5052, #5048, #5096, #5047)
43+
* Heterogeneous TL now defaults to `MultiTaskGP` + `LearnedFeatureImputation` (`ImputedMultiTaskGP`) (#5106, #5183, #5193, #5192)
44+
* Dispatch `qEUBO` for preferential BO (#5093) and support `PairwiseGP` in `ModelList` pipelines (#5092)
45+
* `GenerationStrategy.fit(experiment, data)` public method encapsulating the transition-then-fit pattern (#4922)
46+
* New `InSampleUniformGenerator` for model-free in-sample candidate selection (#4987)
47+
* `FreshLILOLabelCheck` transition criterion and hash-based filtering of stale LILO data in the adapter (#4994, #4993)
48+
* Expand the model space for numeric ordered `ChoiceParameter`s (#5210)
49+
50+
**Breaking**
51+
* Removed the deprecated `steps=` kwarg from `GenerationStrategy.__init__` (use `nodes=`) (#5142)
52+
* Removed the deprecated `use_update` argument to `GenerationStep` (#5187)
53+
* Removed the deprecated `generated_points` argument to `RandomGenerator` (#5186)
54+
* Re-index `TorchOptConfig.objective_thresholds` from `(n_outcomes,)` to `(n_objectives,)` (#5018)
55+
56+
### Analysis (`ax/analysis`, `ax/plot`)
57+
58+
* New `TransferLearningAnalysis` with paste/diff comparison links (#4918, #4980)
59+
* New `UtilityRankingPlot` for preference metrics; preference metrics handled across the analysis layer (#5166, #5165)
60+
* New `NotApplicableStateAnalysisCard` (#5035, #5036, #5051, #5163)
61+
* `SensitivityAnalysisPlot` aesthetic improvements; use total-order sensitivity for high-dimensional experiments (#5015, #5115)
62+
63+
### Storage (`ax/storage`)**
64+
65+
* Add `step_size` to `SQAParameter` class, and as a column to the `parameter_v2` table in the DB (#5212). This will be leveraged in the next version.
66+
* SQLAlchemy 2.0 migration: migrate SQA declarative classes to SA 2.0 `Mapped[T]`, make the SQA store SA 2.0-compatible (#5205, #5201, #5169, #5203, #5206)
67+
* Support equality constraints in JSON and SQA storage (#5181)
68+
69+
### Legacy API (`ax/service`)**
70+
Note: These are deprecated and may be removed in a future release.
71+
* `optimize()` is rewritten as a thin wrapper over `ax.api.client.Client`; the `OptimizationLoop` class is removed. The `optimize()` signature and return type are preserved (#5143)
72+
* Removed `AxClient.get_optimization_trace` -- superseded by `UtilityProgressionAnalysis` (#5168)
73+
* Search space editing on `AxClient`: new `add_parameters`, `update_parameters`, and `disable_parameters` methods to mutate the search space after trials have started; parameter constraints can be added alongside new parameters (#4945, #5023)
74+
75+
### Orchestration (`ax/orchestration`)**
76+
77+
* Removed `Scheduler`, `SchedulerOptions`, and `SchedulerInternalError` -- deprecated since Ax 1.0.0; use the `Orchestrator` instead (#5188)
78+
79+
80+
481
## [1.2.4] -- Mar 4, 2026
582

683
#### Bug Fixes

0 commit comments

Comments
 (0)