Skip to content

v0.7.0-rc.4 — unsigned macOS arm64 candidate

Choose a tag to compare

@JaredP94 JaredP94 released this 22 Oct 07:59
· 148 commits to main since this release

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.3 showed 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.json instead of repeating the version.

Full list: CHANGELOG.

Validation

Built from 65864b610cdcd23b061016ff754dd080f1f77c57 on a clean tree.

  • make check, npm run dead-code:check and make test pass on the branch head: 625 desktop unit tests and every Go module, including the new nvpair-shared/inferencemetrics and nvpair-ui-broker/nodemetrics packages. go test -race is 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 usage block only when the request carries stream_options.include_usage, so the proxy's injection is load-bearing.
    • oMLX's /admin/api/stats payload 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/activity payload 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.
  • Package checks:
    • The app reports 0.7.0-rc.4, and the service binaries report their services/versions.json versions and are arm64-only.
    • LICENSE, LICENSE.electron.txt, LICENSES.chromium.html and THIRD_PARTY_NOTICES.md are 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.dmg SHA-256 33678c73d063b929a05c940e2aac7994f734112b9a6d05843a131c37f41b597c; NVPAIR-Setup-0.7.0-rc.4-arm64.zip SHA-256 340147a17755431ab7845c818dc925cee84611735b434bfc9aaff8c5a034eab3; service-binaries-mac-arm64.zip SHA-256 58860cd216d1e677f169d2dd2fbb00184836661041716506cd97415c866b3085.
    • The update feed points at this fork. Code signing is ad-hoc only.
  • The cross-process suite in services/tests fails 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 usage chunk carries the token counts but not prompt_eval_duration, generation_duration or time_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.