Release History#

v1.0.0 (2026-07-16)#

Features#

  • Xopt backend: New optional blop.xopt.XoptOptimizer backend, installable via the blop[xopt] extra, implementing the Optimizer, Checkpointable, CanRegisterSuggestions, and TrialFaultAware protocols on top of Xopt (#318).

  • Scalarized objectives in `Agent`: Agent can now be configured with ScalarizedObjective for weighted multi-objective optimization (#284).

  • Best point(s) navigation: New blop.plan_stubs.navigate_to_best plan stub that moves actuators to the best point(s) found so far, backed by Optimizer.get_best_points() (#293).

  • Queueserver plan keyword arguments: QueueserverOptimizationProblem now accepts additional keyword arguments to pass through to the acquisition plan (#306).

  • More reliable queueserver runner: The queueserver runner now starts its listener automatically on initialization (#316), tracks its state with concurrent.futures.Future for more robust status reporting (#305), and QueueserverAgent now exposes additional runner properties (actuators, sensors, acquisition_plan, current_iteration) and a stop() method directly (#291).

Breaking Changes#

  • `QueueserverClient` now takes a `RemoteDispatcher`: Replaces the previous raw ZMQ address argument, giving users full control over how documents are dispatched from the queueserver (#308).

  • `QueueserverAgent` moved to its own module: QueueserverAgent now lives in blop.ax.queueserver_agent instead of blop.ax.agent. The queueserver optional extra was also renamed from qs to queueserver (#321).

Bug Fixes#

  • Made ChoiceDOF hashable, fixing a bug when reconfiguring or fixing ChoiceDOF parameters (#301).

  • Fixed stream filtering in the optimization logging callback (#302).

  • Fixed the queueserver runner calling stop_listener from the wrong thread, and used the correct run_start key on the stop document (#291).

  • Queueserver runner now prevents concurrent/parallel runs (#296).

  • Fixed the import path for ContourPlot (#281).

Dependency Changes#

  • Reworked and clarified the optional-dependency structure, adding an all extra and renaming the qs extra to queueserver (#321).

Documentation#

  • Queueserver integration marked experimental: Clearly documented across module docstrings, the tutorial, and the API reference that the queueserver integration is experimental and subject to change (#309).

  • New tutorial for running Blop optimization against a remote Bluesky Queueserver (#292).

  • Improvements to the XRT KB mirror tutorial (#311) and the simple experiment tutorial (#303), plus a general documentation maintenance pass (#294).

  • New explanation content describing which components of an optimization workflow (evaluation functions, acquisition plans) users are responsible for implementing (#323).

  • Website redesign, including a version-switcher dropdown in the docs header (#269, #277, #279, #287, #288).

  • Various consistency improvements to the documentation.

Full Changelog

v1.0.0b1 (2026-04-17)#

Features#

  • Manual suggestions: A new method for the Agent that allows manual optimization control (#235).

  • Reconfigurable search spaces: Search spaces can now be modified between optimization steps, allowing dynamic adjustment of DOF bounds and constraints (#268).

  • Model checkpoints: Save and restore optimizer state across sessions (#233).

  • Fixed parameters: Hold specific parameters constant during optimization via Agent.fixed_dofs (#252).

  • Multi-point routing: When suggesting multiple points, suggestions are now routed to minimize actuator travel (#217).

  • Failed and abandoned suggestions: Properly handle and track failed optimization trials (#272).

  • Optimization logging callback: New OptimizationCallbackRouter and logging callback for monitoring optimization progress (#270).

  • Optimization step tracking via event-model: Optimization metadata is now emitted as Bluesky event-model documents (#236).

  • Queueserver support: New QueueserverAgent for running optimization through the Bluesky queueserver (#212, #264, #266).

  • Actuator and Sensor types: Expanded protocol types to support flyable and collectable devices (#211).

  • Python 3.13 support (#206).

Breaking Changes#

  • Plans moved to top-level package: Plans are now imported from blop.plans instead of blop.ax.plans (#259).

  • Simulation code separated: The simulation module has been extracted into a separate blop_sim package (#248, #256).

  • Deprecated code removed: Legacy APIs deprecated in earlier releases have been removed (#218).

  • Deprecated bayesian.acquisition removed: Use BoTorch’s built-in constrained acquisition functions instead (#207).

Dependency Changes#

  • Requires Ax Platform >= 1.2.3 (#241).

  • Requires BoTorch >= 0.16.0 (#221).

Documentation#

  • New how-to guide for using Tiled as a databroker (#215).

  • New how-to guide for using ophyd and ophyd-async devices (#210).

  • New explanation document for the Ax integration (#227).

  • Updated tutorials for the simple experiment and XRT KB mirrors (#222, #223, #224).

Full Changelog

v0.9.0 (2025-12-08)#

What’s Changed#

Full Changelog

v0.8.1 (2025-11-06)#

What’s Changed#

Full Changelog

v0.8.0 (2025-10-13)#

What’s Changed#

New Contributors#

Full Changelog

v0.7.5 (2025-06-18)#

What’s Changed#

New Contributors#

Full Changelog

v0.7.4 (2025-03-04)#

  • Add missing files for documentation

  • Fix trigger condition for releases on PyPI and documentation

v0.7.3 (2025-03-04)#

What’s Changed#

New Contributors#

Full Changelog

v0.7.2 (2025-01-31)#

  • Renamed package in PyPI to blop.

  • bloptools is still avaliable on PyPI.

v0.7.1 (2024-09-26)#

  • Add simulated hardware.

  • Added a method to prune bad data.

v0.7.0 (2024-05-13)#

  • Added functionality for Pareto optimization.

  • Support for discrete degrees of freedom.

v0.6.0 (2024-02-01)#

  • More sophisticated targeting capabilities for different objectives.

  • More user-friendly agent controls.

v0.5.0 (2023-11-09)#

  • Added hypervolume acquisition and constraints.

  • Better specification of latent dimensions.

  • Implemented Monte Carlo acquisition functions.

  • Added classes for DOFs and objectives.

v0.4.0 (2023-08-11)#

  • Easier-to-use syntax when building the agent.

  • Modular and stateful agent design for better usability.

  • Added the ability to save/load both data and hyperparameters.

  • Added passive degrees of freedom.

  • Added a number of test functions / artificial landscapes for optimization.

  • Updated the Sphinx documentation theme to furo.

v0.3.0 (2023-06-17)#

  • Implemented multi-task optimization.

  • Simplified the syntax on initializing the agent.

  • Resolved issues discovered at NSLS-II ISS.

v0.2.0 (2023-04-25)#

  • Rebased the Bayesian optimization models to be compatible with botorch code.

  • Optimization objectives can be customized with experiment modules.

  • Added optimization test functions for quicker testing and development.

v0.1.0 (2023-03-10)#

  • Changed from using SafeConfigParser to ConfigParser.

  • Implemented the initial version of the GP optimizer.

  • Updated the repo structure based on the new cookiecutter.

  • Added tests to the CI.

v0.0.2 (2021-05-14)#

Fixed _run_flyers() for sirepo optimization.

v0.0.1 - Initial Release (2020-09-01)#

Initial release of the Beamline Optimization library.

Used in:

Planned: