Skip to content

feat: exorcist worker #1833

Open
ethanholz wants to merge 20 commits into
OpenFreeEnergy:feat/warehousefrom
ethanholz:feat/exorcist
Open

feat: exorcist worker #1833
ethanholz wants to merge 20 commits into
OpenFreeEnergy:feat/warehousefrom
ethanholz:feat/exorcist

Conversation

@ethanholz

@ethanholz ethanholz commented Feb 7, 2026

Copy link
Copy Markdown
Collaborator

Adds support for a Filesystem-backed exorcist worker that can run ProtocolUnits from an AlchemicalNetwork. Adding @atravitz and @IAlibay for reference.

Note that this is an implementation that does not require the changes to contexts in OpenFreeEnergy/gufe#753, to keep these features independent, but the expectation is that whenever we merge gufe #753, we should then update the relevant code here to take advantage of that introduced flexibility.

Also note that this PR took some commits from #1824, but circumvents changes to execute_DAG.

Checklist

  • All new code is appropriately documented (user-facing code must have complete docstrings).
  • Added a news entry, or the changes are not user-facing.
  • Ran pre-commit: you can run pre-commit locally or comment on this PR with pre-commit.ci autofix.

Manual Tests: these are slow so don't need to be run every commit, only before merging and when relevant changes are made (generally at reviewer-discretion).

Developers certificate of origin

@codecov

codecov Bot commented Feb 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.08586% with 31 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.13%. Comparing base (7ec596b) to head (f29f16d).

Files with missing lines Patch % Lines
src/openfe/orchestration/__init__.py 88.09% 15 Missing ⚠️
src/openfecli/commands/worker.py 93.75% 4 Missing ⚠️
src/openfe/storage/warehouse.py 86.36% 3 Missing ⚠️
src/openfe/tests/orchestration/test_worker.py 98.43% 3 Missing ⚠️
src/openfecli/plan_alchemical_networks_utils.py 87.50% 3 Missing ⚠️
src/openfe/tests/orchestration/conftest.py 97.22% 1 Missing ⚠️
.../openfe/tests/orchestration/test_exorcist_utils.py 99.29% 1 Missing ⚠️
src/openfecli/commands/plan_rbfe_network.py 80.00% 1 Missing ⚠️
Additional details and impacted files
@@                Coverage Diff                 @@
##           feat/warehouse    #1833      +/-   ##
==================================================
- Coverage           90.33%   90.13%   -0.20%     
==================================================
  Files                 212      220       +8     
  Lines               20086    20849     +763     
==================================================
+ Hits                18144    18793     +649     
- Misses               1942     2056     +114     
Flag Coverage Δ
fast-tests 90.13% <96.08%> (-0.20%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ethanholz ethanholz changed the title [WIP] feat: exorcist worker feat: exorcist worker Feb 11, 2026
@ethanholz ethanholz marked this pull request as ready for review February 11, 2026 21:13
@ethanholz

Copy link
Copy Markdown
Collaborator Author

Seems I still have some unit testing to finish up, but this should be enough to highlight the use case for interested partners.

@ethanholz

Copy link
Copy Markdown
Collaborator Author

A few notes on how to run this code:

We need to first generate a warehouse that contains everything to run. Currently, only RBFE planning works. When using openfe plan-rbfe-network, you just need to add the --warehouse flag. This will generate a FilesystemWarehouse.

To run a single task you use something like this:

openfe worker warehouse

This will only run a task to completion and then stop. To run this in a loop, you can do something like this: https://gist.github.com/ethanholz/775027b469d6038f3dc958110c635c4c

@IAlibay

IAlibay commented Mar 6, 2026

Copy link
Copy Markdown
Member

@atravitz I think we need to discuss this at some point soon. My understanding was that warehouse & exorcist was going to be decoupled from planning?

@ethanholz

Copy link
Copy Markdown
Collaborator Author

@atravitz I think we need to discuss this at some point soon. My understanding was that warehouse & exorcist was going to be decoupled from planning?

The exorcist implementation is built to accept units as discussed. To demonstrate capabilities, I have added a flag to warehouse so that you can test and validate some of the functionality today.

return None
db, taskid, unit = task
# 2. Construct the context
# NOTE: On changes to context, this can easily be replaced with external storage objects

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# NOTE: On changes to context, this can easily be replaced with external storage objects
# NOTE: On changes to context (gufe PR #753), this can easily be replaced with external storage objects

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants