LLM: интерфейс + две реализации (Qwen удалённо / Gemma 4 E2B локально) + переключатель

- LlmClient интерфейс; RemoteLlmClient (OkHttp, llm.binom.pw) и LocalLlmClient (LiteRT-LM, Gemma 4 E2B)
- LocalLlm: Gemma4E2B (SHA-256, GPU/CPU-бэкенды), buildLocalLlmPrompt (SYSTEM→systemInstruction, TOOL→user), GemmaModelDownloader (стриминг, прогресс, фолбэк источников), спекулятивное декодирование
- LlmPrefs (персистентность выбора), PhoneApp: фабрика по llmChoice, пересоздание ассистента, скачивание/отмена
- UI: GlassesInfoScreen — выбор сервер/локальная + прогресс; ChatScreen — индикатор активной модели
- Тесты: +12 (LlmLocalTest) — phone 154 зелёных
This commit is contained in:
2026-08-23 02:52:22 +03:00
parent 2d6ca1e097
commit 7527cf8848
15 changed files with 1192 additions and 19 deletions
+6 -1
View File
@@ -1,7 +1,7 @@
[versions]
kotlin = "2.4.10"
kotlinx-serialization = "1.8.1"
kotlinx-coroutines = "1.10.2"
kotlinx-coroutines = "1.11.0"
ktor = "3.3.0"
android = "8.9.2"
compose-plugin = "1.8.0"
@@ -10,6 +10,7 @@ androidx-activity-compose = "1.10.1"
exoplayer = "2.17.1"
media3 = "1.6.1"
koog = "1.1.1"
litertlm-android = "0.14.0"
[libraries]
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
@@ -23,6 +24,10 @@ androidx-compose-bom = { module = "androidx.compose:compose-bom", version.ref =
exoplayer = { module = "com.google.android.exoplayer:exoplayer", version.ref = "exoplayer" }
media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" }
# LiteRT LM (Google) — локальный LLM (Gemma 4 E2B, .litertlm) на телефоне.
# litertlm-android 0.14.0 нужен на kotlinx-coroutines 1.11.0 (shared версия поднята)
litertlm-android = { module = "com.google.ai.edge.litertlm:litertlm-android", version.ref = "litertlm-android" }
# Koog (JetBrains) — LLM-клиент (OpenAI-совместимый)
# Модели/типы (OpenAIModels, LLModel) входят в prompt-executor-openai-client;
# отдельный артефакт prompt-executor-openai-model существует только до 0.4.1.