[1.1.0] - 2026-07-16
Added
/ai <prompt>: offline text generation. A language model runs on the device
and the reply is posted to the conversation the command was typed in, under
your nickname, prefixed with[ai]and quoting the prompt. Only successful
answers are transmitted; the thinking indicator, failures and usage errors
stay on the device. The prompt never leaves your phone, but the answer is
sent to your peers, so do not type anything into/aiyou would not type
into the chat itself (#8).- Message range: a settings slider limiting how many hops (1 to 8, default 8,
the previous fixed reach) messages this device originates travel through the
mesh. Relaying for other peers is unaffected. A local warning is shown when
a private message is sent to a peer the mesh graph places beyond the
configured range (#9). - Optional "reduce background activity" setting, off by default, that slows
background presence to 12 to 18 minutes for maximum battery savings, at the
cost of dropping out of geohash lists until the app is opened (#10).
Changed
- Reduced idle background battery usage: the mesh notification is event driven
instead of refreshed every 5 seconds, RSSI polling backs off when no peers
are connected, and presence heartbeats slow down while backgrounded. Idle
wakeups drop from roughly 1620 to 87 per hour with default settings (#10). - The arm64 APK grows about 26 MB from the bundled MediaPipe inference runtime,
whether or not a model is installed (#8).
Setting up /ai: no model ships with the app. Download one MediaPipe .task bundle (recommended: Qwen2.5-0.5B-Instruct, 521 MB, Apache-2.0) and push it to the device renamed to model.task:
adb push Qwen2.5-0.5B-Instruct_multi-prefill-seq_q8_ekv1280.task \
/sdcard/Android/data/com.bluewhale.android/files/models/model.task
.task bundles are not GGUF; files for Ollama or llama.cpp will not load. Until a model is installed, /ai replies with the path where one belongs. Larger models answer better but may be killed by the OS on mid-range hardware; see docs/offline_ai.md.
Verify your download: check the APK SHA-256 hashes against SHA256SUMS, which is PGP-signed in SHA256SUMS.asc (key 2D230520212A5901, /dev/fd0 <alicexbt@protonmail.com>).
gpg --verify SHA256SUMS.asc SHA256SUMS && sha256sum -c SHA256SUMS