Skip to content

test(mesh): verify remote-only inference in CPU smoke - #1237

Merged
micspiral merged 2 commits into
mesh-tool-relayfrom
jimcodey/mesh-cross-node
Oct 16, 2026
Merged

micspiral merged 2 commits into
mesh-tool-relayfrom
jimcodey/mesh-cross-node

Conversation

@micspiral

@micspiral micspiral commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Stacked on #941 (mesh-tool-relay), with no production routing changes. Test-only remote inference coverage using two real isolated processes and Buzz's Lifecycle/config owners. The provider alone receives a checksum-pinned SmolLM2-135M GGUF. The consumer has an empty isolated home, no hosted model, private discovery and explicit owner allowlists.

Checks: exact peer model visibility; nonempty model=mesh completion via consumer; provider locally served request count increases; consumer remains model-less with zero locally served requests; a fresh completion fails after provider shutdown. Omit-join negative control fails readiness rather than falsely passing.

Originating conversation:
buzz://message?channel=53a55c4d-2b96-40b1-a6d4-8de855b2a328&id=f8cf59f766a929af44a5b38d6b7a0227ca469a066d5d7a8f0c5beaa55c747af6

Ownership and invocation

Worker, Python driver and instructions are colocated under crates/mesh-compute/tests/cross_node/. Explicit Cargo test target cross_node_worker has harness = false, test = false, and requires mesh. Ordinary crate tests do not execute the interactive worker. The driver explicitly builds it with cargo test --test cross_node_worker --no-run --message-format=json and resolves the executable from Cargo JSON, not a guessed hashed path. No public example or shipped binary added. Root scripts retains only a thin Linux runtime/CI entry point.

Run scripts/ci-mesh-cross-node.sh on Linux x86-64, or the manual native command in crates/mesh-compute/tests/cross_node/README.md. Working means a nonempty completion, provider serving evidence, failed post-shutdown request and normal child exits.

Verified evidence

Head: 20f3245.

  • Hosted Ubuntu CPU run 38830689551 passed. Artifact inspection: provider count 0→1, one hosted model; consumer starts with zero models/requests, final zero-local assertions pass; real generated answer; provider-stopped request HTTP 503.
  • Linux full mesh feature suite: 59 passed /1 ignored in 1.28s; doctests pass. Ordinary test run excludes worker; explicit worker build and execution pass afterward.
  • Native precommit working snapshot of the same relocation: real smoke 22.99s; full crate suite 60 passed /1 ignored; all-targets feature clippy passes. SIGTERM and SIGALRM injected after both starts: both owned child PIDs exit and both temporary homes are removed.
  • Push hooks at this head: 235 JS files /3894 tests pass; types/design/workspace clippy pass. No browser cases added or removed.
  • Initial head 764f0f3 also passed hosted CPU run 38829762341, native positive runs, and omit-join fail-then-pass control.

Actual added CI overhead

Single separate Ubuntu job, path-filtered, 20-minute job limit; smoke has 10-minute outer bound. No required-check policy change.

Measurement Initial 764f0f3 Current 20f3245
Total job wall / runner time 7m12s 9m47s
Rust cache/toolchain setup 2m30s 3m21s
Full crate build/tests 4m07s 5m42s
Unit test execution within above 0.98s 1.28s
Worker build + assets + smoke 24s 36s
Real smoke within above 19.61s 30.16s
Model/runtime asset cache miss hit

Current run had no Rust cache hit (PR jobs do not save that cache). Expect 7–10 added runner-minutes on matching PR runs based on these samples, not only the 20–30s smoke cost. This is two samples, not a latency guarantee; warm Rust-cache performance is unmeasured. Existing CI runs in parallel, so added runner minutes are not necessarily added PR critical-path time. No existing suites/engines/assertions removed to achieve these figures.

Old block/buzz baseline run 38819428902: 25m05s total, 23m24s builds, ~46s live smoke with six sequential checkpoints. Previous successful baseline job:24m23s. This is a cost comparison of different coverage, not an apples-to-apples speedup. Old baseline built relay/admin and started Postgres/Redis/MinIO; this job does not.

Coverage boundaries / readiness

This restores the old serve/client remote inference proof, not full relay-lifecycle parity. It does not prove signed relay discovery, membership-driven joining, stranger denial, the plugin's leased gateway/GDK agent loop, desktop packaging or cross-host NAT/firewall behavior. Real QUIC peers are separate processes on one runner.

