Приложение добавляет OpenAI-совместимый HTTP-сервер и KMP-обёртку LiteRT
This commit is contained in:
@@ -43,6 +43,7 @@ import pw.binom.viewmate.phone.agent.GemmaModelDownloader
|
||||
import pw.binom.viewmate.phone.agent.JellyfinMediaSource
|
||||
import pw.binom.viewmate.phone.agent.LocalLlmClient
|
||||
import pw.binom.viewmate.phone.agent.LocalLlmModelState
|
||||
import pw.binom.viewmate.phone.agent.LlmClient
|
||||
import pw.binom.viewmate.phone.agent.LlmModelChoice
|
||||
import pw.binom.viewmate.phone.agent.LlmPrefs
|
||||
import pw.binom.viewmate.phone.agent.MEDIA_TOOLSET
|
||||
@@ -127,6 +128,28 @@ class PhoneApp : Application() {
|
||||
/** Текущий локальный LLM-клиент (для DebugHttpServer / статуса). */
|
||||
fun localLlmClient(): LocalLlmClient? = localLlm
|
||||
|
||||
/**
|
||||
* LLM-клиент по текущему выбору [llmChoice] для OpenAI-HTTP-сервера
|
||||
* ([OpenAiHttpServer]) — без тул-цикла ассистента (клиент OpenAI API сам
|
||||
* управляет контекстом). Локальный клиент переиспользует [localLlm]
|
||||
* (движок LiteRT один на процесс). null — серверный без ключа или локальная
|
||||
* модель ещё не скачана.
|
||||
*/
|
||||
fun openAiLlm(): LlmClient? = synchronized(assistantLock) {
|
||||
when (_llmChoice.value) {
|
||||
LlmModelChoice.REMOTE ->
|
||||
if (BuildConfig.LLM_API_KEY.isBlank()) null
|
||||
else RemoteLlmClient(apiKey = BuildConfig.LLM_API_KEY, model = BuildConfig.LLM_MODEL)
|
||||
|
||||
LlmModelChoice.LOCAL ->
|
||||
if (!localModelFile().isFile) null
|
||||
else localLlm ?: LocalLlmClient(
|
||||
modelFile = localModelFile(),
|
||||
cacheDir = File(cacheDir, "litertlm"),
|
||||
).also { localLlm = it }
|
||||
}
|
||||
}
|
||||
|
||||
/** Выбор модели LLM (персистится, [pw.binom.viewmate.phone.agent.LlmPrefs]). */
|
||||
// lazy: конструктор Application выполняется ДО attachBaseContext — контекст (и
|
||||
// getSharedPreferences/getExternalFilesDir) доступен только после; ленивость —
|
||||
@@ -442,6 +465,7 @@ class PhoneApp : Application() {
|
||||
server.start()
|
||||
log("server", "WS-сервер запущен на ${PhoneConfig.SERVER_PORT}")
|
||||
DebugHttpServer.start(this)
|
||||
OpenAiHttpServer.start(this)
|
||||
nsd.publish()
|
||||
server.hub.sttFactory = { ensureStt() }
|
||||
server.hub.onStopFullText = { phrase -> scope.launch { assistantChannel.send(phrase) } }
|
||||
|
||||
Reference in New Issue
Block a user