manageSendSuccess method
void
manageSendSuccess(
- bool isExternalSearch
)
Implementation
void manageSendSuccess(bool isExternalSearch) {
isStreaming.value = assistantsReplying.value > 0;
// Calculate time to complete when streaming finishes
if (!isStreaming.value && _currentMessageStartTime != null) {
final timeToComplete = DateTime.now()
.difference(_currentMessageStartTime!)
.inMilliseconds;
PupauEventService.instance.emitPupauEvent(
PupauEvent(
type: UpdateConversationType.timeToComplete,
payload: {
"assistantId": assistantId,
"assistantType": assistant.value?.type ?? AssistantType.assistant,
"timeToComplete": timeToComplete,
},
),
);
// Track first message complete - check if this is the first user message in the conversation
// (messages.length == 1 means only the initial assistant message exists)
if (_isFirstMessage && messages.length <= 2) {
_isFirstMessage = false;
PupauEventService.instance.emitPupauEvent(
PupauEvent(
type: UpdateConversationType.firstMessageComplete,
payload: {
"assistantId": assistantId,
"assistantType": assistant.value?.type ?? AssistantType.assistant,
"conversationId": conversation.value?.id ?? "",
},
),
);
}
_currentMessageStartTime = null;
_hasReceivedFirstToken = false;
}
for (PupauMessage sseMessage in incomingMessages) {
PupauMessage? assistantMessage = messages.firstWhereOrNull(
(PupauMessage message) =>
message.id == sseMessage.id && message.status != MessageStatus.sent,
);
if (assistantMessage != null) {
assistantMessage.status = MessageStatus.received;
assistantMessage.createdAt = DateTime.now();
assistantMessage.isExternalSearch = isExternalSearch;
assistantMessage.answer = sseMessage.answer;
PupauEventService.instance.emitPupauEvent(
PupauEvent(
type: UpdateConversationType.messageReceived,
payload: {
"assistantId": assistantId,
"assistantType": assistant.value?.type ?? AssistantType.assistant,
"conversationId": conversation.value?.id ?? "",
"messageId": assistantMessage.id,
},
),
);
}
}
if (!isStreaming.value) {
clearEmptyMessages();
resetLoadingMessage();
updateConversationTitle();
manageChatAutoScroll(bypassHeightCheck: true);
}
messages.refresh();
update();
}