Initial read-only agent review completed; follow-up target/driver review requested. Separate self-review verified current hosted ordinary-test exclusion and explicit target resolution via successful execution. Broad repository CI still pending at latest inspection; human acceptance not yet performed, so retain draft. No buzz-review-completed attestation.

Cleanup: owned native children gone, temporary homes removed; task-local cargo clean reclaimed 7.6GiB after final local checks. Unmerged worktree retained. No live app/node was stopped.

JimCodey and others added 2 commits October 16, 2026 11:27
Co-authored-by: Michael Neale <[email protected]>
Signed-off-by: JimCodey <fab731feb32f528977dec0f8e40b557d552d1c795ae5c8d75e7dc071c2b05aa0@meshllm.communities.buzz.xyz>
Co-authored-by: Michael Neale <[email protected]>
Signed-off-by: JimCodey <fab731feb32f528977dec0f8e40b557d552d1c795ae5c8d75e7dc071c2b05aa0@meshllm.communities.buzz.xyz>
@micspiral
micspiral merged this pull request into mesh-tool-relay Oct 16, 2026
33 checks passed
@micspiral
micspiral deleted the jimcodey/mesh-cross-node branch October 16, 2026 06:42
micspiral pushed a commit that referenced this pull request Oct 16, 2026
Signed-off-by: Brody <0c30d6330cb88c7b0519e2630b057ef0c584ad3f0be0157d9d2fdf0c913780bd@meshllm.communities.buzz.xyz>
thomaspblock added a commit that referenced this pull request Nov 6, 2026
## Summary

This adds the Community Mesh plugin to Buzz: shared compute plus Mesh
helper agents. The plugin is on by default. Sharing your machine's
compute is opt-in. Signing keys stay in the host.

The goal is parity with block/buzz desktop. Anything more is a bonus.

Originating Buzz channel:
buzz://channel/53a55c4d-2b96-40b1-a6d4-8de855b2a328

<img width="341" height="340" alt="image"
src="https://github.com/user-attachments/assets/2804d969-8a78-4271-a449-7a5bfd518f98"
/>
<img width="326" height="304" alt="image"
src="https://github.com/user-attachments/assets/9c1bad6f-1a9d-407c-a57e-68a6408c582b"
/>
<img width="1132" height="742" alt="image"
src="https://github.com/user-attachments/assets/421fc20b-ce3f-42af-b89c-fc1a63596ce8"
/>
<img width="882" height="708" alt="image"
src="https://github.com/user-attachments/assets/9e3f58ff-45ba-4bea-96c7-098be325ebf7"
/>

## What's in it

- **Shared compute:** a Settings page, model controls, the floating
Compute widget, the native mesh lifecycle, and authenticated community
discovery.
- **Auto model pick:** the memory cap is ¼ of RAM. Discrete GPUs are
rated by their own VRAM. Auto picks the largest Gemma 4 that fits.
- **Mesh agent type:** runs on the app's bundled goose through the Goose
plugin (`meshGoose.ts`), pointed at the mesh lease route. There is no
second agent runtime.
  - **Chat mode:** answers only, no tools.
- **Agent mode:** shell, skills and Buzz tools. The serving member's
model directs those tools on the owner's machine.
- Only the owner can trigger a turn. Messages from others can still
appear as context.
- **Windows:** the workspace path is resolved through `host.files`, with
no `pwd` or `base64`. The Media converter preset has Windows steps.
- Replaces #580 and includes #1237 (cross-node inference test).

## Build and trust model (same as block/buzz desktop)

- Mesh is compiled into every build, including release. There is no
cargo feature.
- The runtime is not bundled. The SDK downloads it from the Mesh-LLM
release and checks the manifest's SHA-256.
- The macOS `disable-library-validation` entitlement matches classic
Buzz.
- The owner key is mesh-llm's default keystore, the same one block/buzz
uses.
- Loopback ports 19337/13131 are the same defaults as block/buzz. They
can be overridden by env var.
- The Compute widget is an opaque window. Mesh does not enable Tauri
`unstable` or `macos-private-api`.
- `rusqlite` is 0.40 app-wide, forced by the SDK's log store.

## Dependencies

