Repository navigation
v0.7.0-rc.3 — unsigned macOS arm64 candidate
Personal AI Router 0.7.0-rc.3 — 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.2 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.3 ships service product 2.3.0. The relay envelope protocol stays v2 and no JSON-RPC method was removed; the new broker methods and the new workload fields are additive, so upgrade desktop/TUI and services together.
- Mixed clusters: a member running an older workload-manager drops the new measurement from remote jobs, so its per-node totals are complete only once every member is upgraded. The originating node is unaffected. Desktop
0.7.0-rc.2and services2.2.0keep working against each other. - 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.2
Inference metrics
- Prefill and decode metrics per job and per node. A job card now shows what the request cost: the prefill and decode token counts, how long each phase took, the time to first token, and the decode rate. A node card shows what that node has served — its phase rates over a rolling minute, its mean time to first token and the tokens it served — with a per-model breakdown behind a disclosure.
- The numbers are the engine's own. PAIR reads the prefill and decode durations that oMLX and Ollama report, and the time to first token and cached-token count that only oMLX reports. Anything an engine does not report is shown as "not reported" rather than as a zero: LM Studio reports no phase split, and Ollama reports no time to first token. No phase is ever estimated.
- The measurement travels with the workload lifecycle, so a job's figures are visible on every cluster member. Each broker aggregates the jobs it sees per node and per model, and the counts a job once even when the cluster re-delivers its terminal event.
- The oMLX proxy now asks oMLX for the usage block on streaming requests, so oMLX's own prefill and decode numbers reach the job card instead of being missing.
- New broker methods
metrics:get-node-metrics,metrics:subscribeandmetrics:unsubscribe, plus a coalescedmetrics:node-metricspush carrying the full per-node snapshot. The desktop re-reads the snapshot every five seconds, because the push is measurement-driven and a node's rate decays as its window empties.
Release 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 c4da5fc61d7f437a271e6b0b1e10b1d3d6b3cddc on a clean tree.
make check(SPDX headers, build-script verify, lint, typecheck, service contracts, desktop unit tests),npm run dead-code:check, andmake testpass on the branch head: 576 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 installer's and the profiling harness's own Python suites pass (16 and 59 tests).- The cross-process suite in
services/testsfails 14 tests on the build machine because a running PAIR application holds ports 11434/1234/14320. The identical failure set reproduces at the merge base, so it is an environment condition, not a regression. - The change was reviewed three times before merge: a per-task review for each of the ten implementation tasks, a whole-branch review that returned four findings (all fixed), and a final pre-merge review that returned two more (both fixed).
- Package checks:
- The app reports 0.7.0-rc.3, and the 14 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
355167ab29a1ea78fb5dfacbd1e8d1bae07cf6d727e010b260135dd7a4e1c11b). NVPAIR-Setup-0.7.0-rc.3-arm64.dmgSHA-256de5249c49574a9c67ffd9111a9ea3f1a1728ee0003d5fa82cd32a81d050e6358;NVPAIR-Setup-0.7.0-rc.3-arm64.zipSHA-256ec5dd48fb0a1b57d66bec85d98864015fd3f61021106a6c8fbe65ad5a55f9b56;service-binaries-mac-arm64.zipSHA-256448ffc48e0e1cdf3c9398eff5726f7ca66bfb00fd937e2a1b59baa42f5dacc5b.- The update feed points at this fork. Code signing is ad-hoc only.
- The app reports 0.7.0-rc.3, and the 14 service binaries report their
- No release-candidate profile was recorded for this build. The rc.2 profile in Performance and energy compares rc.2 against rc.1 and remains the most recent measurement; no percentage improvement is claimed for rc.3.
Assets
NVPAIR-Setup-0.7.0-rc.3-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 inference metrics have not been checked against a live engine. The unit tests use a fixture that matches the documented field names, not a running engine. Before relying on them: confirm that a live oMLX emits the usage block (with
prompt_eval_duration,generation_duration,time_to_first_tokenandtotal_time) once the proxy sendsstream_options.include_usage, and that the values match/admin/api/statsdeltas; confirm that Ollama's nanosecond durations convert correctly; and confirm whether LM Studio's streaming responses carry ausageblock at all. If it does not, LM Studio jobs show token counts on the native route and nothing on the OpenAI-compatible one. - A two-node cluster run — a request served by node B showing the measurement and the per-node total on both members — has not been performed against a live cluster, nor has the mixed-version case been exercised.
- 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.2 on a live machine, and the profiling of this build.
- Apple trust: no Developer ID signing or notarization; Gatekeeper may block first launch.