fix(chat): /compress no longer drops feedback on id-less transcript rows (#1419)
This commit is contained in:
1 file changed
+27
-14
@@ -4270,21 +4270,28 @@ class ChatViewModel(
|
|||||||
val sessionId = runtimeSessionId ?: _uiState.value.currentSessionId
|
val sessionId = runtimeSessionId ?: _uiState.value.currentSessionId
|
||||||
|
|
||||||
// 1. Authoritative transcript replacement
|
// 1. Authoritative transcript replacement
|
||||||
|
// Rows without a server id can't be keyed under newest-anchored paging; the mapper would throw and
|
||||||
|
// abort the whole result (feedback included). Fall back to a REST reload for those.
|
||||||
|
var needsReload = false
|
||||||
if (response?.messages != null && sessionId != null) {
|
if (response?.messages != null && sessionId != null) {
|
||||||
val replacementMessages =
|
if (!latestPaging || response.messages.all { it.id != null }) {
|
||||||
withContext(historyDispatcher) {
|
val replacementMessages =
|
||||||
mapServerMessages(
|
withContext(historyDispatcher) {
|
||||||
sessionId = sessionId,
|
mapServerMessages(
|
||||||
messages = response.messages,
|
sessionId = sessionId,
|
||||||
offset = 0,
|
messages = response.messages,
|
||||||
latestPaging = latestPaging,
|
offset = 0,
|
||||||
liveMessages = emptyList(),
|
latestPaging = latestPaging,
|
||||||
activeReplyTarget = ReplyNotificationTracker.getActiveTarget(getApplication()),
|
liveMessages = emptyList(),
|
||||||
mediaUrl = ::gatewayMediaUrl,
|
activeReplyTarget = ReplyNotificationTracker.getActiveTarget(getApplication()),
|
||||||
)
|
mediaUrl = ::gatewayMediaUrl,
|
||||||
}
|
)
|
||||||
_uiState.update { it.copy(messages = replacementMessages) }
|
}
|
||||||
persistHistoryPage(replacementMessages, sessionId)
|
_uiState.update { it.copy(messages = replacementMessages) }
|
||||||
|
persistHistoryPage(replacementMessages, sessionId)
|
||||||
|
} else {
|
||||||
|
needsReload = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Display result summary via addAssistantMessage
|
// 2. Display result summary via addAssistantMessage
|
||||||
@@ -4300,6 +4307,12 @@ class ChatViewModel(
|
|||||||
} else {
|
} else {
|
||||||
response?.message ?: "Context compressed."
|
response?.message ?: "Context compressed."
|
||||||
}
|
}
|
||||||
|
if (needsReload && sessionId != null) {
|
||||||
|
// Mirror handlePrefillResult: rehydrate from REST first, then post the feedback so it survives.
|
||||||
|
withContext(ioDispatcher) { repo.clearMessagesForSession(sessionId) }
|
||||||
|
_uiState.update { it.copy(messages = emptyList()) }
|
||||||
|
loadSessionMessages(sessionId, sessionGeneration)
|
||||||
|
}
|
||||||
addAssistantMessage(feedback)
|
addAssistantMessage(feedback)
|
||||||
|
|
||||||
// 3. Refresh usage & sessions
|
// 3. Refresh usage & sessions
|
||||||
|
|||||||
Reference in new issue
Block a user