How Google AI Edge Gallery Maintains Privacy and Security During On-Device Inference
Google AI Edge Gallery ensures complete user privacy by executing Large Language Models entirely on the device through a sandboxed LiteRT-LM runtime, storing model files in private app directories, and processing all tensor calculations locally without any network connectivity during inference.
The google-ai-edge/gallery repository implements a fully offline architecture for generative AI, guaranteeing that prompts, images, and audio data never leave the local hardware. By leveraging on-device inference, the application eliminates cloud dependencies and prevents external data transmission entirely.
Three-Layer Privacy Architecture for On-Device Inference
The privacy model consists of tightly coupled layers that handle storage, execution, and fallback runtimes.
Secure Model Storage and Isolation
Model files are downloaded once from sources like Hugging Face and stored in the app’s private externalFilesDir. The ModelManagerViewModel class handles this secure download using HttpURLConnection, after which the file resides exclusively in sandboxed storage that other applications cannot access. Once downloaded, the model path is retrieved via model.getPath(context) and passed to the runtime, ensuring the data never leaves the device boundary again.
LiteRT-LM Runtime Execution
The core on-device inference engine is implemented in LlmChatModelHelper.kt. The initialize() method constructs an EngineConfig targeting the LiteRT backend (CPU, GPU, or NPU) and creates a native Engine instance. All tokenization, tensor calculations, and decoding occur inside the LiteRT native library, which contains no network code. As stated in the README, the product is explicitly marketed as "fully offline, private, and lightning‑fast", reflecting that inference happens strictly in-process.
MediaPipe LLM Inference API Fallback
For models requiring alternative execution paths, the app can utilize the MediaPipe LLM Inference API. This pathway creates Engine and Conversation objects that also run completely on-device without exposing network endpoints. Both runtimes provide identical "offline-first" guarantees, ensuring consistent on-device inference regardless of the backend selected.
Architectural Flow of Private Inference
The data pathway demonstrates zero network exposure after initial installation:
- Secure Download:
ModelManagerViewModelfetches the model viaHttpURLConnectionand writes it to the app-privateexternalFilesDir. - Engine Initialization:
LlmChatModelHelper.initialize()loads the model usingEngine(engineConfig).initialize()with the LiteRT backend. - Local Conversation State: The
engine.createConversation()method instantiates aConversationobject that maintains chat history entirely in device memory. - Offline Inference: The
runInference()method (lines 44‑51 and 79‑91 inLlmChatModelHelper.kt) builds aContentsobject and invokesconversation.sendMessageAsync(), which streams results locally without transmitting data to remote servers.
Because the only network interaction is the one-time model download, the app functions completely offline after installation, providing end-to-end privacy for user inputs.
Code Example: Implementing Private On-Device Chat
The following Kotlin implementation demonstrates how to initialize and run inference locally using the LiteRT-LM helper:
// 1. Retrieve model from private repository (already downloaded)
val model = myModelRepository.getModelByName("Gemma-3n-E2B-it-int4")
// 2. Initialize the LiteRT engine – no network required
LlmChatModelHelper.initialize(
context = appContext,
model = model,
supportImage = true,
supportAudio = false,
onDone = { errMsg ->
if (errMsg.isNotEmpty()) Log.e("Demo", errMsg)
},
systemInstruction = null,
tools = emptyList(),
enableConversationConstrainedDecoding = false,
coroutineScope = null
)
// 3. Execute inference – all data remains in-process
LlmChatModelHelper.runInference(
model = model,
input = "What are the health benefits of green tea?",
resultListener = { partial, done, _ ->
if (!done) {
println("Streaming: $partial")
} else {
println("Inference complete")
}
},
cleanUpListener = { /* optional cleanup */ },
onError = { err -> Log.e("Demo", err) },
images = emptyList(),
audioClips = emptyList(),
coroutineScope = null,
extraContext = null
)
This implementation confirms that once the model is downloaded, no additional network calls are performed during on-device inference, keeping all user interactions private.
Summary
- Offline-Only Execution: The
google-ai-edge/galleryrepository processes all LLM operations locally using the LiteRT-LM runtime, ensuring zero data transmission during inference. - Sandboxed Storage:
ModelManagerViewModelstores downloaded models in the app’s privateexternalFilesDir, preventing unauthorized access by other applications. - In-Process Computation: The
LlmChatModelHelper.ktclass handles tokenization and tensor calculations within the native LiteRT library, which lacks network capabilities entirely. - No Telemetry: User prompts, images, and audio are processed through
conversation.sendMessageAsync()without cloud communication, as verified by the source code at lines 44‑51 and 79‑91.
Frequently Asked Questions
Does Google AI Edge Gallery send user data to external servers?
No. According to the source code in LlmChatModelHelper.kt, the sendMessageAsync() method processes all inputs locally within the device’s memory space. The only network activity occurs during the initial model download performed by ModelManagerViewModel, after which the application can operate entirely offline.
Where are the AI models stored on the device?
Model files are stored in the application’s private externalFilesDir directory, accessed via Android’s sandboxed storage APIs. This ensures the downloaded weights are isolated from other apps and remain encrypted at rest according to Android’s security model.
Can the app function without an internet connection?
Yes. After the initial model download is complete, the on-device inference pipeline requires no connectivity. The LiteRT runtime executes completely offline, allowing users to run prompts, analyze images, and process audio without any network access.
What runtime executes the inference operations?
The primary runtime is LiteRT-LM (formerly TensorFlow Lite), loaded through LlmChatModelHelper.initialize(). For compatible models, the app may alternatively use the MediaPipe LLM Inference API. Both runtimes execute natively on the device’s CPU, GPU, or NPU without network dependencies.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →