onDeviceLlmModule
Android on-device LLM tier, detection-ordered (ai-engineering.md §7): ML Kit Gemini Nano (AICore devices) → MediaPipe Gemma (broad coverage, downloaded on demand) → (falls through to the heuristic tier upstream). ModelManager is bound for the settings screen.
Per-platform Koin bindings for the on-device LLM tier. commonMain's aiModule includes this; the actual decides which OnDeviceLlm gets bound (ML Kit / Foundation Models / unavailable).
iOS on-device LLM tier, detection-ordered (ai-engineering.md §7): Apple Foundation Models → MediaPipe Gemma → (falls through to the heuristic tier upstream).
Both native backends are Swift/ObjC-only (Foundation Models is Swift; MediaPipe ships an iOS pod), so their real implementations must be bridged from the iosApp Swift layer and injected here. Until then the composite holds the Foundation stub (reports unavailable), so the heuristic tier answers. ModelManager is NoModelManager on iOS (the OS/pod own model provisioning, not the app).
Desktop/JVM has no on-device model — the heuristic tier always answers.