Skip to content

Commit 6146b41

Browse files
Merge remote-tracking branch 'origin/main' into gh-pages
2 parents d9014a3 + b3ddd71 commit 6146b41

385 files changed

Lines changed: 25333 additions & 8568 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build-and-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
steps:
2424
- uses: actions/checkout@v6
2525
- name: Install uv
26-
uses: astral-sh/setup-uv@v5
26+
uses: astral-sh/setup-uv@v7
2727
- name: Set up Python
2828
uses: actions/setup-python@v6
2929
with:

.github/workflows/cron.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ jobs:
5353
- name: Fetch all history for all tags and branches
5454
run: git fetch --prune --unshallow
5555
- name: Install uv
56-
uses: astral-sh/setup-uv@v5
56+
uses: astral-sh/setup-uv@v7
5757
- name: Set up Python
5858
uses: actions/setup-python@v6
5959
with:

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
steps:
3838
- uses: actions/checkout@v6
3939
- name: Install uv
40-
uses: astral-sh/setup-uv@v5
40+
uses: astral-sh/setup-uv@v7
4141
- name: Set up Python
4242
uses: actions/setup-python@v6
4343
with:

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
steps:
1919
- uses: actions/checkout@v6
2020
- name: Install uv
21-
uses: astral-sh/setup-uv@v5
21+
uses: astral-sh/setup-uv@v7
2222
- name: Set up Python
2323
uses: actions/setup-python@v6
2424
with:

.github/workflows/publish_website.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,15 @@ jobs:
4747
run: |
4848
git config --global user.name "github-actions[bot]"
4949
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
50-
git merge origin/main
50+
git merge origin/main --no-edit
5151
# To avoid a large number of commits we don't push this sync commit to github until a new release.
52+
- if: ${{ github.event_name == 'pull_request' }}
53+
name: Merge PR head into release branch
54+
run: |
55+
git fetch origin "refs/pull/${{ github.event.pull_request.number }}/head:pr-head"
56+
git merge pr-head --no-edit
5257
- name: Install uv
53-
uses: astral-sh/setup-uv@v5
58+
uses: astral-sh/setup-uv@v7
5459
- name: Set up Python
5560
uses: actions/setup-python@v6
5661
with:

.github/workflows/reusable_test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
steps:
3434
- uses: actions/checkout@v6
3535
- name: Install uv
36-
uses: astral-sh/setup-uv@v5
36+
uses: astral-sh/setup-uv@v7
3737
- name: Set up Python ${{ matrix.python-version }}
3838
uses: actions/setup-python@v6
3939
with:

.github/workflows/reusable_tutorials.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
steps:
3030
- uses: actions/checkout@v6
3131
- name: Install uv
32-
uses: astral-sh/setup-uv@v5
32+
uses: astral-sh/setup-uv@v7
3333
- name: Set up Python
3434
uses: actions/setup-python@v6
3535
with:

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

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
<hr/>
44

5-
[![Support Ukraine](https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB)](https://opensource.fb.com/support-ukraine)
65
[![Build Status](https://img.shields.io/pypi/v/ax-platform.svg)](https://pypi.org/project/ax-platform/)
76
[![Build Status](https://img.shields.io/pypi/pyversions/ax-platform.svg)](https://pypi.org/project/ax-platform/)
87
[![Build Status](https://img.shields.io/pypi/wheel/ax-platform.svg)](https://pypi.org/project/ax-platform/)

ax/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
from ax.api.configs import ChoiceParameterConfig, RangeParameterConfig, StorageConfig
1111
from ax.api.types import TOutcome, TParameterization
1212

13+
try:
14+
from ax.version import version as __version__ # @manual
15+
except Exception: # pragma: no cover
16+
__version__: str = "Unknown"
17+
1318
__all__ = [
1419
"Client",
1520
"ChoiceParameterConfig",

0 commit comments

Comments
 (0)