[Bug]: PAIR cross-node routing fails: requests to a peer return "upstream returned HTTP 404" and the peer's model inventory does not update
Maintainer antworten meist innerhalb von 5 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 46/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- go, linux, ollama, ubuntu
- Bereich
- backend, distributed-systems, networking
Rechercherichtung
Start by tracing the PAIR request routing and peer model inventory refresh paths; the report names no source files or tests, so locate their entry points in the Go services. Reproduce with two nodes and a model installed only on the receiving peer, then check whether the request reaches its Ollama engine and whether the inventory refreshes after a pull. Done means both behaviors work without restarting nvpair; the secondary TUI panic is unconfirmed and may need separate investigation.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
PAIR version or commit
nvpair 0.1.1-463 from NVPAIR-Setup-0.1.1-arm64.deb
Affected component
Services / broker
Environment
Summary:
In a two-node PAIR cluster of Jetson Orin systems, requests routed from one node to a model that only the other node has fail with "upstream returned HTTP 404". The receiving node's own Ollama engine is healthy and serves the model directly, and the receiving node's Ollama log shows no request for the failing calls. The requesting node's model inventory never shows the peer's new model, even after the peer's nvpair was restarted.
Secondary (unconfirmed): on 2026-10-10 the nvpair TUI on one node panicked. It may be related to a terminal resize, but a resize test on 2026-10-11 did not reproduce it (see Issue 2).
Environment:
- PAIR version: Debian package nvpair 0.1.1-463 (arm64), installed from the release asset NVPAIR-Setup-0.1.1-arm64.deb. The GitHub release v0.1.1 (published 2026-08-28) points at commit 13b68115fa2c9c1d94f1ead1358f8d5a527cfecf. The installed package doesn't name a commit, so the match to that tag is inferred from the version and build date, not confirmed.
- Installed build manifest (AGX): product 0.91.7, built 2026-08-28T21:53:38Z, source fingerprint a36564f8782c03a91727309eec67a6b616a1cd26ff3cdde24c68c8c6ee7dce21.
- Component versions (from the AGX's build manifest and binaries): nvpair-tui 0.7.2, nvpair-ui-broker 0.40.2, nvpair-engine-manager 0.17.4, ollama-proxy 0.26.2, lmstudio-proxy 0.16.2, nvpair-cluster-manager 1.1.4, nvpair-node-scanner 0.20.3, nvpair-node-info 0.13.3, nvpair-workload-manager 0.13.3, nvpair-manual-nodes 0.11.1, nvpair-errors 0.7.4, nvpair-node-settings 1.0.4.
- Hardware and OS: two Jetson Orin systems, AGX Orin Dev Kit and Orin Nano Super, both Ubuntu 24.04.5 with JetPack R39 (nvpair installed on both from the same package).
- Ollama 0.40.2, installed as a systemd service, listening on 127.0.0.1 on a non-default port (11435 on the AGX, 11436 on the Nano), matching each node's engines/ollama.json.
- nvpair was run over SSH from a terminal inside herdr (a terminal multiplexer, default configuration, not customized) on a separate workstation. herdr does not run on the Jetsons.
Ollama configuration (non-default):
- Ollama runs as a systemd service with a drop-in override at /etc/systemd/system/ollama.service.d/override.conf.
- The default Ollama port (11434) is taken by PAIR's ollama-proxy, so Ollama binds elsewhere. On the AGX the override sets OLLAMA_HOST=127.0.0.1:11435, which matches the AGX's engines/ollama.json. On the Nano the override sets 127.0.0.1:11436, which matches the Nano's engines/ollama.json. PAIR wrote the Nano's port when it first started, and Ollama was moved to match.
- On the AGX the override also sets OLLAMA_MODELS=/mnt/nvme/dave/models, which puts the model store on a separate NVMe drive. The Nano uses Ollama's default store.
- The Ollama installer printed "Unsupported JetPack version detected. GPU may not be supported." GPU inference still works (ollama ps reports 100% GPU on both), but the warning is worth knowing about.
- Checks against Ollama directly must use the engine port, not 11434 (PAIR's proxy).
Issue 1 (primary): cross-node routing returns HTTP 404; peer model inventory does not update
- The two nodes trust each other, and each node's workload history shows the other's workloads.
- Requests the Nano makes to itself for qwen2.5:0.5b complete.
- Requests from the AGX for that model, routed to the Nano, fail with "upstream returned HTTP 404". The AGX's model inventory lists only its own llama3.2:1b.
- Reproduced with the TUIs started normally over SSH, after the Nano's nvpair was restarted, and after the Nano's Ollama service was restarted. The Nano's own proxy lists qwen2.5:0.5b.
- Not related to any terminal resize: it has happened with TUIs that were never resized.
Evidence:
- Nano workloads-history.json: IDs 7 and 14 (scheduledOn the Nano's node UUID, originatedFrom the AGX's) failed with "upstream returned HTTP 404". ID 2, originated and scheduled on the Nano, completed.
- Nano Ollama journal: no POST entries during the failing windows (about 19:04 and 19:12 CDT on October 10, 2026). The only POST in that period is a completed local request at 19:13.
- Node UUIDs: AGX e1cecfcd-a32e-4f3c-9b61-251ba2cbd3d9, Nano 16870ce7-8ada-4d49-a26b-5c15ab0b50bd.
Issue 2 (secondary, unconfirmed): nvpair TUI panic on 2026-10-10
- Running nvpair on the Nano crashed with: "runtime error: slice bounds out of range [2:1]" in viewport.Model.visibleLines (bubbles v1.0.0), reached from nvpair-tui/ui.(*clusterView).SetSize (cluster.go:140) via ui.(*Model).resizeViews (model.go:175).
- The call chain is SetSize -> table.SetColumns -> UpdateViewport -> viewport.SetContent -> GotoBottom -> visibleLines. The viewport height in the panic was -1 and the width was 157 columns.
- At the time, the session was in a herdr pane that the user was resizing. This is a possible trigger, not a confirmed one.
- Resize test on 2026-10-11: the user resized herdr panes running nvpair SSH sessions to the Nano and the AGX, narrower and shorter. Neither crashed or showed other visible problems, and the TUI processes started earlier kept running. The trigger has not been reproduced.
- The panic code path (negative height in the viewport) is still a real defect if it can occur, so it's worth reporting as a secondary issue.
Notes on test hygiene:
- Before the failures in Issue 1, the AGX and Nano each had a detached TUI started from a script wrapper. I stopped those with pkill and started PAIR again. The Nano's Ollama service was restarted with systemctl. Issue 1 has been reproduced since then with normally started instances.
- One engine state was seen as "failed" in the Nano's TUI after those manual stops and restarts (cause unknown, not seen since). It is not part of the report's main reproduction.
Steps to reproduce
- Two nodes with nvpair and Ollama running. Invite and accept.
- Pull a model that only one node has (for example, qwen2.5:0.5b on the Nano only).
- Send POST /api/generate for that model to the other node's PAIR port (11434).
- Result: {"error": "model 'qwen2.5:0.5b' not found"}. The workload history shows error "upstream returned HTTP 404" on the Nano. The Nano's Ollama log has no request at that time.
Expected behavior
Expected:
- A request routed to a peer for a model it has should reach that peer's engine.
- The peer's model inventory should update within a reasonable time after a pull, without restarting nvpair.
- A terminal resize, including to very small sizes, should not panic the TUI.
Actual behavior
Routing fails between nodes
Sanitized logs or screenshots
Confirmations
- I searched existing issues for duplicates.
- This is not a security vulnerability.
- I agree to follow the Code of Conduct.
- Vorherrschende Sprache
- Go
- Sterne
- 1.6k
- Forks
- 266
- Ø Merge
- 3 T. 6 Std.
- Gemergte PRs (30 T.)
- 22
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus NVIDIA/Personal-AI-Router
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
NVIDIA/Personal-AI-Router#165 ·
Maintainer antworten meist innerhalb von 5 Tagen
-
enhancement
Schwierigkeit 4/5 Über eine Woche Anfängerfreundlichkeit 12/100
NVIDIA/Personal-AI-Router#162 ·
Maintainer antworten meist innerhalb von 5 Tagen
-
enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
NVIDIA/Personal-AI-Router#154 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 5 Tagen
-
[Feature]: [Ollama] Alert the user about model pull failuresEvtl. vergeben @ckelseynv hat das vor 4 Tagen übernommen. Offenenhancement
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 56/100
NVIDIA/Personal-AI-Router#152 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 5 Tagen
-
[Bug]: /v1/responses bypasses model-owner filtering in the Ollama proxyEvtl. vergeben @ilaigold hat das vor 5 Tagen übernommen. Offenbug
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 84/100
NVIDIA/Personal-AI-Router#146 ·
Maintainer antworten meist innerhalb von 5 Tagen
Alle Issues in NVIDIA/Personal-AI-Router
Ähnliche Issues
-
TOTP enrollment returns 500 for phone-only users (empty TOTP account name)Evtl. vergeben @emiliosandoval4 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 60/100
Maintainer antworten meist innerhalb von 1 Tag
-
8.9 to 8.10 Helm upgrade guide still says deprecated keys are removed in chart v16 (Camunda 8.11)Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
camunda/camunda-platform-helm#7559 ·
Maintainer antworten meist innerhalb von 1 Tag
-
docs: namespaceRegexes example teaches prefix matching, but regexes are matched as a substringOffentriage/pending-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
external-secrets/external-secrets#7117 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
ENTERPILOT/GoModel#1183 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
createEtcdKV fails on a single transient etcd endpoint sync timeoutEvtl. vergeben @vldmit hat das heute übernommen. Offencontribution
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag