From 1b018054376aeccf4bbc52933052a388f91e2b0f Mon Sep 17 00:00:00 2001 From: Andre Merzky Date: Wed, 19 Aug 2026 12:21:20 +0200 Subject: [PATCH 1/2] orbit backend: let the caller name its broker participant The broker draws every connected runtime as a participant, so the backend's anonymous `rhapsody.` shows up as noise in a topology view -- two of them, unexplained, for a session with two engines. A caller which knows what the backend is for can now say so (`participant_name="rhapsody.."`); uniqueness becomes that caller's contract. Unnamed backends keep the unique suffix and the old behavior exactly. Co-Authored-By: Claude Opus 5 (1M context) --- src/rhapsody/backends/execution/orbit.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/rhapsody/backends/execution/orbit.py b/src/rhapsody/backends/execution/orbit.py index 90e4fbb..88547a6 100644 --- a/src/rhapsody/backends/execution/orbit.py +++ b/src/rhapsody/backends/execution/orbit.py @@ -94,6 +94,7 @@ def __init__( endpoint_name: str | None = None, backends: list[str] | None = None, name: str = "orbit", + participant_name: str | None = None, plugin_name: str = _PLUGIN_NAME, batch_window: float | None = None, batch_limit: int = 1024, @@ -109,6 +110,7 @@ def __init__( self.logger = logging.getLogger(__name__) self._broker_url = broker_url + self._participant_name = participant_name self._endpoint_name = endpoint_name self._plugin_name = plugin_name self._remote_backends = backends or ["dragon_v3"] @@ -325,12 +327,16 @@ def _get_rhapsody_handle(self) -> Any: """ import uuid - # A unique name suffix avoids the broker's name-in-use rejection when - # several rhapsody clients connect (or one restarts within the - # liveness grace window). + # The broker shows every runtime as a participant, so an anonymous + # `rhapsody.` reads as noise in a topology view. A caller + # which knows what this backend is *for* can say so via + # ``participant_name`` -- uniqueness is then the caller's contract. + # Without one, a unique suffix avoids the broker's name-in-use + # rejection when several rhapsody clients connect (or one restarts + # within the liveness grace window). rt = EndpointRuntime( broker_url=self._broker_url, - name=f"rhapsody.{uuid.uuid4().hex[:8]}", + name=self._participant_name or f"rhapsody.{uuid.uuid4().hex[:8]}", ) try: rt.start(wait=True, timeout=self._start_timeout) From 42f28fd77d01c01552be623013fd9229b71144ef Mon Sep 17 00:00:00 2001 From: Andre Merzky Date: Wed, 19 Aug 2026 12:53:16 +0200 Subject: [PATCH 2/2] orbit backend: advertise as 'engine', not 'consumer' 'consumer' is the runtime's say-nothing default. A topology viewer now sees what the participant is: the engine side of the compute hand-off. Co-Authored-By: Claude Opus 5 (1M context) --- src/rhapsody/backends/execution/orbit.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rhapsody/backends/execution/orbit.py b/src/rhapsody/backends/execution/orbit.py index 88547a6..1cacea8 100644 --- a/src/rhapsody/backends/execution/orbit.py +++ b/src/rhapsody/backends/execution/orbit.py @@ -337,6 +337,9 @@ def _get_rhapsody_handle(self) -> Any: rt = EndpointRuntime( broker_url=self._broker_url, name=self._participant_name or f"rhapsody.{uuid.uuid4().hex[:8]}", + # the advertised role defaults to 'consumer', which says nothing. + # This participant is the workflow engine's hand-off into ORBIT. + role="engine", ) try: rt.start(wait=True, timeout=self._start_timeout)