feat: load message history when switching or resuming a session
This commit is contained in:
1 parent
c1d0956a1d
commit
21a020c87e
1 file changed
+37
@@ -3,6 +3,7 @@ package com.m57.hermescontrol.ui.chat
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.m57.hermescontrol.data.local.AuthManager
|
||||
import com.m57.hermescontrol.data.remote.ApiClient
|
||||
import com.m57.hermescontrol.data.ws.HermesWsClient
|
||||
import com.m57.hermescontrol.data.ws.WsEvent
|
||||
import com.m57.hermescontrol.data.ws.WsMethods
|
||||
@@ -13,6 +14,7 @@ import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
data class ChatUiState(
|
||||
val messages: List<ChatMessage> = emptyList(),
|
||||
@@ -372,6 +374,41 @@ class ChatViewModel : ViewModel() {
|
||||
)
|
||||
pendingRequests[requestId] = WsMethods.SESSION_RESUME
|
||||
}
|
||||
loadSessionMessages(sessionId)
|
||||
}
|
||||
|
||||
private fun loadSessionMessages(sessionId: String) {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
val response =
|
||||
withContext(Dispatchers.IO) {
|
||||
ApiClient.hermesApi.getSessionMessages(sessionId)
|
||||
}
|
||||
if (response.isSuccessful) {
|
||||
val messagesList = response.body()?.messages.orEmpty()
|
||||
val chatMessages =
|
||||
messagesList.map { msg ->
|
||||
val role =
|
||||
when (msg.role?.lowercase()) {
|
||||
"user" -> MessageRole.USER
|
||||
"system" -> MessageRole.SYSTEM
|
||||
"tool" -> MessageRole.TOOL
|
||||
else -> MessageRole.ASSISTANT
|
||||
}
|
||||
ChatMessage(
|
||||
role = role,
|
||||
content = msg.content.orEmpty(),
|
||||
isStreaming = false,
|
||||
)
|
||||
}
|
||||
_uiState.update { it.copy(messages = chatMessages) }
|
||||
} else {
|
||||
_uiState.update { it.copy(errorMessage = "Failed to load messages: HTTP ${response.code()}") }
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
_uiState.update { it.copy(errorMessage = "Failed to load messages: ${e.message}") }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleSessionPicker() {
|
||||
|
||||
Reference in new issue
Block a user