LumiRead v2.0.0
LumiRead v2.0.0 — Native Gemma 4 Function Calling
This release re-architects the backend around Gemma 4's native function calling while
keeping the UI unchanged. The model now natively calls small on-device tools (via LiteRT-LM's
tool API) and answers from their results, with the previous two-stage text pipeline kept as a
graceful-degradation fallback.
Highlights
- Native function calling (manual LiteRT-LM tool mode): three offline tools
classify_scene/lookup_word/read_aloud, triggered by Gemma 4's native tool tokens,
running real on-device Kotlin — not string parsing. - Modular
:coreagent layer:SocraticEngine+FunctionCallingEngine+
TwoStagePipelineEngine+AgentOrchestrator. UI untouched. - Model policy: E4B tools always-on / E2B only when the scene is complex; multimodal turns
use the two-stage path. - Hidden warm-up generation; per-turn served-by / latency metrics.
Honest notes (please read)
- On-device function calling is not yet fully reliable (a structured eval measured Gemma 4
E2B tool-call pass rate ~71%; adding a 4th tool degraded it, so the set is locked at 3).
Any tool-call failure falls back to the two-stage text pipeline, so the app never crashes —
the reliable baseline is guaranteed by the fallback, not by the function calling itself. - Performance: usable latency depends on the GPU backend (~52 tok/s officially). On our test
phone (a Snapdragon device) the GPU backend did not initialize for either model and fell back
to CPU, so it was slow — about 16 s (E2B) / 46 s (E4B) for a full reply. GPU-capable
devices are much faster. - For demos we recommend E2B + separate OCR, or a device with a working GPU backend.
lookup_wordships without an offline dictionary in this release (returns an age-appropriate
fallback); an offline dictionary is on the roadmap.
Model choice (in app Settings)
- Younger children → E2B + separate OCR (faster, more natural back-and-forth).
- Older children → E4B + separate OCR.
- All-in-one multimodal mode is experimental and not very stable — choose with caution.
Getting the model
The APK does not contain the model (Apache-2.0 Gemma 4 weights are ~2.59 GB for E2B).
On first launch the app opens the HuggingFace model page; accept the Gemma license, download,
and import the file via the app's settings. The MeloTTS voice model is downloaded similarly.
APK
app-release.apk— 289 MB (302,017,588 bytes)- SHA-256:
c8714f6eef4fa491776af969766a4288b65c29dac37e5e1ef0dfecb34ceee57f - Debug-signed (for evaluation only) — no production keystore is committed to the repo.
- Contains no model weights.