onDeviceLlmModule

actual fun onDeviceLlmModule(): Module

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.

expect fun onDeviceLlmModule(): Module

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).

actual fun onDeviceLlmModule(): Module

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).

actual fun onDeviceLlmModule(): Module

Desktop/JVM has no on-device model — the heuristic tier always answers.