DESDEO 2.3.0
[2.3.0] - 31.3.2026
Core logic
Added
- Added
lagrange_multipliersfield toSolverResults; extract duals from
Ipopt, Bonmin, and Gurobi solvers. - Added
desdeo/explanations/lagrange.pywith filter, tradeoff, and
active-objective utilities for Lagrange multiplier analysis. - Added unit tests for Lagrange utilities and solver integration tests.
Fixed
- Fixed a bug where
ScipyMinimizeSolverandScipyDeSolverreturned incorrect
solutions for problems withmaximize=Trueobjectives. - Fixed infinite loop in the Dmitry forest problem (use
Path(__file__).resolve()instead of searching for"DESDEO"folder name).
Web API
Added
- Added
get-multipliers-infoendpoint to the NIMBUS router. - Added XNIMBUS (Explainable NIMBUS)
StateKinds, state fields, and API
models (NIMBUSMultiplierRequest/Response). - Added XNIMBUS router with explainability endpoints; registered in
app.py. - Added XNIMBUS API endpoint tests.
Changed
- Removed singleton request model classes (
ProblemGetRequest,
GetSessionRequest,RepresentativeSolutionSetRequest) and refactored
endpoints to use query parameters instead. - Refactored
SessionContextGuard: replaced__call__with
.post/.get/.deletemethods to eliminate spuriousrequestBodyon
GET/DELETE endpoints in the OpenAPI schema. - Fixed
SessionContextGuardswapped-arguments bug (fetch_interactive_session
called with request/session reversed).
Fixed
- Fixed cookies being set to
Securein dev mode, which broke the UI over HTTP
connections (e.g., WSL). TheSecureflag is now derived from the SvelteKit
devenvironment setting.
Web GUI
Added
- Added XNIMBUS (Explainable NIMBUS) frontend route with explainable layout,
advanced sidebar, explanation bar charts, and help dialog. - Added Explainable NIMBUS to the method selection/initialize view.
- Added custom 404 error page.
- Added registration and forgot-password placeholder pages; fixed links
on the login page. - Added visual indicators on the login form.
- Added page titles and meta descriptions to all frontend routes.
Changed
- Fully migrated to Orval-generated endpoints: replaced all
api.GET/api.POST
calls with Orval-generated endpoint functions across 19 files (problems, groups,
NIMBUS, XNIMBUS, SCORE-bands, GDM-SCORE-bands, GNIMBUS, EMO routes). - Consolidated Orval-generated models and clients into a single file instead of
splitting acrosssrc/lib/gen/models. - Migrated all
components['schemas']references to direct$lib/gen/models
imports. - Refactored NIMBUS frontend to Orval handler pattern (removed
+server.ts
proxy,callNimbusAPI). - Refactored GNIMBUS
+server.tsfrom generic dispatch to individual Orval
calls. - Removed unused client files:
client.ts,client-types.ts,zod-schemas.ts,
zod-types.ts. - Removed
openapi-fetchandopenapi-typescript-fetchdependencies. - Renamed "Worsen until" to "Impair until" in NIMBUS constants.
Fixed
- Fixed Orval GET-with-body error (pass
undefinedinstead ofnullfor
optional body params). - Fixed stale Orval imports in E-NAUTILUS, problems/handler, and
problems/define/handler. - Fixed explanation bar chart / ranking bar chart label overflow (rotate,
truncate, cap margins).
Documentation
Added
- Added guide on how to implement method interfaces in the GUI.
Changed
- Updated contributing guide to include instructions for running tests without
make. - Updated installation documentation for DESDEO on JYU Windows.
- Fixed improperly formatted MkDocs settings for Read the Docs builds.
- Fixed broken cross-references in notebook markdown cells (autorefs to standard
links). - Completed sympy evaluator, Pyomo solvers, Nevergrad solver, and Summary of
Solvers documentation sections. - Made all documentation code cells executable with real test problems.
- Suppressed sklearn and COBYLA warnings in documentation notebooks.
Rumor has it (automatically generated)
- Updated documentation for installing DESDEO by @juropo in #427
- Purging singleton request models and using query params instead by @PtrBednarik in #433
- New error page (without models) by @MajoMartinco in #444
- Head titles and descriptions by @MajoMartinco in #447
- Login form indicators by @MajoMartinco in #450
New Contributors
- @MajoMartinco made their first contribution in #444
Full Changelog: v2.2.2...v2.3.0