PetPaw is a macOS desktop pet that reacts to gestures and conversation. Its interesting Jev integration is narrow: a decision client picks a pose and animation from the imported character’s allowed choices, using its personality and recent interactions. Separate realtime models handle spoken conversation; Jev is not the voice chatbot.
How the decision is bounded
JevClient.swiftconstructs a typed choice question for poses and, on gestures, a second one for animations. The state includes up to ten recent interactions. Code rejects an unknown pose and uses the character’s default pose when the selected choice has low probability.- The user can select hosted Jev via the AI Gateway or an optional local Open-Jev 2B checkpoint. The local
OpenJevRuntime.swiftactually scores each candidate with a Qwen-based backbone, LoRA adapter, classification head and calibration temperature; it does not fake a local mode with a cloud call. - The README says local weights download separately (about 4.6 GB, with 16 GB RAM recommended); local mode does not silently fall back to cloud. Voice and web search still require the Gateway. The live voice and cloud pose paths can send pet personality and recent interaction context to that provider.
What remains unproven
- The project ships optional parity fixtures for the native scorer, with a 0.001 probability tolerance against a pinned PyTorch reference. According to its README, CI skips the real-weight parity test unless the model files are supplied; I did not run it or a Mac build.
- Correctly returning an allowed pose does not establish that the pet’s reaction feels appropriate. The repository documents input handling and tests, not a blinded user study comparing Jev, Open-Jev and a rules baseline.
- The landing page says macOS 14+ while the repository README currently specifies macOS 27+ and Apple Silicon for the app build. Check the release requirements before installing.
The reusable architecture is a shared decision interface with a local/cloud switch and an explicit fallback to a safe pose, while the generative voice model stays separate. Repository implementation inspected; app, parity suite and paid model calls not run.