Fluence quantum-classical scheduling coordination library (sidecar + interceptor + providers)
Project description
fluence (Python)
Quantum-classical scheduling coordination library for the Fluence Kubernetes
scheduler. Import name fluence; distributed on PyPI as fluence-hpc.
This package is built into the Fluence sidecar image and staged into user application containers at admission time — users never install it.
What it does
A hybrid quantum-classical workflow submits work to two queues: the Kubernetes scheduler (classical) and a QPU vendor API (quantum). Classical worker pods would idle while the QPU queue drains. Fluence gates the workers until the quantum task is about to run, then releases them. This library is the runtime half:
- interceptor (
fluence.interceptor) — runs inside the user container, monkey-patches the vendor SDK submit call to tag each task with the pod UID. - sidecar (
fluence.sidecar) — runs in a sidecar container, discovers the tagged task, polls queue position, and ungates the classical workers when the task is ready (or, in observe-only mode, just records the queue position). - providers (
fluence.providers) — per-vendor plug-ins implementing both halves. Providers self-register on import.
Delivery (Model C)
The interceptor must run in the user's container, which does not have this package installed. Rather than require a user install or concatenate a text snippet, the Fluence webhook:
- injects an init container (the sidecar image) running
python -m fluence.stage <dir>, which copies the pure-Pythonfluencepackage plus asitecustomize.pyinto a sharedemptyDir; - mounts that volume into the user container and prepends
<dir>toPYTHONPATH.
Python imports sitecustomize automatically on every interpreter start
(python app.py included — unlike PYTHONSTARTUP, which only fires for
interactive sessions), so import fluence.interceptor runs before user code.
The interceptor patches whichever vendor SDK is present and fail-soft skips the
rest. No user code changes, no vendor SDKs added to the user image.
Adding a provider
Add one module under fluence/providers/ that subclasses Provider, implements
install_interceptor (tag hook), matches, find_my_task, is_ready_to_ungate,
queue_position (optional), and job_id, and calls register(PROVIDER). Import
it from fluence/providers/__init__.py. Nothing else changes.
Tests
python3 python/tests/test_fluence.py
Building and releasing
The package is distributed on PyPI as fluence-hpc (the import name fluence is
already taken on PyPI). It is also baked into the sidecar image, so a release
moves the package version and the image tag together.
Build the distributions
From python/:
pip install --upgrade build twine
python -m build
This produces dist/fluence_hpc-<version>-py3-none-any.whl and
dist/fluence_hpc-<version>.tar.gz. Upload both.
Test on TestPyPI first
twine upload --repository testpypi dist/*
pip install --index-url https://test.pypi.org/simple/ fluence-hpc
python -c "import fluence; print(fluence.__version__)"
Release to PyPI
twine upload dist/*
After this, pip install fluence-hpc works anywhere and imports as fluence.
Versioning
Bump version in pyproject.toml and __version__ in fluence/__init__.py
together (PyPI refuses to overwrite an existing version). Because the package is
version-locked into the sidecar image, tag the release so the image and the
package share a version — e.g. a v0.1.1 git tag triggers both the
sidecar-build-deploy workflow (image) and a PyPI publish.
Automated release (recommended)
Prefer GitHub Actions with PyPI Trusted Publishing (OIDC) over manual token
uploads: register the repo + workflow once on PyPI, then a release workflow
triggered by a version tag builds with python -m build and uploads with
pypa/gh-action-pypi-publish — no stored secret. The Docker image is built by
.github/workflows/sidecar-build-deploy.yaml on the same tag, keeping the
package version and image tag in lockstep.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fluence_hpc-0.0.1.tar.gz.
File metadata
- Download URL: fluence_hpc-0.0.1.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8108cd511efea55b4ed465d3f859692658a7c1866a27e47870a4c30f6d7d2d0e
|
|
| MD5 |
b8cd13c0c564f5c3aa8650970698b495
|
|
| BLAKE2b-256 |
6da9beb48347dd3904204fd8bfb3ca6dbec6d2d2b4cd8cd91a5e8386d45eff10
|
File details
Details for the file fluence_hpc-0.0.1-py3-none-any.whl.
File metadata
- Download URL: fluence_hpc-0.0.1-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
088142b9769efccc7bff639744d740ae0b0fea5927b529b9fde9f22458b23058
|
|
| MD5 |
24880c8381d651a89ecd569da8a9d481
|
|
| BLAKE2b-256 |
fffc4ae1afe6e9f8382382096954c662e7a53504d44381f63d8d51bf6bced79f
|