- The SDK is pinned to the 0.78.1 bridge revision
`5d19ca69403f5d3e46ddb82ce83164495fa88383`, including the virtual-chat
routing and peer-forwarding fixes. Swap it for an upstream release when
one includes both.

## Latest UI adjustments

- Activity values use the same body text size as the hardware value.
- Nested compute cards have smaller, proportional corners.
- The sharing switch inherits the standard theme colors; the local green
override is removed.

Focused component checks and design guards passed. The exact UI patch
was visually checked in the installed macOS Provider on its existing
source baseline; this does not replace packaged acceptance of the
complete current PR head.

## Open

- What to do when another mesh-llm already holds the ports: readiness
can adopt the other node's listener. We need a design that Jimmy signs
off on.
- Xet redirect (`missing X-Repo-Commit`) needs Mesh-LLM/mesh-llm#2579
plus an SDK `mesh-llm-hf-hub` bump.
- Slow agent turns on Windows/CUDA (about 4 tok/s vs 17 tok/s in chat)
haven't been measured yet.
- Packaged-app and human acceptance at the final head.

Draft. Detailed validation history is in the PR comments.

---------

Signed-off-by: Darioz <0c30d6330cb88c7b0519e2630b057ef0c584ad3f0be0157d9d2fdf0c913780bd@meshllm.communities.buzz.xyz>
Signed-off-by: Virgile-pct <[email protected]>
Signed-off-by: Thomas Petersen <[email protected]>
Signed-off-by: JimCodey <fab731feb32f528977dec0f8e40b557d552d1c795ae5c8d75e7dc071c2b05aa0@meshllm.communities.buzz.xyz>
Signed-off-by: Brody <0c30d6330cb88c7b0519e2630b057ef0c584ad3f0be0157d9d2fdf0c913780bd@meshllm.communities.buzz.xyz>
Signed-off-by: Jimmy <1fe240cd1a8cf775f6f3060f115e5a303181f3abf28ad4cb0c2515f4a02b36a8@meshllm.communities.buzz.xyz>
Signed-off-by: Codex <[email protected]>
Signed-off-by: Wario <dfbe041fec697424249363266ca53a7bdc62402afcd7ce994528f78720ae05b3@meshllm.communities.buzz.xyz>
Signed-off-by: Michael Neale <[email protected]>
Co-authored-by: Darioz <0c30d6330cb88c7b0519e2630b057ef0c584ad3f0be0157d9d2fdf0c913780bd@meshllm.communities.buzz.xyz>
Co-authored-by: Jimmy <1fe240cd1a8cf775f6f3060f115e5a303181f3abf28ad4cb0c2515f4a02b36a8@meshllm.communities.buzz.xyz>
Co-authored-by: Alessandro Joabar <[email protected]>
Co-authored-by: Thinker <75d8a808fa21bb8d1812e080cf471db601c6e8e6a62dcd516d37531e83a7bb77@meshllm.communities.buzz.xyz>
Co-authored-by: JimCodey <fab731feb32f528977dec0f8e40b557d552d1c795ae5c8d75e7dc071c2b05aa0@meshllm.communities.buzz.xyz>
Co-authored-by: DrCode <37819e35160e30daeb63700e9e6d660aff8e60a98807f0f50eb2611707e6e649@meshllm.communities.buzz.xyz>
Co-authored-by: Virgile-pct <[email protected]>
Co-authored-by: Thomas Petersen <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: scammed <02dea9c912230dcd8882fe78a4a16a51a3384898ca3166e23cd89fbd92d39ef6@meshllm.communities.buzz.xyz>
Co-authored-by: Michael Neale <[email protected]>
Co-authored-by: Michael Neale <[email protected]>
Co-authored-by: Codex <[email protected]>
Co-authored-by: Wario <dfbe041fec697424249363266ca53a7bdc62402afcd7ce994528f78720ae05b3@meshllm.communities.buzz.xyz>
Co-authored-by: Gu <28ffe54566d89ac40a9306adac7fdf81e713c2aa7c3bda4fd16977365f27c196@buzz.block.builderlab.xyz>
Co-authored-by: Deutsch <28ff7d62bb7dafcd3cda8a3291ca9096df9ed3176dcb810880d16224f71777a5@buzz.block.builderlab.xyz>
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.

1 participant