Release History#
v1.1.0 (2026-08-26)#
Features#
SciPy backend: The new
blop.scipynamespace provides Bluesky-compatible wrappers for SciPy’s local minimization, SHGO, and dual annealing routines (#339).Global stopping criteria: The new
SupportsStoppingCriteriaprotocol allows an optimizer to stop an optimization run early.AgentandAxOptimizernow accept an Ax global stopping strategy directly (#337, #338, #341).Queueserver checkpointing:
QueueserverAgent.run()andQueueserverOptimizationRunner.run()now acceptcheckpoint_interval. The checkpoint path can also be set on an existingAgentorAxOptimizer(#327, #328).Flexible string actuators: Ax DOFs backed by a queueserver device string can now specify a separate
name, supporting components whose queueserver path and device name differ (#346).Generalized XRT simulations:
blop-simcan now construct arbitrary XRT beamlines from XML descriptions and infer Bluesky-compatible motors and detectors (#317).
Compatibility Notes#
Optimization event identifier renamed: The
bluesky_uidfield in optimization event documents is nowacquisition_uid. Acquisition plans may return any hashable identifier, rather than only a Bluesky run UID (#350).Protocol signatures generalized: Core protocol methods now use
SequenceandMappinginstead of concretelistanddicttypes, and evaluation functions receive aHashableacquisition identifier. Runtime behavior remains compatible, but custom protocol implementations may need their annotations updated to satisfy static type checkers (#350).
Bug Fixes#
Evaluation failures are now registered with fault-aware optimizers before the original exception is re-raised, preventing failed suggestions from remaining pending (#355).
Suggestion routing now guarantees that every suggested point is visited exactly once, fixing edge cases that produced cycles and duplicate visits (#356).
Queueserver submission now uses the manager’s native autostart API and relies on its allowed-device and allowed-plan validation, allowing remote errors to propagate correctly (#326, #344).
Documentation and Development#
v1.0.0 (2026-07-16)#
Features#
Xopt backend: New optional
blop.xopt.XoptOptimizerbackend, installable via theblop[xopt]extra, implementing theOptimizer,Checkpointable,CanRegisterSuggestions, andTrialFaultAwareprotocols on top of Xopt (#318).Scalarized objectives in `Agent`:
Agentcan now be configured withScalarizedObjectivefor weighted multi-objective optimization (#284).Best point(s) navigation: New
blop.plan_stubs.navigate_to_bestplan stub that moves actuators to the best point(s) found so far, backed byOptimizer.get_best_points()(#293).Queueserver plan keyword arguments:
QueueserverOptimizationProblemnow 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.Futurefor more robust status reporting (#305), andQueueserverAgentnow exposes additional runner properties (actuators,sensors,acquisition_plan,current_iteration) and astop()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:
QueueserverAgentnow lives inblop.ax.queueserver_agentinstead ofblop.ax.agent. Thequeueserveroptional extra was also renamed fromqstoqueueserver(#321).
Bug Fixes#
Made
ChoiceDOFhashable, fixing a bug when reconfiguring or fixingChoiceDOFparameters (#301).Fixed stream filtering in the optimization logging callback (#302).
Fixed the queueserver runner calling
stop_listenerfrom the wrong thread, and used the correctrun_startkey 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
allextra and renaming theqsextra toqueueserver(#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.
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
OptimizationCallbackRouterand 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
QueueserverAgentfor 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.plansinstead ofblop.ax.plans(#259).Simulation code separated: The simulation module has been extracted into a separate
blop_simpackage (#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#
Documentation#
v0.9.0 (2025-12-08)#
What’s Changed#
Protocols for optimization with Bluesky by @thopkins32 in NSLS-II/blop#185
Evaluation functions by @thopkins32 in NSLS-II/blop#186
Standard plans for optimization that work with protocols by @thopkins32 in NSLS-II/blop#187
Refactor Ax agent to use new protocols by @thopkins32 in NSLS-II/blop#188
Remove default evaluation options by @thopkins32 in NSLS-II/blop#189
Direct AxOptimizer protocol impelementation by @thopkins32 in NSLS-II/blop#191
Remove unused Ax helpers by @thopkins32 in NSLS-II/blop#193
Simplified DOF classes for Ax backend by @thopkins32 in NSLS-II/blop#195
Simpler Objective class, ScalarizedObjective, and OutcomeConstraints by @thopkins32 in NSLS-II/blop#196
Protocol explanation by @thopkins32 in NSLS-II/blop#192
New DOFConstraint class and Agent update by @thopkins32 in NSLS-II/blop#198
Agent composition over inheritance by @thopkins32 in NSLS-II/blop#199
Add how-to-guide for outcome constraints by @thopkins32 in NSLS-II/blop#200
Extensive updates to reference docs by @thopkins32 in NSLS-II/blop#201
Change furo theme -> pydata-sphinx-theme by @thopkins32 in NSLS-II/blop#202
Update docstrings with much more detail by @thopkins32 in NSLS-II/blop#203
v0.8.1 (2025-11-06)#
What’s Changed#
Pin networkx and tabulate (required by python-tsp) by @thopkins32 in NSLS-II/blop#171
Update blop conda-forge badge by @thopkins32 in NSLS-II/blop#172
Baseline measurements by @thopkins32 in NSLS-II/blop#173
Implement suggest & ingest from gest-api by @thopkins32 in NSLS-II/blop#174
Move tests to tests/integration by @thopkins32 in NSLS-II/blop#176
Improve Bluesky plans by @thopkins32 in NSLS-II/blop#177
Include ellipses in doctest by @thopkins32 in NSLS-II/blop#179
Parameter constraints by @thopkins32 in NSLS-II/blop#181
v0.8.0 (2025-10-13)#
What’s Changed#
DOC: add citation information to README by @mrakitin in NSLS-II/blop#119
Ax Adapters for Blop and Minimal Agent Interface by @thopkins32 in NSLS-II/blop#126
Adding Pixi by @jessica-moylan in NSLS-II/blop#135
Ax custom generation strategies by @thopkins32 in NSLS-II/blop#136
Ax Analyses by @thopkins32 in NSLS-II/blop#138
Adding tiled comptability using dictionaries by @jessica-moylan in NSLS-II/blop#143
Implement multitask models by @thomaswmorris in NSLS-II/blop#124
Refactored tests to reduce redundancy (179 -> 35 tests) by @thopkins32 in NSLS-II/blop#148
Update tutorial notebooks by @thopkins32 in NSLS-II/blop#147
Deprecating older APIs by @thopkins32 in NSLS-II/blop#146
Auto-generated API docs for Agent, AxAgent, DOFs, and Objectives by @thopkins32 in NSLS-II/blop#149
Executable tutorials using jupyterlab by @jessica-moylan in NSLS-II/blop#154
Update and simplify packaging by @thopkins32 in NSLS-II/blop#155
Documentation Update by @thopkins32 in NSLS-II/blop#160
Add docs on attaching data to experiments by @thopkins32 in NSLS-II/blop#162
How-to guide for custom generation strategies by @thopkins32 in NSLS-II/blop#163
New Contributors#
@jessica-moylan made their first contribution in NSLS-II/blop#117
v0.7.5 (2025-06-18)#
What’s Changed#
Remove ‘created’ from release types by @jennmald in NSLS-II/blop#105
Refactor DOFs to fix trust domain behavior by @thomaswmorris in NSLS-II/blop#97
Update installation.rst to reflect the version of python tested against by @whs92 in NSLS-II/blop#107
Fix CI failures due to domain transforms by @thomaswmorris in NSLS-II/blop#108
Update documentation for Agent, DOF, and Objective by @thomaswmorris in NSLS-II/blop#113
Remove ortools as a dependency by @thomaswmorris in NSLS-II/blop#115
Ax integrations with the Bluesky ecosystem by @thopkins32 in NSLS-II/blop#112
New Contributors#
@whs92 made their first contribution in NSLS-II/blop#107
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#
Fix documentation CI error by @jennmald in NSLS-II/blop#84
Fix fitness and constraint plots by @jennmald in NSLS-II/blop#80
Refactor: Make agent default compatible with Bluesky Adaptive by @maffettone in NSLS-II/blop#86
Ruff linter support; Removal of black, flake8, and isort by @thopkins32 in NSLS-II/blop#95
Add type hints by @thopkins32 in NSLS-II/blop#87
Remove Python 3.9 support by @thopkins32 in NSLS-II/blop#101
Add XRT demo to blop tutorials by @jennmald in NSLS-II/blop#102
New Contributors#
@jennmald made their first contribution in NSLS-II/blop#84
@maffettone made their first contribution in NSLS-II/blop#86
@thopkins32 made their first contribution in NSLS-II/blop#95
v0.7.2 (2025-01-31)#
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
botorchcode.Optimization objectives can be customized with
experimentmodules.Added optimization test functions for quicker testing and development.
v0.1.0 (2023-03-10)#
Changed from using
SafeConfigParsertoConfigParser.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: