resetChatState method

void resetChatState({
  1. bool isManualReset = false,
})

Resets all chat state when the chat is opened This ensures a fresh state each time the chat is opened

Implementation

void resetChatState({bool isManualReset = false}) {
  _hasCompletedFirstInit = false;
  if (isManualReset) {
    PupauEventService.instance.emitPupauEvent(
      PupauEvent(
        type: UpdateConversationType.resetConversation,
        payload: {
          "assistantId": assistantId,
          "assistantType": assistant.value?.type ?? AssistantType.assistant,
        },
      ),
    );
  }
  // Reset conversation and messages
  conversation.value = null;
  messages.clear();
  incomingMessages.clear();
  isConversationHistoryLoaded = false;

  // Reset streaming and loading states
  isStreaming.value = false;
  assistantsReplying.value = 0;
  isLoadingConversation.value = false;
  isLoadingTitle.value = false;
  hasApiError.value = false;

  // Reset input
  inputMessageController.clear();
  inputMessage.value = "";

  // Reset tagged assistants and mentions
  clearTaggedAssistants();
  mentionValue.value = "";
  filteredAssistants.clear();

  // Reset loading message
  resetLoadingMessage();

  // Reset tool use states
  expandedToolUseMessages.clear();
  userToggledToolUseMessages.clear();
  hiddenUiToolMessages.clear();

  // Reset web search
  isWebSearchActive.value = false;
  currentWebSearchType.value = null;
  externalSearchVisible.value = false;

  // Reset conversation pagination
  resetConversationPagination();

  // Reset scroll
  autoScrollEnabled = true;
  isAtTop.value = true;
  isAtBottom.value = true;
  listHeight = 0.0;

  // Reset event tracking variables
  _currentMessageStartTime = null;
  _hasReceivedFirstToken = false;
  _isFirstMessage = true;

  // Reset other states
  selectedImage.value = null;
  cachedToolUseImages.clear();
  kbReferencesBackup.clear();
  toolsFabExpanded.value = false;
  forkMessageId.value = "";
  forkConversationTitle.value = "";
  forkConversationTitleController.clear();

  // Reset message notifier
  messageNotifier = MessageNotifier();

  // Stop TTS if running
  ttsService.stopReading();

  // Refresh observables
  messages.refresh();
  update();
}