[Feature]: Third-party hosts driving nvpair-ui-broker: is the JSON-RPC surface a supported contract, is the app-data layout versioned, and can the proxy expose the serving node?
Maintainer thường phản hồi trong vòng 4 ngày
@sherief-nv đang làm issue này rồi.
Từ ngày 9/10/2026.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- electron, go, ollama
- Lĩnh vực
- api, backend, distributed-systems
Hướng nghiên cứu
Bắt đầu với điểm vào JSON-RPC của nvpair-ui-broker và README hoặc docs/integration.mdx, sau đó kiểm tra services/VERSIONING.md, node-id.json và cluster/identity.json. Chạy lại các lệnh broker và proxy đã được ghi trong tài liệu, bao gồm discovery:subscribe, workloads:subscribe và curl, để xác định hành vi hiện tại. Công việc được coi là hoàn tất khi contract được hỗ trợ, việc xử lý định dạng dữ liệu và mọi metadata phản hồi của proxy được ghi lại hoặc triển khai kèm validation đã nêu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Area
nvpair-ui-broker (JSON-RPC surface, --ipc mode), nvpair-cluster-manager (app-data / cluster dir layout), ollama-proxy (response headers)
User problem
We are integrating PAIR as the LAN inference layer behind our own desktop application (Magieva Desktop, an Electron app; we are an NVIDIA Inception member). Our host process supervises nvpair-ui-broker itself — spawned with piped stdio, or over --ipc — instead of the shipped PAIR UI, and relies on:
discovery:get-nodes/discovery:subscribe→discovery:nodes-changedfor the roster (members, addresses,modelsByEngine,loadedByEngine,trusted/clustered);workloads:subscribe→workloads:upsertwithworkloadInfo.scheduledOn/originatedFromto record which node actually served each request (we write it to our usage ledger);cluster:invite-node/cluster:respond-to-invite/cluster:invite-statusandengine:remote-install/engine:remote-pull-modelto drive pairing and model placement from our own UI;- the per-user app-data directory (
~/Library/Application Support/Nvidia Corporation/Personal AI Routeron macOS) and the cluster dir (identity.json,node.crt,node.key,trusted/) so an existing NVIDIA-created node keeps its identity when our host takes over supervision.
Measured on v0.1.1 (13b6811, built from source with Go 1.25, macOS 26 / Apple M4 Max): all of the above works today when the broker is driven from a plain shell over newline-delimited JSON-RPC 2.0 — app:ready in ~3 s, the roster is pushed, a real Ollama turn through the proxy yields workloads:upsert with scheduledOn set, and the invite / engine methods are routed. What we cannot determine from the repo:
- Is the broker's JSON-RPC method + notification surface a supported integration contract, with a compatibility policy across releases (additive changes only? deprecation window?), or is it considered internal to the shipped UI?
- Is the on-disk format of the app-data and cluster directories versioned?
node-id.jsonandcluster/identity.jsoncarry onlynode_uuidandcreated_at;services/VERSIONING.mdversions binaries, not the data layout. A third-party host cannot tell whether a directory written by a newer or older PAIR is safe to attach to, or refuse it cleanly. - Will the proxies expose the serving node on the HTTP response (e.g. an
X-PAIR-Served-On: <hostUuid>header)? Today it is available only through the broker event stream (proxy:proxy/request.node_id,workloads:upsert.scheduledOn), which is fine for a host that also owns the broker, but not for an Ollama-compatible client that only sees the proxy.
Desired outcome
- A short statement in the broker README (or a
docs/integration.mdx) of which methods/notifications are stable for third-party hosts and how breaking changes are announced. - A
format_version(or equivalent) field innode-id.json/cluster/identity.json, plus a documented rule for what a host should do when it does not match. - Optionally, a
X-PAIR-Served-Onresponse header onollama-proxy/lmstudio-proxyresponses.
Alternatives considered
- Pinning to a vendored
v0.1.1build and treating every upgrade as a full re-validation of the JSON-RPC surface (what we will do if the surface is declared internal). - Reading the serving node only from the broker events (works for us; leaves plain Ollama clients unable to attribute a response).
- Inferring the data-dir version from file shape (fragile; the reason for question 2).
Compatibility and security implications
Additive only: a version field and a response header change no existing behaviour. A published compatibility policy lets hosts fail closed on a surface they do not recognise instead of guessing. No change to pairing, mTLS or data handling is requested.
Validation approach
- Drive the broker from a shell exactly as we did:
./nvpair-ui-broker --cluster-dir <dir>from a directory holding the sibling binaries, send{"jsonrpc":"2.0","id":1,"method":"discovery:subscribe"}andworkloads:subscribe, run onePOST /api/chatthrough the proxy, observeworkloads:upsertwithscheduledOn. - For the version field: create a node, read
node-id.json, confirm the field; start a host against a directory carrying a higher version and confirm it refuses with a clear error. - For the header:
curl -ia successfulPOST /api/chatthrough the proxy and read the header.
Confirmations
- I searched existing issues for duplicates (#1, #4, #48, #49, #58 are adjacent — mDNS reflectors, enrichment refresh, test data dir, Linux service, headless manual nodes — none asks about contract stability, data-dir versioning or a served-on header).
- I agree to follow the Code of Conduct.
- Ngôn ngữ chính
- Go
- Star
- 1.6k
- Fork
- 266
- Merge trung bình
- 3 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 28
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của NVIDIA/Personal-AI-Router
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
NVIDIA/Personal-AI-Router#165 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 46/100
NVIDIA/Personal-AI-Router#164 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
enhancement
Độ khó 4/5 Hơn một tuần Mức phù hợp với người mới 12/100
NVIDIA/Personal-AI-Router#162 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
NVIDIA/Personal-AI-Router#154 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 4 ngày
-
[Feature]: [Ollama] Alert the user about model pull failuresCó thể đã có người làm @ckelseynv đã nhận 4 ngày trước. Đang mởenhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 56/100
NVIDIA/Personal-AI-Router#152 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 4 ngày
Tất cả issue của NVIDIA/Personal-AI-Router
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
chaitin/agent-compose#770 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 1 ngày
-
v3.8.0 vanilla manifest points to non-existent images registry.k8s.io/csi-vsphere/csi-vsphere/{driver,syncer}Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởkind/bug
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 85/100
kubernetes-sigs/vsphere-csi-driver#4351 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
component/gpu-kubelet-plugin component/helm needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
kubernetes-sigs/dra-driver-nvidia-gpu#1559 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
workflow: redundant goroutine in scheduleRetryCó thể đã có người làm @moodbased đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 2 ngày