Hypothesis
“A small on-device model can still be useful when the harness owns routing, tool execution, and task lifecycle instead of asking the model to do every operation itself.”
Test Setup & Hardware Specification
Methodology & Execution
Trace a request from ChatFragment through AgentRunner and ModelSupervisor, route allowed operations through ToolRegistry, record runtime events in Console, then unload the model after completion.
Observations
The repository separates language understanding from operations that need deterministic behavior. Math, time, weather, web, mail, and location are exposed as explicit tools, while Console records model load, tool success, memory restoration, and task completion events.
Known Limitations
The first setup needs network access, some tools depend on network or device permissions, and the repository still needs a real device demo recording. The project is an active student project, not a general-purpose assistant benchmark.
Reproduction Script
Execute this command in your local environment using the Cheva test harness:
Full Research Report
EV Terminal — A Local AI Agent on Android
The project
EV Terminal is a small Android agent built around a deliberately narrow split of responsibility:
- the model handles language understanding and synthesis;
- the harness decides when a tool is needed;
- deterministic tools perform operations that should be correct;
- the runtime records what happened and releases model resources after the task.
The app runs Qwen3.5-0.8B locally through llama.cpp. It does not require an Ollama server, a permanent cloud connection, or a model that stays loaded in memory all the time.
Why it is interesting
The interesting experiment is not “how smart is a 0.8B model?” It is whether a small model becomes useful when the surrounding system gives it a clear job.
The request path is:
snippet.txttext1ChatFragment2 -> AgentRunner3 -> ModelSupervisor4 -> Qwen3.5-0.8B / llama.cpp5 -> ToolRegistry6 -> math, time, weather, web, mail, location
For a tool task, EV routes the request, executes the allowed tool, feeds the result back to the model, and records the lifecycle in Console. This keeps model output away from operations that benefit from deterministic code.
The lifecycle
The model is downloaded separately from the APK. On first setup, the app resumes and verifies a roughly 563 MB model package before storing it in private app storage.
During a task, the runtime can:
- load the local model;
- understand the request and choose an allowed route;
- run a deterministic tool when one is required;
- synthesize the result for Chat;
- unload the model and restore memory for the next task.
This is a useful pattern for local agents: model intelligence is treated as a task-scoped resource, not a permanently running service.
Tools in the repository
- Math: expressions, derivatives, antiderivatives, definite integrals, and limits
- Time: date, time, and timezone information
- Weather: network-backed weather lookup
- Web: network-backed search
- Mail: mailbox access
- Location: device location access
The calculus path also renders successful results as LaTeX locally through KaTeX.
A real test request
The repository gives a concrete end-to-end example:
snippet.txttext1Chat: differentiate x^2 sin(x)2Console: MODEL LOAD -> MATH SUCCESS -> MODEL UNLOAD3Chat: 2x sin(x) + x^2 cos(x)4Console: RAM RESTORED -> TASK COMPLETE
The important observation is the boundary. The model can translate a natural request into a tool operation, but the calculus engine owns the derivative and the runtime makes the lifecycle visible.
Reproduce the project checks
From the repository root:
snippet.shbash1JAVA_HOME=/usr/lib/jvm/java-17-temurin-jdk ./gradlew testDebugUnitTest assembleDebug --no-daemon
The debug APK is generated under app/build/outputs/apk/debug/.
Limits of this note
The first model download still needs network access. Weather and web depend on network availability, while mail and location depend on device access. The repository also calls out the next missing proof point: a real 15–20 second device recording showing one complete local-agent task.
This is a project note, not a performance ranking. The useful question is whether the architecture makes local AI more practical for the work you want to do.
Related Experiments
TamaBench — Small Models, Long Horizons
A lightweight benchmark that puts a small or local model in a persistent virtual-pet sandbox. The agent must plan across three simulated days, use structured tools, manage money and supplies, and recover when delayed consequences go wrong.
Local LLM Inference Under Limited VRAM — MoE vs Dense vs RAM Offloading
Exploratory study of Mixture-of-Experts, dense models, and RAM offloading on an NVIDIA RTX 3060 12 GB + 16 GB DDR4. Tests whether sparse MoE can use system RAM as a capacity tier: Gemma 4 26B-A4B stays interactive (12–19 tok/s at 16K), while the dense Mistral Small 3.1 24B collapses to 3.35 tok/s and Qwen-AgentWorld 35B-A3B reaches double digits only with high latency and memory pressure.
