diff --git a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/agent/Assistant.kt b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/agent/Assistant.kt index 6988b54..103b6bd 100644 --- a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/agent/Assistant.kt +++ b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/agent/Assistant.kt @@ -39,6 +39,12 @@ class Assistant( /** Обработать фразу в КОНКРЕТНОЙ сессии [sessionId] (переключение сессий). */ suspend fun processInSession(sessionId: Long, text: String): String { chatDao.addMessage(sessionId, role = ChatRole.USER, content = text) + // Сессия безымянная (создана кнопкой «новая сессия») — имя из первого сообщения. + val s = chatDao.getSession(sessionId) + if (s != null && s.title.isBlank()) { + val t = text.trim().take(30) + chatDao.renameSession(sessionId, if (t.isEmpty()) "беседка" else t) + } return processInSession(sessionId) } diff --git a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/ui/ChatScreen.kt b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/ui/ChatScreen.kt index 0cf8547..9714d59 100644 --- a/app-phone/src/main/kotlin/pw/binom/viewmate/phone/ui/ChatScreen.kt +++ b/app-phone/src/main/kotlin/pw/binom/viewmate/phone/ui/ChatScreen.kt @@ -90,7 +90,8 @@ fun ChatScreen() { } // Периодическая перезагрузка сообщений из БД (ответ ассистента приходит - // асинхронно — лента должна подхватывать его без ручного обновления). + // асинхронно — лента должна подхватывать его без ручного обновления) + // + списка сессий (автоименование: имя проставляется при первом сообщении). LaunchedEffect(activeId) { while (true) { delay(2_000) @@ -99,6 +100,7 @@ fun ChatScreen() { val fresh = withContext(Dispatchers.IO) { app.chatDao.messagesForSession(id).map { it.role to it.content } } if (fresh != messages) messages = fresh } + withContext(Dispatchers.IO) { app.chatDao.listSessions() }.let { s -> if (s != sessions) sessions = s } } }