Чат: автоименование сессии из первого сообщения
- Assistant.processInSession: безымянная сессия получает имя из первого сообщения (обреза 30 симв.), «беседка» — пустое - ChatScreen: периодическая перезагрузка подхватывает и список сессий — шапка обновляет название без ручного переключения
This commit is contained in:
@@ -39,6 +39,12 @@ class Assistant(
|
|||||||
/** Обработать фразу в КОНКРЕТНОЙ сессии [sessionId] (переключение сессий). */
|
/** Обработать фразу в КОНКРЕТНОЙ сессии [sessionId] (переключение сессий). */
|
||||||
suspend fun processInSession(sessionId: Long, text: String): String {
|
suspend fun processInSession(sessionId: Long, text: String): String {
|
||||||
chatDao.addMessage(sessionId, role = ChatRole.USER, content = text)
|
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)
|
return processInSession(sessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ fun ChatScreen() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Периодическая перезагрузка сообщений из БД (ответ ассистента приходит
|
// Периодическая перезагрузка сообщений из БД (ответ ассистента приходит
|
||||||
// асинхронно — лента должна подхватывать его без ручного обновления).
|
// асинхронно — лента должна подхватывать его без ручного обновления)
|
||||||
|
// + списка сессий (автоименование: имя проставляется при первом сообщении).
|
||||||
LaunchedEffect(activeId) {
|
LaunchedEffect(activeId) {
|
||||||
while (true) {
|
while (true) {
|
||||||
delay(2_000)
|
delay(2_000)
|
||||||
@@ -99,6 +100,7 @@ fun ChatScreen() {
|
|||||||
val fresh = withContext(Dispatchers.IO) { app.chatDao.messagesForSession(id).map { it.role to it.content } }
|
val fresh = withContext(Dispatchers.IO) { app.chatDao.messagesForSession(id).map { it.role to it.content } }
|
||||||
if (fresh != messages) messages = fresh
|
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