Skip to content

Yimo/feat/hosted - #3692

Draft
poorwym wants to merge 4 commits into
mainfrom
yimo/feat/hosted
Draft

Yimo/feat/hosted#3692
poorwym wants to merge 4 commits into
mainfrom
yimo/feat/hosted

Conversation

@poorwym

@poorwym poorwym commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

This PR introduces the basic API design for hosted support. It is an initial implementation intended to establish a foundation and is open for public discussion and further iteration. @spomichter @leshy

@github-actions github-actions Bot added the first-time-contributor PR opened by an author who had not previously committed to this repository label Aug 26, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we decided against multi language docs for now (since it adds maitenance burden and translation tools are so good)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

I'll keep that in mind for next time. This PR isn't built for merge so the Chinese documentation was just there to help me think things through in Chinese.I will make sure this doesn't happen again.


The system has three related but separate concerns.

### Discovery plane

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

keep in mind, next to RPC, zenoh also offers distributed key/value store, but this is risky/complex so I think rpc for initial implementation is a responsible choice

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Yes! I noticed that some of the transports in the dimos are implemented using Zenoh as well.


This means the application can continue moving data if the controller exits
after startup, although the MVP may keep it alive to aggregate status and
coordinate shutdown.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think keepalive packets will be neccessary between coordinator and Host service(s)

if someone runs kill -9 on a laptop - remote system should notice that owning blueprint is down, and shutdown it's modules

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Got it. I'll add that in just a bit

- Host presence disappears when its Zenoh liveliness token is lost;
- a descriptor is fetched from the live Host rather than trusted from a stale
retained value;
- discovery works through routers and gossip, not only local multicast;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

#3617

start from here (about to get merged) makes zenoh default across dimos

| `protocol_version`, `plan_schema_version` | Control and deployment-plan compatibility. |
| `dimos_version`, `application_revision` | Runtime and code compatibility. |
| `active_runs`, `leases` | Current occupancy and pending reservations. |
| `health`, `last_error` | Whether the Host can accept work and why not. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

great, later we can add even system metrics etc

MarkerDetectionStreamModule.blueprint(
marker_length_m=0.1,
camera_info=GO2Connection.camera_info_static,
).placement(tags={"gpu"}),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

.placement is a weird word, maybe .remote ?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

That makes a lot of sense. The reason I used "placement" is because local execution can also serve as a placement location. But "remote" is definitely clearer semantically, so I'll change it to "remote".

| Cross-Host stream using shared memory | Rejected. |
| Other machine-local transports | Supported only when both endpoints are on the same Host. |

Keeping explicit shared memory for local image or point-cloud paths avoids a

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

yeah now that we merge zenoh #3617 shm will be used automatically between local modules, so all blueprints will just be on zenoh and you won't have these issues

Comment thread dimos/spec/hosted.py

# Select one G1 Host and one GPU Host; navigation remains local.
multi_host_g1 = autoconnect(
unitree_g1.blueprint().placement(tags={"g1"}),

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.

nitpick but dont like the word placement. maybe .hosted()

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

Labels

first-time-contributor PR opened by an author who had not previously committed to this repository

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants