Repository navigation
v0.7.0-rc.4 — unsigned macOS arm64 candidate
Personal AI Router 0.7.0-rc.4 — macOS Apple Silicon candidate
Release candidate for the JaredP94 fork. Unsigned and not notarized. Not a production-ready or NVIDIA-signed distribution. It targets macOS arm64 only; Windows, Linux desktop and Intel Mac packages are not included. Privileged-helper registration and automatic firewall setup stay unavailable in unsigned builds: instead of prompting, PAIR shows Firewall setup: manual guidance under Settings → Service.
It is the fork's Latest release, so 0.7.0-rc.3 installs are offered it through the in-app updater, and scripts/install-mac.sh installs it by default.
Upgrade notes
- Desktop 0.7.0-rc.4 ships service product 2.4.0. The relay envelope protocol stays v2 and no JSON-RPC method was removed; the new broker method and the new node-record field are additive, so upgrade desktop/TUI and services together.
- Mixed clusters: a node running an older workload-manager does not carry the new engine-native view from remote nodes, so that view is complete only once every member is upgraded. The originating node is unaffected.
- Per-node inference totals cover the period since the broker started. The broker's accumulator is in memory, so the per-node figures reset when the broker restarts; per-job figures persist with the workload store.
Changes since 0.7.0-rc.3
The engine's own view
- Each node's engine now reports its own counters — request and token totals, prefill and generation speeds, cache efficiency and loaded models — and PAIR carries them across the cluster and shows them on the node card. They are the engine's numbers, so they include traffic PAIR did not route; they are shown as a separate, labelled "engine self-report" and are never merged with PAIR's own totals.
- The engine's API key cannot leak: PAIR defines its own response type and reads the engine's payload field by field, so the key the engine returns is dropped by construction.
Live in-flight numbers
- A running job's card now shows what is happening now: elapsed time, time to first byte, how much has streamed, and — for oMLX — the engine's own token count, decode rate, prefill progress and queue position.
0.7.0-rc.3showed nothing until a job ended, so a job stuck in prefill looked identical to one halfway through decoding. - No estimates. The live card shows what PAIR measures exactly and what the engine measures exactly. A chunk count is never presented as a token count, and no rate is derived from one. Anything nobody reported reads "not reported", never
0. - The live frames travel cluster-wide over the existing workload relay, rate-limited at the source, and each broker keys the live view by the origin node, the engine and the job id — because every proxy counts its own requests from one.
Housekeeping
- The macOS installer no longer names a specific candidate version, and the release-profiling harness derives its candidate path from
desktop/package.jsoninstead of repeating the version.
Full list: CHANGELOG.
Validation
Built from 65864b610cdcd23b061016ff754dd080f1f77c57 on a clean tree.
make check,npm run dead-code:checkandmake testpass on the branch head: 625 desktop unit tests and every Go module, including the newnvpair-shared/inferencemetricsandnvpair-ui-broker/nodemetricspackages.go test -raceis green in the broker, the workload-manager and the three inference proxies.- The change was reviewed three times before merge: a per-task review for each implementation task, a whole-branch review that returned four findings (all fixed), and an independent final review of the branch's last fix wave.
- Live-engine checks against oMLX 0.7.2 (the version installed on the build machine):
- oMLX emits its streaming
usageblock only when the request carriesstream_options.include_usage, so the proxy's injection is load-bearing. - oMLX's
/admin/api/statspayload matches what PAIR reads, and PAIR's parser read the live payload correctly (requests, token totals, cached tokens, cache efficiency, the loaded model, no error). - oMLX's
/admin/api/activitypayload is shaped{"active_models": {"models": [...]}}, which PAIR's parser did not understand — it read zero rows, so the live card would have shown no engine numbers with no error anywhere. Found by the live test and fixed, with a regression test. - Not yet verified end to end through PAIR itself: a live request through this build's proxy, the activity rows pairing with PAIR's job ids, and a live frame reaching a remote member's clients. The parsers are deliberately forgiving, so a shape mismatch shows as an empty view rather than an error.
- oMLX emits its streaming
- Package checks:
- The app reports 0.7.0-rc.4, and the service binaries report their
services/versions.jsonversions and are arm64-only. LICENSE,LICENSE.electron.txt,LICENSES.chromium.htmlandTHIRD_PARTY_NOTICES.mdare present in the packaged app.- The DMG checksum is valid, and the app inside the DMG and the ZIP is identical to the built bundle (content-manifest SHA-256
0d57d973a2b6af6ea915ca0c5165e4128b3e616cf2c09c36db19adb12a163c43). NVPAIR-Setup-0.7.0-rc.4-arm64.dmgSHA-25633678c73d063b929a05c940e2aac7994f734112b9a6d05843a131c37f41b597c;NVPAIR-Setup-0.7.0-rc.4-arm64.zipSHA-256340147a17755431ab7845c818dc925cee84611735b434bfc9aaff8c5a034eab3;service-binaries-mac-arm64.zipSHA-25658860cd216d1e677f169d2dd2fbb00184836661041716506cd97415c866b3085.- The update feed points at this fork. Code signing is ad-hoc only.
- The app reports 0.7.0-rc.4, and the service binaries report their
- The cross-process suite in
services/testsfails 15 tests on the build machine because a running PAIR application holds ports 11434/1234/14320/14322. The identical failure set reproduces at the base commit, so it is an environment condition, not a regression. - No release-candidate profile was recorded for this build. The rc.3 profile in Performance and energy remains the most recent measurement; no percentage improvement is claimed.
Assets
NVPAIR-Setup-0.7.0-rc.4-arm64.dmg and .zip with their blockmaps, service-binaries-mac-arm64.zip (the packaged service binaries), SHA256SUMS, and the macOS update feeds latest-mac.yml / latest-arm64-mac.yml.
Not validated
- The per-job phase durations need a newer oMLX, or a non-streaming request. oMLX 0.7.2's streaming
usagechunk carries the token counts but notprompt_eval_duration,generation_durationortime_to_first_token; its non-streaming response does. Against 0.7.2, a streaming job therefore shows its token counts and reads "not reported" for the phase durations — the honest, designed behaviour, not a defect. - The live view for a job served on a peer is carried end to end, but it has not been seen reaching a remote member's clients.
- The engine-native view has not been seen on a node card driven by a live engine.
- Windows, Linux desktop and Intel Mac runtime; Windows worker-hang recovery and GPU readings.
- Fresh install on a new machine, uninstall, purge, and corrupt- or interrupted-download handling of this build.
- Upgrade from rc.3 on a live machine, and the profiling of this build.
- Apple trust: no Developer ID signing or notarization; Gatekeeper may block first launch.