Чат: автоименование сессии из первого сообщения
- Assistant.processInSession: безымянная сессия получает имя из первого сообщения (обреза 30 симв.), «беседка» — пустое - ChatScreen: периодическая перезагрузка подхватывает и список сессий — шапка обновляет название без ручного переключения
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user