Skip to content

LumiRead v2.0.0

Choose a tag to compare

@LagrangeNSS LagrangeNSS released this 31 May 09:49
· 11 commits to main since this release

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 :core agent 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_word ships 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 childrenE2B + separate OCR (faster, more natural back-and-forth).
  • Older childrenE4B + 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.apk289 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.