@e-llm-studio/instant-learning 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ILMarketplaceWrapper.js +3 -0
- package/dist/ILMarketplaceWrapper.js.map +1 -1
- package/dist/cjs/ILMarketplaceWrapper.js +3 -0
- package/dist/cjs/ILMarketplaceWrapper.js.map +1 -1
- package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
- package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
- package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
- package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
- package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
- package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
- package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
- package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
- package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js +444 -169
- package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
- package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
- package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js +19 -2
- package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
- package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
- package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
- package/dist/cjs/features/InstantLearning/InstantLearning.js +1 -0
- package/dist/cjs/features/InstantLearning/InstantLearning.js.map +1 -1
- package/dist/cjs/features/InstantLearning/_components/ChatComponent.js +3 -1
- package/dist/cjs/features/InstantLearning/_components/ChatComponent.js.map +1 -1
- package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
- package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
- package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
- package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
- package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
- package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
- package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
- package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
- package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
- package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
- package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js +446 -171
- package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
- package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
- package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js +17 -3
- package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
- package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
- package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
- package/dist/features/InstantLearning/InstantLearning.js +1 -0
- package/dist/features/InstantLearning/InstantLearning.js.map +1 -1
- package/dist/features/InstantLearning/_components/ChatComponent.js +3 -1
- package/dist/features/InstantLearning/_components/ChatComponent.js.map +1 -1
- package/dist/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
- package/dist/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
- package/dist/types/src/ILMarketplaceWrapper.d.ts.map +1 -1
- package/dist/types/src/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.d.ts.map +1 -1
- package/dist/types/src/features/IL-OTJ/_components/ChatComponents/ChatComponent.d.ts.map +1 -1
- package/dist/types/src/features/IL-OTJ/_components/ChatComponents/NormalChat.d.ts.map +1 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.d.ts.map +1 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/PromoteFlow.d.ts.map +1 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts +5 -2
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts.map +1 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts +26 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts.map +1 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts +3 -1
- package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts.map +1 -1
- package/dist/types/src/features/InstantLearning/InstantLearning.d.ts.map +1 -1
- package/dist/types/src/features/InstantLearning/_components/ChatComponent.d.ts.map +1 -1
- package/dist/types/src/features/InstantLearning/_components/ContextualChatComponent.d.ts.map +1 -1
- package/package.json +4 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComponent.js","sources":["../../../../../src/features/IL-OTJ/_components/ChatComponents/ChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Box, Dialog, keyframes } from '@mui/material';\nimport Tooltip from '@mui/material/Tooltip';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport { http } from '../../../../api/transport';\nimport { v4 as uuidv4 } from 'uuid';\nimport { startChatStream, stopStreaming } from '@e-llm-studio/streaming-response';\nimport { WatchMeWork } from '@e-llm-studio/watch-me-work';\nimport ChatHeader from './ChatHeader';\nimport MessageRendering from '../MessageRendering/MessageRendering';\nimport { Skeleton } from '../atoms/SkeletonLoader/SkeletonLoader';\nimport { ActionableButton } from '../MessageRendering/ClickableChatComponents';\nimport MinimizedThinkingSteps from '../MinimizedThinkingSteps';\nimport AudioWaveform from '../AudioWaveform';\nimport styles from './ChatComponent.module.css';\nimport defaultStyles from '../../InstantLearning.module.css';\nimport { ScrollToBottom } from '../_svg/ScrollToBottom';\nimport { extractTextFromChildren, useHeaderObserver } from '../../helpers/utils';\nimport { SendButton } from '../_svg/SendButton';\nimport SparkleIcon from '../_svg/SparkleIcon';\nimport { UserIcon } from '../_svg/UserIcon';\nimport { Copy, Check } from 'lucide-react';\nimport useAuthStore from '../../../LearningManagement/store/useAuthStore';\n// import NewMinimizedThinkingSteps from '../NewMinimizedThinkingSteps';\n\n\ninterface AssistantMessage {\n role: string;\n content: string;\n id: string;\n citations: any[];\n time?: Date;\n orchestratorAndAgentsMessages?: any[];\n isEnd?: boolean; // Track if this message's GraphQL call has completed\n requestId?: string; // Track the request ID for this message\n sessionId?: string; // Track the session ID for this message\n}\ninterface ChatComponentProps {\n chatAssistantName: string;\n organizationName: string;\n baseUrl: string;\n baseWebsocketUrl: string;\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>;\n ThinkingBulbIconComponent: React.ReactNode;\n isFormSaveClicked: boolean;\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>;\n onResetLearningData?: () => void;\n sendMessageInChat: string;\n setSendMessageInChat?: React.Dispatch<React.SetStateAction<string>>;\n isFormValidating: boolean;\n chatTitle: string;\n customMetaData?: Record<string, any> | React.MutableRefObject<Record<string, any>>;\n headerMessageHandlers: any;\n aiResponse?: any;\n setAIResponse?: React.Dispatch<React.SetStateAction<unknown>>;\n onResetChat?: () => void;\n initialChatMessage?: string;\n onSave?: () => void;\n chatSize?: number;\n setChatSize: (size?: number) => void;\n movingTowards?: string;\n setCitations?: React.Dispatch<React.SetStateAction<string[]>>;\n textareaPlaceholder?: string;\n setCurrentRequestId?: React.Dispatch<React.SetStateAction<string>>;\n showSavedMessage?: boolean;\n savedMessage?: string;\n isError?: boolean;\n errorMessage?: string;\n isSaving?: boolean;\n isHighlighted?: boolean;\n /** Callback invoked when streaming state changes */\n onStreamingStateChange?: (isStreaming: boolean) => void;\n onViewComparison?: () => void;\n isCopyEnabled?: boolean;\n onComparisonLinkClick?: (variantId: string, fieldName: string) => void;\n onSubmitFeedback?: (payload: any) => Promise<void>;\n userDetails?: {\n name: string;\n id: string;\n email: string;\n }\n isGlobalEditActive?: boolean;\n socketTimeOutInMilliSeconds?: number | null;\n initialDraftMessage?: string;\n onValidateSession?: (startTime: string) => Promise<boolean>;\n onCloseSessionModal?: () => void;\n /** Schema-driven flow only: AI field key → user-facing label (see MessageRendering). */\n fieldLabelMap?: Record<string, string>;\n /** Verbose stream logs. Already resolved by the renderer — used as-is. */\n enableChatLogs?: boolean;\n}\n\nexport const autoGeneratePrompt = (baseUrl?: string, userInput?: string) => {\n return http.post(\n `${baseUrl||\"https://devllmstudio.creativeworkspace.ai\"}/api/chat/chatResponse`,\n {\n name: \"ilggcautopromptgen\",\n organizationName: \"techolution\",\n prompt:userInput || \"Generate a query\"\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n withCredentials: true,\n }\n )\n .then(response => {\n return response.data; \n })\n .catch(error => {\n console.error('Error calling auto-generate API:', error);\n throw error;\n });\n};\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({\n chatAssistantName,\n organizationName,\n baseUrl,\n baseWebsocketUrl,\n setIsNewChatClicked,\n ThinkingBulbIconComponent,\n isFormSaveClicked,\n setIsFormSavedClicked,\n onResetLearningData,\n sendMessageInChat,\n setSendMessageInChat,\n isFormValidating,\n chatTitle,\n customMetaData,\n headerMessageHandlers,\n aiResponse,\n setAIResponse,\n onResetChat,\n initialChatMessage = '',\n onSave,\n chatSize,\n setChatSize,\n movingTowards,\n setCitations,\n textareaPlaceholder = \"Tell me more about this learning...\",\n setCurrentRequestId,\n showSavedMessage = false,\n savedMessage,\n isError = false,\n errorMessage = 'There was an error saving your changes.',\n isSaving = false,\n isHighlighted = false,\n onStreamingStateChange,\n onViewComparison,\n isCopyEnabled = true,\n onComparisonLinkClick,\n onSubmitFeedback,\n userDetails,\n isGlobalEditActive,\n socketTimeOutInMilliSeconds,\n initialDraftMessage = '',\n onValidateSession,\n onCloseSessionModal,\n fieldLabelMap,\n enableChatLogs = false,\n}) => {\n const chatAssistant = chatAssistantName;\n const user = useAuthStore((state) => state.user);\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl;\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const shouldAutoScrollRef = useRef<boolean>(true);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n\n const [userInput, setUserInput] = useState<null | string>(initialDraftMessage);\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState<boolean>(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState<boolean>(false);\n const [isStreamEnd, setIsStreamEnd] = useState<boolean>(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState<boolean>(true);\n const [chatInitialMessage, setChatInitialMessage] = useState<string>('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState<string>('');\n const [isStreaming, setIsStreaming] = useState<boolean>(false);\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isAtBottom, setIsAtBottom] = useState<boolean>(true);\n const [availableHeight, setAvailableHeight] = useState<string>('100%');\n const [initialSelection, setInitialSelection] = useState<string | null>(null);\n const [isAwaitingValidationResponse, setIsAwaitingValidationResponse] = useState<boolean>(false);\n const [pendingSuccessMessage, setPendingSuccessMessage] = useState<boolean>(false);\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const processedWtaWntaRef = useRef<Set<string>>(new Set());\n const [highlightedMessageId, setHighlightedMessageId] = useState<string | null>(null);\n const [isInputGlowing, setIsInputGlowing] = useState<boolean>(false);\n const [showCopyButtons, setShowCopyButtons] = useState<boolean>(false);\n const [copiedButton, setCopiedButton] = useState<string | null>(null);\n const copyButtonsTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const copiedTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n \n const streamStartTimesRef = useRef<Map<string, number>>(new Map());\n const currentStreamRequestIdRef = useRef<string>('');\n const streamCompletedRef = useRef<Set<string>>(new Set());\n const streamGenerationRef = useRef(0);\n const isMountedRef = useRef(true);\n \n // Tracks messages that should be preserved for a given requestId\n const preservedMessagesRef = useRef<Map<string, string[]>>(new Map());\n\n // Guard against rapid-fire messages (duplicate message bug)\n const isRequestInFlightRef = useRef<boolean>(false);\n\n // NEW: Track total times UI calls startChatStream\n const streamInvocationCountRef = useRef<number>(0);\n\n // NEW: Refs for managing the inactivity timeout\n const streamTimeoutRefsMap = useRef<Map<string, NodeJS.Timeout>>(new Map());\n const sessionStartTimeRef = useRef<string | null>(null);\n const [sessionInvalidPopupOpen, setSessionInvalidPopupOpen] = useState(false);\n\n const thinkingBounce = keyframes`\n 0%, 80%, 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1.0);\n }\n `;\n\n const isInputEmpty = useMemo(() => {\n return userInput?.trim() === '' || isStreaming;\n }, [userInput, isStreaming]);\n\n const isTextareaDisabled = useMemo(\n () => isFormValidating, \n [isFormValidating]\n );\n const isLastMessageUser = useMemo(\n () => messages.length > 0 && messages[messages.length - 1]?.role === 'user',\n [messages]\n );\n \n const isSendButtonDisabled = useMemo(\n () => isInputEmpty || isFormValidating || !!isGlobalEditActive || ( isLastMessageUser),\n [isInputEmpty, isFormValidating, isGlobalEditActive, isLastMessageUser]\n );\n\nuseEffect(() => {\n if (initialDraftMessage && !userInput) {\n setUserInput(initialDraftMessage);\n setIsFocused(true); // Explicitly tell state we are focused\n \n // Wait 400ms for the MUI Dialog to finish its entry animation.\n // Otherwise, the Dialog traps focus and triggers onBlur.\n setTimeout(() => {\n if (textAreaRef.current) {\n textAreaRef.current.focus();\n const textLength = initialDraftMessage.length;\n textAreaRef.current.setSelectionRange(textLength, textLength);\n }\n }, 400); \n }\n }, [initialDraftMessage]);\n\n // Notify parent when streaming state changes\n useEffect(() => {\n onStreamingStateChange?.(isStreaming);\n }, [isStreaming, onStreamingStateChange]);\n\n // NEW: Cleanup timeout on component unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n streamGenerationRef.current += 1;\n streamTimeoutRefsMap.current.forEach(timer => clearTimeout(timer));\n streamTimeoutRefsMap.current.clear();\n if (currentStreamRequestIdRef.current && baseWebsocketUrl) {\n stopStreaming(currentStreamRequestIdRef.current, baseWebsocketUrl, false);\n }\n };\n }, [baseWebsocketUrl]);\n\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n const handleManualScroll = () => {\n if (scrollContainer) {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n const reachedBottom = distanceToBottom <= 20;\n setIsAtBottom(reachedBottom);\n }\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleManualScroll);\n handleManualScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleManualScroll);\n }\n };\n }, [messages]);\n\n const { processHeaderMessage } = useHeaderObserver({\n handlers: headerMessageHandlers,\n setResult: setAIResponse,\n });\n\n useEffect(() => {\n if (showSavedMessage) {\n setPendingSuccessMessage(true);\n }\n}, [showSavedMessage]);\n\n useEffect(() => {\n if (isInputGlowing) {\n const timer = setTimeout(() => {\n setIsInputGlowing(false);\n }, 3000);\n \n // Cleanup the timer if the user types before 3s or if the component unmounts\n return () => clearTimeout(timer);\n }\n }, [isInputGlowing]);\n \n useEffect(() => {\n if (isFormSaveClicked && !isGlobalEditActive) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save this Learning');\n setIsFormSavedClicked(false);\n }\n }, [isFormSaveClicked]);\n\n useEffect(() => {\n if (!sendMessageInChat) return;\n\n // Support skeleton start signals: \"__SKELETON__:<id>:<message>\"\n // and skeleton end signals: \"__SKELETON_END__::<message>\"\n try {\n if (sendMessageInChat.startsWith('__SKELETON__:')) {\n const parts = sendMessageInChat.split(':');\n const skId = parts[1];\n const message = parts.slice(2).join(':');\n // Append a skeleton user message (empty content, with skeleton meta)\n const skeletonMsg = {\n role: 'user',\n content: '',\n id: skId,\n time: new Date(),\n isSkeleton: true,\n skeletonContent: message,\n } as any;\n\n setMessages(prev => [...prev, skeletonMsg]);\n\n // Start the stream using the same id so the stream processing can\n // associate responses with this message id.\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, message, false, skId);\n\n setHighlightedMessageId(skId);\n setSendMessageInChat && setSendMessageInChat('');\n\n setTimeout(() => {\n setHighlightedMessageId(null);\n }, 2000);\n\n return;\n }\n\n if (sendMessageInChat.startsWith('__SKELETON_END__::')) {\n // Reveal skeleton content for any matching skeleton entry\n const message = sendMessageInChat.split('::')[1] || '';\n setMessages(prev => prev.map(m => {\n if ((m as any).isSkeleton) {\n return { ...m, isSkeleton: false, content: (m as any).skeletonContent || message };\n }\n return m;\n }));\n setSendMessageInChat && setSendMessageInChat('');\n return;\n }\n\n // Fallback: legacy simple string -> normal send\n const newMsgId = uuidv4();\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat, false, newMsgId);\n setHighlightedMessageId(newMsgId);\n setSendMessageInChat && setSendMessageInChat('');\n setTimeout(() => setHighlightedMessageId(null), 2000);\n } catch (err) {\n console.error('Error handling sendMessageInChat signal', err);\n }\n }, [sendMessageInChat]);\n\n useEffect(() => {\n getChatSettings();\n getChatHistory();\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n const newHeight = `calc(100% - ${headerHeight}px - 10px)`;\n setAvailableHeight(newHeight);\n };\n updateHeight();\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, []);\n\n const scrollToBottom = useCallback((behavior?: ScrollBehavior | React.MouseEvent) => {\n const scrollBehavior: ScrollBehavior = typeof behavior === 'string' ? behavior : 'smooth';\n\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: scrollBehavior,\n block: 'end',\n });\n }\n\n if (shouldAutoScrollRef.current) {\n setTimeout(() => {\n if (messagesEndRef.current && shouldAutoScrollRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: scrollBehavior,\n block: 'end',\n });\n }\n }, 100);\n }\n }, []);\n\n // // ==========================================\n // // 🧪 SIMULATION USE-EFFECT (FOR TESTING ONLY)\n // // ==========================================\n // useEffect(() => {\n // // To run the test, change this to `true` and save.\n // const runTest = true; // Set to true to run the simulation test\n\n // if (!runTest) return;\n\n // const runSimulation = async () => {\n // const mockRequestId = `test-req-${uuidv4()}`;\n // const userQuestionTime = new Date();\n // const explainabilityMap = new Map();\n // let accordianMessageArray: any[] = [];\n\n // // Helper to simulate network latency\n // const delay = (ms: number) => new Promise(res => setTimeout(res, ms));\n\n // const frames = [\n // // Frame 1: First `preserve_message: true`\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Searching database for relevant data to address your request...\" }\n // }\n // }\n // },\n // // Frame 2: WatchMeWork Agent (Testing that standard accordion logic still works)\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: true,\n // is_orchestrator: false,\n // preserve_message: false,\n // responded_by: \"ILInterpretationAgent\",\n // header_message: \"Finding your needles in the hay mountain...\",\n // message: { content: \"Analyzing rule overlapping for Audacy...\" }\n // }\n // }\n // },\n // // Frame 3: Second `preserve_message: true` \n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Found 3 existing configurations for KYKY.\" }\n // }\n // }\n // },\n // // Frame 4: Third `preserve_message: true`\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Checking for critical gaps in order separation...\" }\n // }\n // }\n // },\n // // Frame 5: Final Orchestrator Response (isEnd: true)\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: true, // End of stream\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: false,\n // message: { content: \"Based on my analysis, I can help you create a new variant for the 12-minute order separation rule. Would you like to proceed?\" }\n // }\n // }\n // }\n // ];\n\n // // Execute frames sequentially\n // for (const frame of frames) {\n // await delay(1500); // Wait 1.5s between frames\n \n // handleMessages(\n // frame,\n // explainabilityMap,\n // accordianMessageArray,\n // userQuestionTime,\n // \"Simulate a data fetch request\", // Mock User Input\n // false,\n // mockRequestId\n // );\n // }\n // };\n\n // // Delay the start slightly so the component can mount\n // setTimeout(() => {\n // runSimulation();\n // }, 1000);\n\n // }, []); // Empty dependency array so it only triggers on mount\n // // ==========================================\n\n // useEffect(() => {\n // const dummyRuleMessage = {\n // role: 'assistant',\n // id: `debug-${uuidv4()}`,\n // time: new Date(),\n // isEnd: true,\n // citations: [],\n // content: `\n \n // <!--\\`\\`\\`json property=\"updated_fields\"\n // {\n // \"wta\": \"Applies globally to all advertisers and break codes unless specifically exempted <ai_reasoning><id>1</id><reason>- The user explicitly confirmed that the rule should [Apply globally to all advertisers and break codes unless specifically exempted](citationNumber=1&citation_type=terminology&citationSource=T4&relevanceScore=95&chat_citation_id=0).\\\\n- This resolves the previously identified gap for the [When to Apply](citationNumber=2&citation_type=terminology&citationSource=T4&relevanceScore=95) condition for the [Inventory Window Matching](citationNumber=3&citation_type=rule_book&citationSource=R1&relevanceScore=95) rule.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\",\n // \"variant_type\": \"default_variant\",\n // \"rule_type\": \"mandatory\",\n // \"scheduling_config\": {\n // \"order_rules\": {\n // \"enabled\": false,\n // \"global_min_separation_seconds\": 0\n // },\n // \"advertiser_rules\": {\n // \"enabled\": false,\n // \"global_min_separation_seconds\": 0\n // },\n // \"inventory_rules\": {\n // \"respect_inventory_code\": true\n // },\n // \"break_code_rules\": {\n // \"respect_break_code\": false\n // },\n // \"is_default_enabled\": true\n // },\n // \"is_user_accepted_risk\": false\n // }\n // \\`\\`\\`-->\n\n // `,\n // };\n // setMessages((prev) => [...prev, dummyRuleMessage]);\n \n // }, []);\n\n// // ==========================================\n// // 🧪 SIMULATION USE-EFFECT (MULTI-SELECT TEST)\n// // ==========================================\n// useEffect(() => {\n// // Set to true to run the multi-select simulation test\n// const runMultiSelectTest = true; \n\n// if (!runMultiSelectTest) return;\n\n// const dummyMultiSelectMessage = {\n// role: 'assistant',\n// id: `debug-multiselect-${Date.now()}`,\n// time: new Date(),\n// isEnd: true, // Must be true so the MarkdownSelect enables the interactive buttons\n// citations: [],\n// content: `Here is a test for the multi-select component. Which of the following conditions would you like to apply to this rule?\n \n// <multiselect>\n// <selectoption id=\"opt_global\">Apply globally to all advertisers\n// <ai_reasoning>\n// <reason>Applying globally ensures there are no accidental gaps in the order separation rules across networks.</reason>\n// <gap>None</gap>\n// <relevance_score>95</relevance_score>\n// </ai_reasoning>\n// </selectoption>\n// <selectoption id=\"opt_strict\">Enforce strict inventory limits\n// <ai_reasoning>\n// <reason>Based on historical configurations, local advertisers often require exemptions from strict spacing rules.</reason>\n// <relevance_score>88</relevance_score>\n// </ai_reasoning>\n// </selectoption>\n\n// <selectoption id=\"typeYourAnswer\"> Or, Type your response</selectoption>\n// </multiselect>\n\n// `\n// };\n\n// // Delay the start slightly so the component has time to mount\n// setTimeout(() => {\n// setMessages((prev) => [...prev, dummyMultiSelectMessage]);\n// }, 1000);\n\n// }, []);\n// // ==========================================\n\n// // Temporary Simulation Hook\n// useEffect(() => {\n// const timer = setTimeout(() => {\n// const dummyRuleMessage = {\n// role: 'assistant',\n// id: `debug-${uuidv4()}`,\n// time: new Date(),\n// citations: [],\n// content: `Hi\n// <!-- \\`\\`\\`json property=\"updated_fields\" { \"title\": \"Order Separation <ai_reasoning><id>2</id><reason>- The user **explicitly** confirmed **[order separation](citationNumber=4&citation_type=rule_book&citationSource=R1&relevanceScore=100&chat_citation_id=0)** as the rule type.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"rule_description\": \"Maintains a minimum separation of 20 minutes between ads with the same order number. <ai_reasoning><id>3</id><reason>- The [rule description](citationNumber=5&citation_type=rule_book&citationSource=R1&relevanceScore=100) is derived from the [Order Separation](citationNumber=6&citation_type=rule_book&citationSource=R1&relevanceScore=100&chat_citation_id=0) rule template.\\n- The [20 minutes](citationNumber=7&citation_type=terminology&citationSource=T17&relevanceScore=100&chat_citation_id=1) separation time was extracted from the user's input.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"wta\": \"When the advertiser is Audacy <ai_reasoning><id>4</id><reason>- The user specified that the rule **applies to [Audacy](citationNumber=8&citation_type=advertiser_names&citationSource=Audacy&relevanceScore=100&chat_citation_id=2) only**.\\n- This indicates a targeted application for the rule.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"variant_type\": \"Variant <ai_reasoning><id>5</id><reason>- The [When to Apply](citationNumber=9&citation_type=terminology&citationSource=T22&relevanceScore=100) condition is specific to an entity ([Audacy](citationNumber=10&citation_type=advertiser_names&citationSource=Audacy&relevanceScore=100&chat_citation_id=2)), therefore the variant type is 'Variant'.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"scheduling_config\": { \"custom_sep_time_for_entities\": { \"order_sep_times\": { \"advertiser\": { \"Audacy\": 1200 } } } }, \"is_user_accepted_risk\": false }\\`\\`\\` -->\n// To finalize the configuration, please specify the tier for this rule.<!-- <ai_reasoning><id>6</id><reason>- The [tier](citationNumber=11&citation_type=terminology&citationSource=T4&relevanceScore=95) for the rule has not been explicitly confirmed by the user in the current or previous turns.\\n- The UI State value for scope is not considered a confirmed value without explicit user input.</reason><gap>- The tier assignment is missing.</gap><relevance_score>95</relevance_score></ai_reasoning> -->\n// `,\n// };\n// setMessages((prev) => [...prev, dummyRuleMessage]);\n// }, 1500);\n// return () => clearTimeout(timer);\n// }, []);\n\n \n useEffect(() => {\n if (!isStreaming) {\n let content = \"\";\n if (pendingSuccessMessage) {\n content = savedMessage || \"Thank you teacher for teaching me, your rule has been saved successfully.\";\n } else if (isError) {\n content = errorMessage || \"I'm sorry, I couldn't save your changes. Please try again.\";\n }\n\n if (content) {\n const systemMsg = {\n role: 'assistant',\n content: content,\n id: uuidv4(),\n citations: [],\n time: new Date(),\n };\n\n setMessages(prev => [...prev, systemMsg]);\n setPendingSuccessMessage(false);\n setTimeout(() => scrollToBottom('smooth'), 100);\n }\n }\n}, [pendingSuccessMessage, isError, isStreaming, savedMessage, errorMessage, scrollToBottom]);\n\n useEffect(() => {\n if (shouldAutoScrollRef.current) {\n scrollToBottom('smooth');\n }\n }, [scrollToBottom]);\n\n\n const getChatSettings = () => {\n let config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: `${url}/api/chatbot/getChatSettings?name=${chatAssistant}&organizationName=${organizationName}`,\n headers: {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n if (response?.data?.chatSettings?.chatInitialMessage !== '') {\n setShowWelcomeMessage(true);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const getChatHistory = async () => {\n const getHistoryURL = `${url}/api/chat/history?name=${chatAssistant}&organizationName=${organizationName}`;\n\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true,\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n if (data.length > 0) {\n setMessages(data);\n scrollToBottom();\n } else {\n setShowWelcomeMessage(true);\n }\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n const resetChatHistory = () => {\n const resetChatHistoryURL = `${url}/api/chat/resetHistory?name=${chatAssistant}&organizationName=${organizationName}`;\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true,\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n setIsNewChatClicked(true);\n setChatInitialMessage('');\n setInitialSelection(null);\n processedWtaWntaRef.current.clear();\n preservedMessagesRef.current.clear(); // Clears preserved messages on reset\n chatPreviewIdRef.current = `${uuidv4()}`;\n setMessages([]);\n setShowWelcomeMessage(true);\n sessionStartTimeRef.current = null;\n onResetChat?.();\n if (onResetLearningData) {\n onResetLearningData();\n }\n })\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n guestSessionIdRef.current = `${chatAssistant}-${organizationName}-${uuidv4()}`;\n })\n\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n const regex = /<a [^>]*>.*?<\\/a>/g;\n const replacedString = inputString?.replace(regex, (match) => {\n return match?.replace(/\\*/g, '*');\n });\n return replacedString;\n }\nconst getAssistantObj2 = (\n data: any, \n accordianMessageArray: any[], \n explainabilityMap: Map<string, any>, \n preservedMessagesRef: React.MutableRefObject<Map<string, string[]>>\n ) => {\n let streamedresponse : AssistantMessage = { \n role: 'assistant', \n content: '', \n id: uuidv4(), \n time: new Date(),\n citations: [] \n };\n \n const continueResult = data?.chatStream?.continueChatResult || {};\n const requestId = continueResult?.requestId;\n const isPreserve = continueResult?.preserve_message;\n const isEnd = continueResult?.isEnd;\n const currentContent = continueResult?.message?.content || '';\n const isOrchestrator = continueResult?.is_orchestrator;\n const isThinkingBreak = continueResult?.thinking_break;\n const isCitationsPresent = continueResult?.message?.citations || [];\n\n // 1. Accumulate preserved messages throughout the stream (never on the isEnd frame).\n if (requestId && isPreserve && currentContent && !isEnd ) {\n let preservedList = preservedMessagesRef.current.get(requestId) || [];\n // Prevent consecutive duplicate appends\n if (preservedList[preservedList.length - 1] !== currentContent) {\n preservedList.push(currentContent);\n preservedMessagesRef.current.set(requestId, preservedList);\n }\n }\n\n // 2. Build the rendered content:\n // - preserved messages are shown statically as they arrive (no waiting for isEnd)\n // - live currentContent streams below the preserved block on every non-preserve frame\n // - on isEnd=true: drop currentContent entirely, show only preservedList\n const preservedList = requestId ? (preservedMessagesRef.current.get(requestId) || []) : [];\n const preservedBlock = preservedList.join('\\n\\n');\n\n let finalContent = '';\n if (isEnd) {\n // If there are preserved messages, show them. Otherwise, show the final response (currentContent)\n if (preservedBlock && preservedBlock.trim() !== '') {\n finalContent = preservedBlock;\n } else {\n // Show the final response content if nothing was preserved\n finalContent = currentContent;\n }\n } else if (isPreserve) {\n // This frame itself is being preserved — show the full preserved block\n // (already includes this frame since we accumulated it above)\n finalContent = preservedBlock;\n } else {\n // Live streaming frame — show preserved block (static, above) +\n // currentContent (live, below). Strip unclosed XML comment blocks.\n const stripped = currentContent.replace(/<!--(?![\\s\\S]*-->)[\\s\\S]*$/, '').trimEnd();\n const liveContent = (isOrchestrator !== false && !isThinkingBreak && isCitationsPresent.length === 0) ? stripped : '';\n finalContent = preservedBlock\n ? `${preservedBlock}\\n\\n${liveContent}`\n : liveContent;\n }\n\n streamedresponse.content = replaceAsteriskInAnchor(finalContent);\n\n // Accordion / Explainability / WatchMeWork logic\n if (\n continueResult?.thinking_break === true &&\n continueResult?.is_orchestrator === true &&\n continueResult?.isEnd === false\n ) {\n accordianMessageArray.push({\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n });\n }\n\n if (\n continueResult?.thinking_break === false &&\n continueResult?.is_orchestrator === false &&\n continueResult?.isEnd === false\n ) {\n if (continueResult.explainability_id && continueResult.responded_by) {\n const explainabilityId = continueResult.explainability_id;\n const respondedBy = continueResult.responded_by;\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, {\n responded_by: respondedBy,\n index: accordianMessageArray.length,\n });\n }\n }\n\n if (explainabilityMap.has(continueResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(continueResult.explainability_id);\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: true,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: true,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: false,\n },\n ];\n }\n }\n\n if (\n continueResult?.thinking_break === true &&\n continueResult?.is_orchestrator === false &&\n continueResult?.isEnd === false\n ) {\n if (continueResult.explainability_id && continueResult.responded_by) {\n const explainabilityId = continueResult.explainability_id;\n const respondedBy = continueResult.responded_by;\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, {\n responded_by: respondedBy,\n index: accordianMessageArray.length,\n });\n }\n }\n\n if (explainabilityMap.has(continueResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(continueResult.explainability_id);\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray.push({\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: false,\n });\n }\n }\n \n let assistantObj = {\n orchestratorAndAgentsMessages: accordianMessageArray,\n ...streamedresponse,\n };\n return assistantObj;\n };\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n if (startIndex !== -1) {\n const extractedString = inputString.substring(startIndex + prefix.length);\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (\n data: any,\n explainabilityMap: any,\n accordianMessageArray: any,\n userQuestionTime: any,\n userInputParam: string,\n isFirstQuestionSent?: boolean,\n customId?: string \n ) => {\n if (data?.chatStream?.continueChatResult?.header_message) {\n const headerMsg = {\n header_message: data.chatStream.continueChatResult.header_message,\n responsedata: data?.chatStream?.continueChatResult?.message?.content,\n };\n processHeaderMessage(headerMsg);\n }\n\n const continueResult = data?.chatStream?.continueChatResult;\n const isEnd = continueResult?.isEnd;\n const citations = continueResult?.message?.citations || [];\n\n if (isEnd && citations.length > 0 && setCitations) {\n setCitations(citations);\n }\n\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n \n if (streamedresponse.content !== '') {\n setMessageLoading(false);\n setMessages([\n ...messages,\n {\n role: 'user',\n content: userInputParam,\n time: userQuestionTime,\n isFirstQuestionSent: isFirstQuestionSent || false,\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n reply: '',\n },\n streamedresponse,\n ]);\n }\n } else {\n setWaitMessageLoading(false);\n \n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n if (typeof incomingRequestId === 'string' && incomingRequestId && setCurrentRequestId) {\n setCurrentRequestId(incomingRequestId);\n }\n\n const assistantObject = getAssistantObj2(\n data, \n accordianMessageArray, \n explainabilityMap, \n preservedMessagesRef\n );\n \n assistantObject.time = new Date();\n assistantObject.citations = citations;\n \n assistantObject.isEnd = data?.chatStream?.continueChatResult?.isEnd;\n assistantObject.requestId = data?.chatStream?.continueChatResult?.requestId;\n assistantObject.sessionId = guestSessionIdRef.current;\n \n\n assistantObject.orchestratorAndAgentsMessages?.forEach((msg: any) => {\n if (msg && msg.header_message) {\n processHeaderMessage(msg);\n }\n });\n\n if (\n assistantObject?.content !== '' || \n (assistantObject?.orchestratorAndAgentsMessages && assistantObject?.orchestratorAndAgentsMessages.length > 0)\n ) {\n setMessageLoading(false);\n setMessages([\n ...messages,\n {\n role: 'user',\n content: userInputParam || '',\n time: userQuestionTime,\n isFirstQuestionSent: isFirstQuestionSent || false,\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n requestId: data?.chatStream?.continueChatResult?.requestId ?? '',\n },\n assistantObject,\n ]);\n }\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n };\n\n // NEW: Shared function to execute when timeout passes OR websocket throws an error\n const handleStreamTimeout = useCallback((requestId: string, reason: string = \"inactivity\") => {\n console.error(`🛑 Stream failed or timed out due to:reason=${reason} requestId=${requestId} at ${new Date().toISOString()}`);\n\n // Clear only this request's own timer\n const timer = streamTimeoutRefsMap.current.get(requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(requestId);\n }\n\n // Always safe to stop THIS specific request and clean its preserved messages\n if (requestId && baseWebsocketUrl) {\n stopStreaming(requestId, baseWebsocketUrl, false);\n preservedMessagesRef.current.delete(requestId);\n }\n\n // Only this request's timeout is allowed to touch global UI state / show the retry bubble — a stale timeout for a superseded request must not clobber the state of whatever stream is actually active now.\n const isStillActiveStream = requestId === currentStreamRequestIdRef.current;\n if (!isStillActiveStream) {\n console.warn(`🛑 [handleStreamTimeout] Ignoring stale timeout for superseded requestId=${requestId}; active=${currentStreamRequestIdRef.current}`);\n return;\n }\n \n // 1. Reset standard UI and flight states\n isRequestInFlightRef.current = false;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n \n // Turn off the loading text\n setMessageLoading(false); \n setWaitMessageLoading(false); \n\n // 2. Append an error message with a Retry button\n setMessages(prev => {\n // Find the most recent message sent by the user\n const lastUserMessage = [...prev].reverse().find(msg => msg.role === 'user');\n const retryQuery = lastUserMessage?.content || '';\n \n // Escape any double quotes in the query so it doesn't break the HTML attribute\n const safeRetryQuery = retryQuery.replace(/\"/g, '"');\n\n // Check if the very last message in the chat is an incomplete assistant message.\n const updatedMessages = [...prev];\n const lastMessage = updatedMessages[updatedMessages.length - 1];\n \n if (lastMessage && lastMessage.role === 'assistant' && !lastMessage.isEnd) {\n updatedMessages.pop(); // Remove the broken partial message\n }\n\n // custom error message\n let errorText = \"I ran into an unexpected issue while trying to process this learning.\";\n if (reason === \"inactivity\") {\n errorText = \"Something went wrong—teaching is taking longer than expected.\";\n } else if (reason === \"websocket_error\") {\n errorText = \"I lost connection to the server while working on that.\";\n }\n\n return [\n ...updatedMessages,\n {\n role: 'assistant',\n content: `${errorText} Please try again.\\n\\n<button class=\"clickable-button\" data-value=\"${safeRetryQuery}\">Retry</button>`,\n id: uuidv4(),\n time: new Date(),\n isEnd: true,\n citations: []\n }\n ];\n });\n }, [socketTimeOutInMilliSeconds, baseWebsocketUrl]);\n\n // Function to reset the timer on every successful stream chunk\n const resetStreamTimeout = useCallback((requestId: string) => {\n // 1. Always clear the existing timer if it exists\n const existing = streamTimeoutRefsMap.current.get(requestId);\n if (existing) clearTimeout(existing);\n\n // 2. ONLY start the timeout if the prop exists and is greater than 0\n if (socketTimeOutInMilliSeconds && socketTimeOutInMilliSeconds > 0) {\n console.log(`⏱️ [Timeout armed] requestId=${requestId} timeout=${socketTimeOutInMilliSeconds}ms at ${new Date().toISOString()}`);\n const timer = setTimeout(() => {\n console.warn(`⏱️ [Timeout FIRED — auto stop] requestId=${requestId} at ${new Date().toISOString()}`);\n handleStreamTimeout(requestId, \"inactivity\");\n }, socketTimeOutInMilliSeconds);\n streamTimeoutRefsMap.current.set(requestId, timer);\n }\n }, [handleStreamTimeout, socketTimeOutInMilliSeconds]);\n \n const handleStream = async (\n event?: any,\n isFirstQuestionSent?: boolean,\n userInputParam?: string,\n isValidationFailure: boolean = false,\n customId?: string,\n setIsLoading?: (loading: boolean) => void\n ) => {\n const contentSource = userInputParam !== undefined ? userInputParam : (userInput || '');\n const finalInput = contentSource.trim();\n\n const isEnterKey = event?.key === 'Enter' && !event?.shiftKey && !isGlobalEditActive;\n if (isEnterKey) {\n event?.preventDefault?.();\n }\n\n const isLastMessageUser = messages[messages.length - 1]?.role === 'user';\n\n if (!finalInput || isStreaming || isRequestInFlightRef.current || isLastMessageUser || (event?.key && !isEnterKey)) {\n \n return;\n }\n\n // --- SESSION VALIDATION LOGIC ---\n if (!sessionStartTimeRef.current) {\n sessionStartTimeRef.current = new Date().toISOString();\n console.log(`Session start time set to ${sessionStartTimeRef.current}`);\n }\n\n if (onValidateSession) {\n setMessageLoading(true);\n setInitialLoadingMessage(\"Validating session...\");\n try {\n const isValid = await onValidateSession(sessionStartTimeRef.current);\n if (!isValid) {\n setSessionInvalidPopupOpen(true);\n setMessageLoading(false);\n setIsLoading && setIsLoading(false);\n return; // Abort chat stream entirely\n }\n } catch (error) {\n console.error('Validation error:', error);\n setSessionInvalidPopupOpen(true);\n setMessageLoading(false);\n setIsLoading && setIsLoading(false);\n return;\n }\n // If valid, clear the validation message so the normal flow can take over\n setMessageLoading(false);\n }\n\n isRequestInFlightRef.current = true;\n\n const isEnterRuleDescriptionFlow = finalInput === \"I want to add a rule description\";\n\n if (isEnterRuleDescriptionFlow) {\n setIsStreamEnd(false);\n shouldAutoScrollRef.current = true;\n setIsStreaming(true);\n\n if (!initialSelection && finalInput) {\n setInitialSelection(userInputParam || \"manual_entry\");\n }\n\n const userQuestionTime = new Date();\n \n setMessages(prev => [\n ...prev.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace('WaitMessage: ', ''),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false, id: customId || uuidv4() },\n ]);\n scrollToBottom('smooth');\n\n setTimeout(() => {\n const AssistantMessage = \"I'd be happy to help you set up a new rule! To get started, could you tell me what kind of behavior or logic you would like this rule to follow?\";\n setMessages(prev => [\n ...prev,\n {\n role: 'assistant',\n content: AssistantMessage,\n id: uuidv4(),\n citations: [],\n time: new Date(),\n },\n ]);\n scrollToBottom('smooth');\n\n setTimeout(() => {\n setIsStreaming(false);\n setIsStreamEnd(true);\n }, 500);\n }, 500);\n\n return;\n }\n\n setIsStreamEnd(false);\n shouldAutoScrollRef.current = true;\n setIsStreaming(true);\n\n if (!initialSelection && finalInput) {\n setInitialSelection(userInputParam || \"manual_entry\");\n }\n\n const userQuestionTime = new Date();\n const streamGeneration = streamGenerationRef.current;\n setMessages(prev => {\n const mapped = prev.map(m => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace('WaitMessage: ', ''),\n }));\n if (customId && mapped.some(m => m.id === customId)) {\n // If a skeleton entry already exists for this id, update it but keep\n // any skeleton flag intact (it will be turned off by the end signal).\n return mapped.map(m => m.id === customId ? { ...m, content: finalInput } : m);\n }\n return [\n ...mapped,\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false, id: customId || uuidv4() },\n ];\n });\n scrollToBottom('smooth');\n\n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n // Add this helper inside ChatComponent, near where customMetaData is consumed\n const resolveMetaData = (\n meta: Record<string, any> | React.MutableRefObject<Record<string, any>> | undefined\n ): Record<string, any> => {\n if (!meta) return {};\n // A React ref has exactly {current: value} — real metadata always has many keys\n const keys = Object.keys(meta);\n if (keys.length === 1 && keys[0] === 'current') {\n return (meta as React.MutableRefObject<Record<string, any>>).current ?? {};\n }\n return meta as Record<string, any>;\n };\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: userDetails?.name ?? 'Guest User',\n userEmailId: userDetails?.email ?? 'guestUser@example.com',\n userId: userDetails?.id ?? 'Guest User',\n query: finalInput,\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData:resolveMetaData(customMetaData),\n aiModel: '',\n additionalHeaders: user?.accessToken\n ? {\n Authorization: `Bearer ${user.accessToken}`,\n }\n : undefined,\n enableLogs: true,\n logControls: {\n infoLogs: enableChatLogs,\n debugLogs: enableChatLogs,\n },\n \n onStreamEvent: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW LOG: Track incoming chunks\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n const headerMsg = data?.chatStream?.continueChatResult?.header_message;\n console.log(`📦 [Stream Chunk Received] With RequestID and header_message: ${incomingRequestId},${headerMsg}`);\n // NEW: Reset the timeout timer every time data is successfully received\n resetStreamTimeout(params.requestId);\n\n // NEW: Gracefully catch explicit agent errors\n const errorState = data?.chatStream?.continueChatResult?.error_state;\n if (Array.isArray(errorState) && errorState.length > 0) {\n console.error('⚠️ Agent returned an error_state during stream:', { requestId: incomingRequestId, errorState });\n \n // Abort stream and trigger the retry button UI\n handleStreamTimeout(params.requestId, \"agent_error\");\n return;\n }\n\n handleMessages(\n data,\n explainabilityMap,\n accordianMessageArray,\n userQuestionTime,\n finalInput,\n isFirstQuestionSent,\n customId \n );\n },\n onStreamEnd: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW LOG: Track clean finishes\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n streamCompletedRef.current.add(params.requestId);\n console.log(`✅ [Stream Completed] RequestID: ${incomingRequestId}`);\n // NEW: Clear the timeout since the stream finished successfully\n const timer = streamTimeoutRefsMap.current.get(params.requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(params.requestId);\n }\n\n isRequestInFlightRef.current = false;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n const endTime = Date.now();\n const startTime = streamStartTimesRef.current.get(params.requestId);\n if (startTime) {\n const timeTaken = Math.round((endTime - startTime) / 1000).toFixed(1); \n setMessages(prev => {\n const lastAssistantIdx = [...prev].reverse().findIndex(m => m.role === 'assistant');\n if (lastAssistantIdx === -1) return prev;\n const realIdx = prev.length - 1 - lastAssistantIdx;\n return prev.map((m, i) => i === realIdx ? { ...m, finalTimeTaken: timeTaken } : m);\n });\n }\n },\n onError: (error: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW: Clear the timeout on stream errors\n const timer = streamTimeoutRefsMap.current.get(params.requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(params.requestId);\n }\n\n // NEW: if this request already completed cleanly, this is post-completion cleanup noise (e.g. from client.dispose()) — ignore it, don't show a false \"lost connection\" message or discard the completed response.\n if (streamCompletedRef.current.has(params.requestId)) {\n console.warn('Ignoring post-completion error for already-finished request:', params.requestId);\n streamCompletedRef.current.delete(params.requestId);\n return;\n }\n \n console.error('Stream error:', error);\n \n // Trigger the exact same failure logic as a timeout\n handleStreamTimeout(params.requestId, \"websocket_error\");\n },\n };\n\n if (finalInput) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom();\n const loadingMessage = customId \n ? `Just a moment, processing your request...` \n : `Okay, got it. Let me take a moment to work on this and I'll get back to you shortly.`;\n setInitialLoadingMessage(loadingMessage);\n streamStartTimesRef.current.set(params.requestId, Date.now()); \n currentStreamRequestIdRef.current = params.requestId; \n\n console.log(\"Chat Stream Params:\", params);\n\n // NEW: Start the timeout clock right before initiating the stream\n resetStreamTimeout(params.requestId);\n // NEW LOG: Track exactly how many times the UI calls the library\n streamInvocationCountRef.current += 1;\n console.log(`🚀 [UI Action] stream started (Total UI invocations: ${streamInvocationCountRef.current}) | RequestID: ${params.requestId} | Query: \"${finalInput}\"`);\n startChatStream(params);\n }\n setIsLoading && setIsLoading(false);\n };\n const handleStreamRef = useRef<typeof handleStream>(null as any);\n useLayoutEffect(() => {\n handleStreamRef.current = handleStream;\n });\n const stableHandleStream = useCallback(\n (...args: Parameters<typeof handleStream>) => handleStreamRef.current?.(...args),\n [] \n );\n \n\n \n const initialMarkdownComponents = useMemo(() => ({\n p: ({ node, children, ...props }: any) => (\n <div\n style={{\n margin: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '10px',\n fontFamily: 'inherit',\n }}\n >\n {children}\n </div>\n ),\n button: ({ node, className, children, ...props }: any) => {\n const label = extractTextFromChildren(children);\n const hiddenValue = props['data-value'];\n const isSelected = initialSelection === label || initialSelection === hiddenValue;\n const isDisabled = !!initialSelection || !!isGlobalEditActive;\n\n const isTesterGenie = label === 'Tester Genie';\n return (\n <ActionableButton\n {...props}\n className={className}\n handleStream={stableHandleStream} \n isStreamEnd={isStreamEnd}\n disabled={isDisabled}\n isLastMessage={true}\n style={{ margin: 0 }}\n isTesterGenie={isTesterGenie}\n data-selected={isSelected ? 'true' : initialSelection ? 'false' : undefined}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {children}\n\n {isTesterGenie && (\n <svg width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.20368 8.94768e-06C7.48895 -0.00208639 7.69331 0.364327 7.83856 0.57465C8.14381 1.01633 8.38012 1.87909 7.71077 2.14118C8.57167 2.21011 9.70406 2.93098 10.1785 3.64699C10.5932 4.27286 10.4559 5.16037 9.80301 5.56007L9.9502 7.16593C9.97671 7.44871 10.0265 7.87092 10.0299 8.14457C10.4213 8.23046 11.0787 8.55391 11.326 8.87592C11.5979 8.75656 11.9189 8.76963 12.1688 8.93469C12.3563 8.67751 12.5598 8.41456 12.7507 8.15787C12.3283 7.45155 12.5047 6.57745 13.2143 6.13784C13.5375 5.9377 13.9264 5.87277 14.2971 5.95705C14.0961 6.30964 13.8775 6.72182 13.6593 7.05857C13.7906 7.2436 13.9184 7.44225 14.044 7.63194L14.8022 7.63198C15.0349 7.30106 15.2515 6.90827 15.4835 6.59349C15.8623 7.0712 15.8156 7.79671 15.4734 8.28241C15.1318 8.76741 14.4886 8.9899 13.9118 8.88251C13.758 9.12108 13.5577 9.39243 13.3941 9.63201C13.7143 9.9316 13.7725 10.364 13.4067 10.6594C13.5231 10.8889 13.5309 11.1613 13.447 11.402C13.1502 12.2523 12.1724 12.5645 11.3474 12.5025C11.1171 12.4852 10.939 12.4698 10.7197 12.3953C10.8724 13.1271 10.7744 14.2031 10.5132 14.9051C10.1688 15.8304 9.43632 16.5569 8.54503 16.9655C7.90465 17.2706 7.21222 17.3607 6.50472 17.4505C5.74445 17.5471 4.75801 17.4362 4.08533 17.825C3.9327 17.9132 3.86566 18.0173 3.82943 18.1792C3.94996 18.5982 4.47858 18.6063 4.78474 18.8897C5.20191 19.2758 4.90716 19.9663 4.36611 19.9908C4.31476 19.9931 4.26867 19.9867 4.23186 19.9493C4.23089 19.8303 4.47587 19.7199 4.49787 19.5262C4.55075 19.0604 3.70014 19.0078 3.37835 18.8374C3.13013 18.706 2.99537 18.6309 2.82242 18.4021C2.63795 18.1579 2.58428 17.835 2.63138 17.5392C2.74868 16.7847 3.47123 16.393 4.12184 16.1497C4.61314 15.9659 5.46304 15.7158 5.52019 15.0793C5.58589 14.348 4.97543 13.5523 4.57739 12.9807C4.44275 12.7875 4.3039 12.579 4.16309 12.3919C4.18987 12.365 4.21049 12.3463 4.23916 12.3212C4.59619 12.6218 5.21209 12.6421 5.55038 12.2979C5.70457 12.144 5.78974 11.9342 5.78642 11.7164C5.78121 11.4493 5.63382 11.2002 5.4454 11.019C5.44704 10.9932 5.44824 10.9676 5.449 10.9419C5.4566 10.6648 5.37505 10.4902 5.1892 10.2943C5.18398 10.2538 5.17776 10.2134 5.17053 10.1732C5.08123 9.69297 4.71708 9.34182 4.23415 9.27108C4.16418 9.26083 3.96108 9.26105 3.92071 9.23344C3.90485 9.1828 3.9059 9.20792 3.91904 9.15527C4.22103 8.90139 4.14407 8.78214 4.31107 8.4846C4.42301 8.28513 4.73047 8.15239 4.95452 8.10701C4.96167 7.51076 5.03684 6.88562 5.10036 6.29144C5.12451 6.0655 5.12531 5.75046 5.1511 5.55257C4.11108 4.86747 4.39091 3.75946 5.25465 3.06391C5.84978 2.58469 6.34496 2.31002 7.10143 2.14517C7.01589 2.10416 6.93842 2.04811 6.87269 1.97972C6.77021 1.87349 6.70248 1.73857 6.67853 1.59293C6.60568 1.12096 7.04104 0.914625 7.18759 0.526392C7.26428 0.323403 7.03925 0.146075 7.20368 8.94768e-06Z\" fill=\"#475569\" />\n <path d=\"M7.459 4.5C7.48797 4.50312 7.71949 4.61154 7.76205 4.63061C8.27062 4.85835 8.87051 5.09164 9.35658 5.3582C9.36602 6.03495 9.37016 6.56625 8.70573 6.91519C8.6633 6.80883 8.63019 6.72409 8.56332 6.63044C8.43786 6.45568 8.24656 6.33963 8.03354 6.30909C7.8434 6.28211 7.65146 6.3197 7.49586 6.43503C7.21897 6.21256 6.76265 6.28197 6.5229 6.52486C6.39308 6.65639 6.34815 6.75074 6.28902 6.92344C5.59702 6.5957 5.58761 6.04267 5.60583 5.35582C5.89882 5.23844 6.21318 5.0724 6.50153 4.941C6.82145 4.79522 7.14482 4.6574 7.459 4.5Z\" fill=\"#D1EDFD\" />\n <path d=\"M11.0756 10.6406C11.1037 10.6701 11.1324 10.7706 11.1535 10.8145C11.2818 11.0817 11.4922 11.1945 11.7498 11.2977C11.5607 11.63 11.4567 11.8797 11.1034 12.0466L11.0839 12.0517C10.9262 12.0927 10.7996 12.0968 10.651 12.0135C10.4755 11.915 10.3807 11.6614 10.4792 11.478C10.6388 11.1809 10.8877 10.9272 11.0756 10.6406Z\" fill=\"#D1EDFD\" />\n <path d=\"M11.6036 9.1377C11.6993 9.11763 11.8391 9.16378 11.9294 9.19593C11.6952 9.50644 11.4706 9.81614 11.2327 10.1261L11.1572 10.2255C10.7581 9.73539 11.0333 9.24481 11.6036 9.1377Z\" fill=\"#D1EDFD\" />\n <path d=\"M7.49681 0.882812C7.53691 0.925159 7.61244 1.08523 7.63598 1.14156C7.74243 1.39673 7.75769 1.76908 7.38596 1.77504C7.28236 1.75599 7.15628 1.68938 7.13517 1.5783C7.0843 1.3107 7.35609 1.09964 7.48737 0.897583L7.49681 0.882812Z\" fill=\"#D1EDFD\" />\n <path d=\"M1.68305 6.17249C1.71659 6.1673 1.8134 6.16478 1.84892 6.16432C2.34052 6.15616 2.81496 6.34495 3.16655 6.68866C3.50847 7.01806 3.70349 7.47119 3.70765 7.94596C3.70896 8.42345 3.54045 8.85284 3.20281 9.19025C3.34033 9.28068 3.5321 9.52219 3.6543 9.65748C4.17158 9.39073 4.91447 9.69339 4.79675 10.3444C5.08751 10.5485 5.19656 10.8288 5.0585 11.1674C5.15418 11.2375 5.25595 11.3205 5.32383 11.4186C5.40228 11.5303 5.4309 11.6695 5.40291 11.8031C5.32228 12.1857 4.90085 12.3286 4.57669 12.1236C4.51367 12.0838 4.42258 11.9595 4.35299 11.9431C4.30669 11.9557 4.28453 11.9584 4.23644 11.9644C4.22885 11.9742 4.22118 11.9841 4.21343 11.9938C3.93597 12.3413 3.49234 12.4682 3.06933 12.5157C2.85285 12.518 2.70432 12.5146 2.49066 12.4609C1.80785 12.2892 1.50808 11.6167 1.70723 10.9639C1.829 10.5648 2.11891 10.2506 2.48939 10.0518C2.54655 10.132 2.57559 10.2191 2.64066 10.303C2.73571 10.2223 2.82048 10.1482 2.92363 10.0773C2.81023 9.95313 2.66811 9.7693 2.55817 9.63584C2.38871 9.6878 2.23026 9.72879 2.05298 9.74653C1.54239 9.80228 1.03118 9.64711 0.637735 9.31695C0.269964 9.01018 0.0453493 8.54827 0.00544736 8.07322C-0.0309495 7.60988 0.116099 7.15077 0.414918 6.79478C0.742554 6.41198 1.18728 6.21393 1.68305 6.17249Z\" fill=\"#475569\" />\n <path d=\"M1.79616 6.5951C2.54894 6.5619 3.18687 7.14364 3.22301 7.8963C3.25915 8.64894 2.67989 9.28913 1.92739 9.3282C1.17073 9.3675 0.526231 8.78435 0.489885 8.02753C0.45354 7.27071 1.03921 6.62849 1.79616 6.5951Z\" fill=\"#D1EDFD\" />\n <path d=\"M4.93607 11.4844C5.12839 11.6261 5.22049 11.9085 4.91876 11.9419C4.8067 11.8805 4.78491 11.8646 4.71094 11.7561C4.81572 11.6752 4.862 11.5925 4.93607 11.4844Z\" fill=\"#FEFEFD\" />\n <path d=\"M12.5164 3.58594L12.5715 3.59466C12.6589 3.65863 12.6908 3.94434 12.7882 4.05193C12.8789 4.15216 12.9155 4.17816 13.0326 4.24929C13.1363 4.31224 13.3325 4.34025 13.384 4.43124C13.3643 4.56218 13.0693 4.54857 12.9127 4.69344C12.6903 4.89898 12.7114 5.06971 12.5892 5.28622C12.5669 5.28439 12.5368 5.2868 12.5261 5.27346C12.4336 5.15843 12.4072 4.9308 12.3099 4.81465C12.1627 4.63903 11.9972 4.60054 11.7981 4.51372C11.7544 4.49467 11.7266 4.47099 11.7129 4.42649C11.7867 4.31876 12.0509 4.34309 12.2376 4.14892C12.43 3.94901 12.4155 3.72208 12.5164 3.58594Z\" fill=\"#475569\" />\n <path d=\"M2.13644 3.72656C2.24401 3.77084 2.29712 4.1268 2.431 4.25226C2.60327 4.41371 2.7311 4.41949 2.93246 4.52449C2.96024 4.53897 2.97173 4.56042 2.97671 4.58878C2.89584 4.6981 2.61854 4.70721 2.4596 4.85659C2.26275 5.04156 2.27341 5.29132 2.17022 5.42088C2.16192 5.41849 2.11671 5.40232 2.1156 5.40043C2.01291 5.21216 1.9836 5.04909 1.84812 4.87273C1.73599 4.72675 1.36534 4.69959 1.32812 4.56939C1.3835 4.47941 1.67823 4.44211 1.82291 4.30563C2.02737 4.11274 2.0042 3.8372 2.13644 3.72656Z\" fill=\"#475569\" />\n </svg>\n )}\n </span>\n </ActionableButton>\n );\n },\n }), [stableHandleStream, isStreamEnd, initialSelection, isGlobalEditActive]);\n const anySkeletonActive = useMemo(() => {\n return messages.some((m: any) => m.isSkeleton);\n }, [messages]);\n\n const handleMouseEnter = () => {\n if (copyButtonsTimeoutRef.current) {\n clearTimeout(copyButtonsTimeoutRef.current);\n }\n copyButtonsTimeoutRef.current = setTimeout(() => {\n setShowCopyButtons(true);\n }, 500);\n };\n\n\n const handleMouseLeave = () => {\n if (copyButtonsTimeoutRef.current) {\n clearTimeout(copyButtonsTimeoutRef.current);\n }\n setShowCopyButtons(false);\n };\n\n const copyCurrentMessage = () => {\n if (messages.length > 0) {\n const chatText = messages\n .filter((msg:any) => msg.role === 'user')\n .map(msg => msg.content)\n .join('\\n\\n');\n navigator.clipboard.writeText(chatText);\n setCopiedButton('messages');\n \n if (copiedTimeoutRef.current) {\n clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = setTimeout(() => {\n setCopiedButton(null);\n }, 2000);\n }\n };\n\n const copyEntireChat = () => {\n const chatText = messages\n .map(msg => `${msg.role === 'user' ? 'You' : 'Assistant'}: ${msg.content}`)\n .join('\\n\\n');\n navigator.clipboard.writeText(chatText);\n setCopiedButton('entire');\n \n if (copiedTimeoutRef.current) {\n clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = setTimeout(() => {\n setCopiedButton(null);\n }, 2000);\n };\n\n const handleFeedbackSubmit = async (payload: any) => {\n if (onSubmitFeedback) {\n await onSubmitFeedback(payload); \n \n // Append the Thank You message as a new assistant bubble ONLY on success\n setMessages((prev) => [\n ...prev,\n {\n role: 'assistant',\n content: 'Thanks for your feedback — this will help improve future suggestions.',\n id: uuidv4(),\n citations: [],\n time: new Date(),\n isEnd: true,\n },\n ]);\n setTimeout(() => scrollToBottom('smooth'), 100);\n }\n };\n\n return (\n <div className={`${defaultStyles.customFont} ${styles.chatContainer}`}\n style={{\n transition: 'box-shadow 0.3s ease-in-out',\n boxShadow: (isHighlighted && !anySkeletonActive) ? '0 0 20px 5px rgba(37, 99, 235, 0.5)' : 'none',\n }}>\n <div ref={scrollContainerRef} className={styles.scrollWrapper}>\n <div ref={chatHeaderRef} className={styles.stickyHeader}>\n <ChatHeader\n resetChatHistory={resetChatHistory}\n isStreamEnd={isStreamEnd}\n chatTitle={chatTitle}\n onResize={setChatSize}\n chatSize={chatSize}\n movingTowards={movingTowards}\n />\n </div>\n\n <div className={styles.messagesList}>\n <div className={styles.initialMessageRow}>\n <div className={styles.iconWrapper}>\n <SparkleIcon />\n </div>\n <div className={styles.welcomeTextWrapper}>\n <div className={styles.welcomeMarkdownWrapper}>\n <span>\n <ReactMarkdown\n rehypePlugins={[rehypeRaw] as any[]}\n components={initialMarkdownComponents}\n >\n {initialChatMessage}\n </ReactMarkdown>\n </span>\n </div>\n </div>\n </div>\n \n {messages.length > 0 && messages.map((message: any, index: number) => (\n <div key={message.id} className={styles.messageRow}>\n {message.role === 'assistant' ? (\n <div className={styles.assistantIconContainer}>\n <SparkleIcon />\n </div>\n ) : (\n <div className={styles.userSpacer} />\n )}\n\n <div className={styles.messageContent}>\n {message.role === 'assistant' ? (\n <>\n {message.orchestratorAndAgentsMessages &&\n message.orchestratorAndAgentsMessages.length > 0 && (\n <WatchMeWork\n orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} \n isStreamEnd={isStreamEnd} \n finalTimeTaken={message?.finalTimeTaken}\n key={message?.finalTimeTaken ?? message?.id}\n />\n )}\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={stableHandleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n setChatSize={setChatSize}\n chatSize={chatSize}\n isStreamEnd={isStreamEnd}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onTypeResponseClick={() => { \n setIsInputGlowing(true);\n textAreaRef.current?.focus();\n }}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\n isGlobalEditActive={isGlobalEditActive}\n fieldLabelMap={fieldLabelMap}\n />\n {message.hasOwnProperty('isEnd') &&\n !message?.isEnd &&\n message?.content?.length > 0 && (\n <>\n <Skeleton variant=\"text\" width={'50%'} height={20} />\n <div style={{ marginTop: '10px' }}></div>\n <Skeleton variant=\"text\" width={'100%'} height={40} />\n </>\n )}\n <div className={styles.timestamp}>\n {message.time && !isNaN(new Date(message.time).getTime()) \n ? new Date(message.time).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n : new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n }\n </div>\n </>\n ) : (\n <div className={styles.userMessageWrapper}>\n <div className={styles.userMessageBubble}\n style={{\n transition: 'box-shadow 0.3s ease-in-out',\n boxShadow: (!message.isSkeleton && !anySkeletonActive && message.id === highlightedMessageId)\n ? '0 0 15px 3px rgba(37, 99, 235, 0.6)'\n : 'none'\n }}>\n {message.isSkeleton ? (\n <div style={{ \n display: 'flex', \n flexDirection: 'column', \n gap: '12px', \n minWidth: '280px',\n padding: '8px 0' \n }}>\n <Skeleton variant=\"text\" width=\"100%\" height={16} />\n <Skeleton variant=\"text\" width=\"80%\" height={16} />\n </div>\n ) : (\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={stableHandleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n isStreamEnd={isStreamEnd}\n isGlobalEditActive={isGlobalEditActive}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\n fieldLabelMap={fieldLabelMap}\n />\n )}\n <div style={{marginTop: '0.5rem'}}>\n <UserIcon />\n </div>\n </div>\n <div className={styles.userTimestamp}>\n {new Date(message.time).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {messageLoading && (\n <div className={styles.loadingRow}>\n <div className={styles.iconWrapper} style={{ marginTop: '0.2rem' }}>\n <SparkleIcon />\n </div>\n <div className={styles.loadingTextWrapper}>\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n <div ref={messagesEndRef} style={{ float: 'left', clear: 'both' }} />\n </div>\n </div>\n {/* {isCopyEnabled && (\n <div \n style={{\n display: 'flex', \n justifyContent: 'flex-end', \n width: '100%', \n position: 'relative', \n paddingRight: '20px',\n height: '0px',\n overflow: 'visible'\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n > */}\n {/* Invisible hover target - no visual, just a hit area */}\n {/* <div style={{\n position: 'absolute',\n right: '20px',\n top: '-80px',\n width: '120px',\n height: '80px',\n }} />\n\n {showCopyButtons && (\n <div style={{\n position: 'absolute',\n right: '20px',\n bottom: '10px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n backgroundColor: '#fff',\n borderRadius: '8px',\n boxShadow: '0 2px 12px rgba(0,0,0,0.12)',\n padding: '4px',\n zIndex: 100,\n animation: 'fadeIn 0.3s ease-in-out'\n }}>\n <button\n onClick={copyCurrentMessage}\n style={{\n padding: '10px 14px',\n backgroundColor: 'transparent',\n color: '#000',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: '500',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n whiteSpace: 'nowrap'\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = '#f5f5f5'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {copiedButton === 'messages' ? <Check width=\"16\" height=\"16\" /> : <Copy width=\"16\" height=\"16\" />}\n {copiedButton === 'messages' ? 'Copied!' : 'Copy Your Messages'}\n </button>\n <button\n onClick={copyEntireChat}\n style={{\n padding: '10px 14px',\n backgroundColor: 'transparent',\n color: '#000',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: '500',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n whiteSpace: 'nowrap'\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = '#f5f5f5'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {copiedButton === 'entire' ? <Check width=\"16\" height=\"16\" /> : <Copy width=\"16\" height=\"16\" />}\n {copiedButton === 'entire' ? 'Copied!' : 'Copy Entire Chat'}\n </button>\n </div>\n )}\n </div>\n )} */}\n <div className={styles.inputAreaWrapper}>\n {/* {isStreaming && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n paddingBottom: '8px',\n paddingLeft: '4px',\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\n fontSize: '0.875rem',\n color: '#6b7280',\n width: '100%',\n }}\n >\n <span>Instant Learning AI is thinking</span>\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: '-0.32s',\n }}\n />\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: '-0.16s',\n }}\n />\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n }}\n />\n </Box>\n )} */}\n <Tooltip\n title={isFormValidating ? 'Please wait for the validation to be completed.' : ''}\n >\n \n <div \n className={`${styles.inputBoxContainer} ${isTextareaDisabled ? styles.disabled : ''}`}\n style={isInputGlowing ? {\n boxShadow: '0 0 15px 3px rgba(37, 99, 235, 0.5)',\n borderColor: '#2563eb',\n transition: 'box-shadow 0.3s ease-in-out, border-color 0.3s ease-in-out'\n } : {\n transition: 'box-shadow 0.3s ease-in-out, border-color 0.3s ease-in-out'\n }}\n >\n {messages.length > 0 && !isAtBottom && (\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n scrollToBottom('smooth');\n }}\n className={styles.scrollToBottomBtn}\n >\n <ScrollToBottom />\n </div>\n )}\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder={textareaPlaceholder}\n value={userInput || ''} \n onChange={(e) => {\n setUserInput(e.target.value); \n }}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n disabled={isTextareaDisabled}\n className={`no-scrollbar ${styles.chatTextarea}`}\n style={{\n // Change: Check if focused OR if there's a long draft\n minHeight: (isFocused || (userInput && userInput.length > 40)) ? '120px' : '50px',\n height: (isFocused || (userInput && userInput.length > 40)) ? '120px' : '50px',\n maxHeight: '120px',\n }}\n />\n <span className={styles.sendButtonWrapper}>\n <button\n onClick={(e) => {\n if(isSendButtonDisabled) return;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }));\n }}\n disabled={isSendButtonDisabled}\n className={`${styles.sendButton} ${isSendButtonDisabled ? styles.disabled : styles.active}`}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </Tooltip>\n </div>\n <div className={styles.footerTools}>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n },\n },\n }}\n >\n <span className={styles.footerToolItem}>\n <AudioWaveform\n amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false}\n />\n </span>\n </Tooltip>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n },\n },\n }}\n >\n <span className={styles.footerToolItem}>\n <AudioWaveform\n amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false}\n />\n </span>\n </Tooltip>\n </div>\n {/* --- SESSION INVALID POPUP --- */}\n <Dialog \n open={sessionInvalidPopupOpen} \n onClose={() => {}} // Empty function prevents closing by clicking the backdrop\n PaperProps={{\n sx: {\n borderRadius: '12px',\n padding: '8px',\n maxWidth: '400px',\n backgroundColor: 'var(--il-surface, #ffffff)',\n color: 'var(--il-foreground, #0F172A)',\n }\n }}\n >\n <Box sx={{ p: 3, textAlign: 'center', fontFamily: \"'Plus Jakarta Sans', sans-serif\" }}>\n <h3 style={{ fontSize: '18px', fontWeight: 600, color: 'var(--il-foreground, #0F172A)', marginBottom: '10px' }}>\n Session Expired\n </h3>\n <p style={{ fontSize: '14px', color: 'var(--il-muted, #64748B)', lineHeight: '1.5', marginBottom: '20px' }}>\n Changes were made to the learnings in this scope while you were editing. To avoid conflicts, concurrent edits aren’t allowed.\n </p>\n \n <Box sx={{ display: 'flex', gap: 2, justifyContent: 'center' }}>\n <button \n onClick={() => {\n setSessionInvalidPopupOpen(false);\n resetChatHistory();\n }}\n style={{ \n flex: 1, padding: '10px 16px', cursor: 'pointer', backgroundColor: 'var(--il-secondary-bg, white)',\n border: '1px solid var(--il-border, #E2E8F0)', borderRadius: '8px', fontSize: '14px',\n fontWeight: 500, color: 'var(--il-secondary-fg, #475569)', transition: 'all 0.2s'\n }}\n onMouseOver={(e) => e.currentTarget.style.backgroundColor = 'var(--il-hover, #F8FAFC)'}\n onMouseOut={(e) => e.currentTarget.style.backgroundColor = 'var(--il-secondary-bg, white)'}\n >\n Reset Session\n </button>\n <button \n onClick={() => {\n setSessionInvalidPopupOpen(false);\n onCloseSessionModal?.();\n }}\n style={{ \n flex: 1, padding: '10px 16px', backgroundColor: 'var(--il-danger, #EF4444)', color: 'var(--il-primary-fg, white)',\n border: 'none', borderRadius: '8px', fontSize: '14px', fontWeight: 500,\n cursor: 'pointer', transition: 'background-color 0.2s'\n }}\n onMouseOver={(e) => e.currentTarget.style.backgroundColor = 'var(--il-danger-hover, #DC2626)'}\n onMouseOut={(e) => e.currentTarget.style.backgroundColor = 'var(--il-danger, #EF4444)'}\n >\n Discard & Close\n </button>\n </Box>\n </Box>\n </Dialog>\n </div>\n );\n};\n\nexport default ChatComponent;\n"],"names":["uuidv4","preservedMessagesRef","preservedList","isLastMessageUser","userQuestionTime","_a","_b","_c","_d","_e","_f"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChatComponent.js","sources":["../../../../../src/features/IL-OTJ/_components/ChatComponents/ChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Box, Dialog, keyframes } from '@mui/material';\nimport Tooltip from '@mui/material/Tooltip';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport { http } from '../../../../api/transport';\nimport { v4 as uuidv4 } from 'uuid';\nimport { startChatStream, stopStreaming } from '@e-llm-studio/streaming-response';\nimport { WatchMeWork } from '@e-llm-studio/watch-me-work';\nimport ChatHeader from './ChatHeader';\nimport MessageRendering from '../MessageRendering/MessageRendering';\nimport { Skeleton } from '../atoms/SkeletonLoader/SkeletonLoader';\nimport { ActionableButton } from '../MessageRendering/ClickableChatComponents';\nimport MinimizedThinkingSteps from '../MinimizedThinkingSteps';\nimport AudioWaveform from '../AudioWaveform';\nimport styles from './ChatComponent.module.css';\nimport defaultStyles from '../../InstantLearning.module.css';\nimport { ScrollToBottom } from '../_svg/ScrollToBottom';\nimport { extractTextFromChildren, useHeaderObserver } from '../../helpers/utils';\nimport { SendButton } from '../_svg/SendButton';\nimport SparkleIcon from '../_svg/SparkleIcon';\nimport { UserIcon } from '../_svg/UserIcon';\nimport { Copy, Check } from 'lucide-react';\nimport useAuthStore from '../../../LearningManagement/store/useAuthStore';\n// import NewMinimizedThinkingSteps from '../NewMinimizedThinkingSteps';\n\n\ninterface AssistantMessage {\n role: string;\n content: string;\n id: string;\n citations: any[];\n time?: Date;\n orchestratorAndAgentsMessages?: any[];\n isEnd?: boolean; // Track if this message's GraphQL call has completed\n requestId?: string; // Track the request ID for this message\n sessionId?: string; // Track the session ID for this message\n}\ninterface ChatComponentProps {\n chatAssistantName: string;\n organizationName: string;\n baseUrl: string;\n baseWebsocketUrl: string;\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>;\n ThinkingBulbIconComponent: React.ReactNode;\n isFormSaveClicked: boolean;\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>;\n onResetLearningData?: () => void;\n sendMessageInChat: string;\n setSendMessageInChat?: React.Dispatch<React.SetStateAction<string>>;\n isFormValidating: boolean;\n chatTitle: string;\n customMetaData?: Record<string, any> | React.MutableRefObject<Record<string, any>>;\n headerMessageHandlers: any;\n aiResponse?: any;\n setAIResponse?: React.Dispatch<React.SetStateAction<unknown>>;\n onResetChat?: () => void;\n initialChatMessage?: string;\n onSave?: () => void;\n chatSize?: number;\n setChatSize: (size?: number) => void;\n movingTowards?: string;\n setCitations?: React.Dispatch<React.SetStateAction<string[]>>;\n textareaPlaceholder?: string;\n setCurrentRequestId?: React.Dispatch<React.SetStateAction<string>>;\n showSavedMessage?: boolean;\n savedMessage?: string;\n isError?: boolean;\n errorMessage?: string;\n isSaving?: boolean;\n isHighlighted?: boolean;\n /** Callback invoked when streaming state changes */\n onStreamingStateChange?: (isStreaming: boolean) => void;\n onViewComparison?: () => void;\n isCopyEnabled?: boolean;\n onComparisonLinkClick?: (variantId: string, fieldName: string) => void;\n onSubmitFeedback?: (payload: any) => Promise<void>;\n userDetails?: {\n name: string;\n id: string;\n email: string;\n }\n isGlobalEditActive?: boolean;\n socketTimeOutInMilliSeconds?: number | null;\n initialDraftMessage?: string;\n onValidateSession?: (startTime: string) => Promise<boolean>;\n onCloseSessionModal?: () => void;\n /** Schema-driven flow only: AI field key → user-facing label (see MessageRendering). */\n fieldLabelMap?: Record<string, string>;\n /** Verbose stream logs. Already resolved by the renderer — used as-is. */\n enableChatLogs?: boolean;\n}\n\nexport const autoGeneratePrompt = (baseUrl?: string, userInput?: string) => {\n return http.post(\n `${baseUrl||\"https://devllmstudio.creativeworkspace.ai\"}/api/chat/chatResponse`,\n {\n name: \"ilggcautopromptgen\",\n organizationName: \"techolution\",\n prompt:userInput || \"Generate a query\"\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n withCredentials: true,\n }\n )\n .then(response => {\n return response.data; \n })\n .catch(error => {\n console.error('Error calling auto-generate API:', error);\n throw error;\n });\n};\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({\n chatAssistantName,\n organizationName,\n baseUrl,\n baseWebsocketUrl,\n setIsNewChatClicked,\n ThinkingBulbIconComponent,\n isFormSaveClicked,\n setIsFormSavedClicked,\n onResetLearningData,\n sendMessageInChat,\n setSendMessageInChat,\n isFormValidating,\n chatTitle,\n customMetaData,\n headerMessageHandlers,\n aiResponse,\n setAIResponse,\n onResetChat,\n initialChatMessage = '',\n onSave,\n chatSize,\n setChatSize,\n movingTowards,\n setCitations,\n textareaPlaceholder = \"Tell me more about this learning...\",\n setCurrentRequestId,\n showSavedMessage = false,\n savedMessage,\n isError = false,\n errorMessage = 'There was an error saving your changes.',\n isSaving = false,\n isHighlighted = false,\n onStreamingStateChange,\n onViewComparison,\n isCopyEnabled = true,\n onComparisonLinkClick,\n onSubmitFeedback,\n userDetails,\n isGlobalEditActive,\n socketTimeOutInMilliSeconds,\n initialDraftMessage = '',\n onValidateSession,\n onCloseSessionModal,\n fieldLabelMap,\n enableChatLogs = false,\n}) => {\n const chatAssistant = chatAssistantName;\n const user = useAuthStore((state) => state.user);\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl;\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const shouldAutoScrollRef = useRef<boolean>(true);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n\n const [userInput, setUserInput] = useState<null | string>(initialDraftMessage);\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState<boolean>(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState<boolean>(false);\n const [isStreamEnd, setIsStreamEnd] = useState<boolean>(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState<boolean>(true);\n const [chatInitialMessage, setChatInitialMessage] = useState<string>('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState<string>('');\n const [isStreaming, setIsStreaming] = useState<boolean>(false);\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [isAtBottom, setIsAtBottom] = useState<boolean>(true);\n const [availableHeight, setAvailableHeight] = useState<string>('100%');\n const [initialSelection, setInitialSelection] = useState<string | null>(null);\n const [isAwaitingValidationResponse, setIsAwaitingValidationResponse] = useState<boolean>(false);\n const [pendingSuccessMessage, setPendingSuccessMessage] = useState<boolean>(false);\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const processedWtaWntaRef = useRef<Set<string>>(new Set());\n const [highlightedMessageId, setHighlightedMessageId] = useState<string | null>(null);\n const [isInputGlowing, setIsInputGlowing] = useState<boolean>(false);\n const [showCopyButtons, setShowCopyButtons] = useState<boolean>(false);\n const [copiedButton, setCopiedButton] = useState<string | null>(null);\n const copyButtonsTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const copiedTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n \n const streamStartTimesRef = useRef<Map<string, number>>(new Map());\n const currentStreamRequestIdRef = useRef<string>('');\n const streamCompletedRef = useRef<Set<string>>(new Set());\n const streamGenerationRef = useRef(0);\n const isMountedRef = useRef(true);\n \n // Tracks messages that should be preserved for a given requestId\n const preservedMessagesRef = useRef<Map<string, string[]>>(new Map());\n\n // Guard against rapid-fire messages (duplicate message bug)\n const isRequestInFlightRef = useRef<boolean>(false);\n\n // NEW: Track total times UI calls startChatStream\n const streamInvocationCountRef = useRef<number>(0);\n\n // NEW: Refs for managing the inactivity timeout\n const streamTimeoutRefsMap = useRef<Map<string, NodeJS.Timeout>>(new Map());\n const sessionStartTimeRef = useRef<string | null>(null);\n const [sessionInvalidPopupOpen, setSessionInvalidPopupOpen] = useState(false);\n\n const thinkingBounce = keyframes`\n 0%, 80%, 100% {\n transform: scale(0);\n }\n 40% {\n transform: scale(1.0);\n }\n `;\n\n const isInputEmpty = useMemo(() => {\n return userInput?.trim() === '' || isStreaming;\n }, [userInput, isStreaming]);\n\n const isTextareaDisabled = useMemo(\n () => isFormValidating, \n [isFormValidating]\n );\n const isLastMessageUser = useMemo(\n () => messages.length > 0 && messages[messages.length - 1]?.role === 'user',\n [messages]\n );\n \n const isSendButtonDisabled = useMemo(\n () => isInputEmpty || isFormValidating || !!isGlobalEditActive || ( isLastMessageUser),\n [isInputEmpty, isFormValidating, isGlobalEditActive, isLastMessageUser]\n );\nconst accessTokenRef = useRef(user?.accessToken);\n useEffect(() => {\n accessTokenRef.current = user?.accessToken;\n }, [user?.accessToken]);\nuseEffect(() => {\n if (initialDraftMessage && !userInput) {\n setUserInput(initialDraftMessage);\n setIsFocused(true); // Explicitly tell state we are focused\n \n // Wait 400ms for the MUI Dialog to finish its entry animation.\n // Otherwise, the Dialog traps focus and triggers onBlur.\n setTimeout(() => {\n if (textAreaRef.current) {\n textAreaRef.current.focus();\n const textLength = initialDraftMessage.length;\n textAreaRef.current.setSelectionRange(textLength, textLength);\n }\n }, 400); \n }\n }, [initialDraftMessage]);\n\n // Notify parent when streaming state changes\n useEffect(() => {\n onStreamingStateChange?.(isStreaming);\n }, [isStreaming, onStreamingStateChange]);\n\n // NEW: Cleanup timeout on component unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n streamGenerationRef.current += 1;\n streamTimeoutRefsMap.current.forEach(timer => clearTimeout(timer));\n streamTimeoutRefsMap.current.clear();\n if (currentStreamRequestIdRef.current && baseWebsocketUrl) {\n stopStreaming(currentStreamRequestIdRef.current, baseWebsocketUrl, false);\n }\n };\n }, [baseWebsocketUrl]);\n\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n const handleManualScroll = () => {\n if (scrollContainer) {\n const { scrollTop, scrollHeight, clientHeight } = scrollContainer;\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n const reachedBottom = distanceToBottom <= 20;\n setIsAtBottom(reachedBottom);\n }\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleManualScroll);\n handleManualScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleManualScroll);\n }\n };\n }, [messages]);\n\n const { processHeaderMessage } = useHeaderObserver({\n handlers: headerMessageHandlers,\n setResult: setAIResponse,\n });\n\n useEffect(() => {\n if (showSavedMessage) {\n setPendingSuccessMessage(true);\n }\n}, [showSavedMessage]);\n\n useEffect(() => {\n if (isInputGlowing) {\n const timer = setTimeout(() => {\n setIsInputGlowing(false);\n }, 3000);\n \n // Cleanup the timer if the user types before 3s or if the component unmounts\n return () => clearTimeout(timer);\n }\n }, [isInputGlowing]);\n \n useEffect(() => {\n if (isFormSaveClicked && !isGlobalEditActive) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save this Learning');\n setIsFormSavedClicked(false);\n }\n }, [isFormSaveClicked]);\n\n useEffect(() => {\n if (!sendMessageInChat) return;\n\n // Support skeleton start signals: \"__SKELETON__:<id>:<message>\"\n // and skeleton end signals: \"__SKELETON_END__::<message>\"\n try {\n if (sendMessageInChat.startsWith('__SKELETON__:')) {\n const parts = sendMessageInChat.split(':');\n const skId = parts[1];\n const message = parts.slice(2).join(':');\n // Append a skeleton user message (empty content, with skeleton meta)\n const skeletonMsg = {\n role: 'user',\n content: '',\n id: skId,\n time: new Date(),\n isSkeleton: true,\n skeletonContent: message,\n } as any;\n\n setMessages(prev => [...prev, skeletonMsg]);\n\n // Start the stream using the same id so the stream processing can\n // associate responses with this message id.\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, message, false, skId);\n\n setHighlightedMessageId(skId);\n setSendMessageInChat && setSendMessageInChat('');\n\n setTimeout(() => {\n setHighlightedMessageId(null);\n }, 2000);\n\n return;\n }\n\n if (sendMessageInChat.startsWith('__SKELETON_END__::')) {\n // Reveal skeleton content for any matching skeleton entry\n const message = sendMessageInChat.split('::')[1] || '';\n setMessages(prev => prev.map(m => {\n if ((m as any).isSkeleton) {\n return { ...m, isSkeleton: false, content: (m as any).skeletonContent || message };\n }\n return m;\n }));\n setSendMessageInChat && setSendMessageInChat('');\n return;\n }\n\n // Fallback: legacy simple string -> normal send\n const newMsgId = uuidv4();\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat, false, newMsgId);\n setHighlightedMessageId(newMsgId);\n setSendMessageInChat && setSendMessageInChat('');\n setTimeout(() => setHighlightedMessageId(null), 2000);\n } catch (err) {\n console.error('Error handling sendMessageInChat signal', err);\n }\n }, [sendMessageInChat]);\n\n useEffect(() => {\n getChatSettings();\n getChatHistory();\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n const newHeight = `calc(100% - ${headerHeight}px - 10px)`;\n setAvailableHeight(newHeight);\n };\n updateHeight();\n window.addEventListener('resize', updateHeight);\n return () => window.removeEventListener('resize', updateHeight);\n }, []);\n\n const scrollToBottom = useCallback((behavior?: ScrollBehavior | React.MouseEvent) => {\n const scrollBehavior: ScrollBehavior = typeof behavior === 'string' ? behavior : 'smooth';\n\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: scrollBehavior,\n block: 'end',\n });\n }\n\n if (shouldAutoScrollRef.current) {\n setTimeout(() => {\n if (messagesEndRef.current && shouldAutoScrollRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: scrollBehavior,\n block: 'end',\n });\n }\n }, 100);\n }\n }, []);\n\n // // ==========================================\n // // 🧪 SIMULATION USE-EFFECT (FOR TESTING ONLY)\n // // ==========================================\n // useEffect(() => {\n // // To run the test, change this to `true` and save.\n // const runTest = true; // Set to true to run the simulation test\n\n // if (!runTest) return;\n\n // const runSimulation = async () => {\n // const mockRequestId = `test-req-${uuidv4()}`;\n // const userQuestionTime = new Date();\n // const explainabilityMap = new Map();\n // let accordianMessageArray: any[] = [];\n\n // // Helper to simulate network latency\n // const delay = (ms: number) => new Promise(res => setTimeout(res, ms));\n\n // const frames = [\n // // Frame 1: First `preserve_message: true`\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Searching database for relevant data to address your request...\" }\n // }\n // }\n // },\n // // Frame 2: WatchMeWork Agent (Testing that standard accordion logic still works)\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: true,\n // is_orchestrator: false,\n // preserve_message: false,\n // responded_by: \"ILInterpretationAgent\",\n // header_message: \"Finding your needles in the hay mountain...\",\n // message: { content: \"Analyzing rule overlapping for Audacy...\" }\n // }\n // }\n // },\n // // Frame 3: Second `preserve_message: true` \n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Found 3 existing configurations for KYKY.\" }\n // }\n // }\n // },\n // // Frame 4: Third `preserve_message: true`\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: false,\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: true,\n // message: { content: \"Checking for critical gaps in order separation...\" }\n // }\n // }\n // },\n // // Frame 5: Final Orchestrator Response (isEnd: true)\n // {\n // chatStream: {\n // continueChatResult: {\n // requestId: mockRequestId,\n // isEnd: true, // End of stream\n // thinking_break: false,\n // is_orchestrator: true,\n // preserve_message: false,\n // message: { content: \"Based on my analysis, I can help you create a new variant for the 12-minute order separation rule. Would you like to proceed?\" }\n // }\n // }\n // }\n // ];\n\n // // Execute frames sequentially\n // for (const frame of frames) {\n // await delay(1500); // Wait 1.5s between frames\n \n // handleMessages(\n // frame,\n // explainabilityMap,\n // accordianMessageArray,\n // userQuestionTime,\n // \"Simulate a data fetch request\", // Mock User Input\n // false,\n // mockRequestId\n // );\n // }\n // };\n\n // // Delay the start slightly so the component can mount\n // setTimeout(() => {\n // runSimulation();\n // }, 1000);\n\n // }, []); // Empty dependency array so it only triggers on mount\n // // ==========================================\n\n // useEffect(() => {\n // const dummyRuleMessage = {\n // role: 'assistant',\n // id: `debug-${uuidv4()}`,\n // time: new Date(),\n // isEnd: true,\n // citations: [],\n // content: `\n \n // <!--\\`\\`\\`json property=\"updated_fields\"\n // {\n // \"wta\": \"Applies globally to all advertisers and break codes unless specifically exempted <ai_reasoning><id>1</id><reason>- The user explicitly confirmed that the rule should [Apply globally to all advertisers and break codes unless specifically exempted](citationNumber=1&citation_type=terminology&citationSource=T4&relevanceScore=95&chat_citation_id=0).\\\\n- This resolves the previously identified gap for the [When to Apply](citationNumber=2&citation_type=terminology&citationSource=T4&relevanceScore=95) condition for the [Inventory Window Matching](citationNumber=3&citation_type=rule_book&citationSource=R1&relevanceScore=95) rule.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\",\n // \"variant_type\": \"default_variant\",\n // \"rule_type\": \"mandatory\",\n // \"scheduling_config\": {\n // \"order_rules\": {\n // \"enabled\": false,\n // \"global_min_separation_seconds\": 0\n // },\n // \"advertiser_rules\": {\n // \"enabled\": false,\n // \"global_min_separation_seconds\": 0\n // },\n // \"inventory_rules\": {\n // \"respect_inventory_code\": true\n // },\n // \"break_code_rules\": {\n // \"respect_break_code\": false\n // },\n // \"is_default_enabled\": true\n // },\n // \"is_user_accepted_risk\": false\n // }\n // \\`\\`\\`-->\n\n // `,\n // };\n // setMessages((prev) => [...prev, dummyRuleMessage]);\n \n // }, []);\n\n// // ==========================================\n// // 🧪 SIMULATION USE-EFFECT (MULTI-SELECT TEST)\n// // ==========================================\n// useEffect(() => {\n// // Set to true to run the multi-select simulation test\n// const runMultiSelectTest = true; \n\n// if (!runMultiSelectTest) return;\n\n// const dummyMultiSelectMessage = {\n// role: 'assistant',\n// id: `debug-multiselect-${Date.now()}`,\n// time: new Date(),\n// isEnd: true, // Must be true so the MarkdownSelect enables the interactive buttons\n// citations: [],\n// content: `Here is a test for the multi-select component. Which of the following conditions would you like to apply to this rule?\n \n// <multiselect>\n// <selectoption id=\"opt_global\">Apply globally to all advertisers\n// <ai_reasoning>\n// <reason>Applying globally ensures there are no accidental gaps in the order separation rules across networks.</reason>\n// <gap>None</gap>\n// <relevance_score>95</relevance_score>\n// </ai_reasoning>\n// </selectoption>\n// <selectoption id=\"opt_strict\">Enforce strict inventory limits\n// <ai_reasoning>\n// <reason>Based on historical configurations, local advertisers often require exemptions from strict spacing rules.</reason>\n// <relevance_score>88</relevance_score>\n// </ai_reasoning>\n// </selectoption>\n\n// <selectoption id=\"typeYourAnswer\"> Or, Type your response</selectoption>\n// </multiselect>\n\n// `\n// };\n\n// // Delay the start slightly so the component has time to mount\n// setTimeout(() => {\n// setMessages((prev) => [...prev, dummyMultiSelectMessage]);\n// }, 1000);\n\n// }, []);\n// // ==========================================\n\n// // Temporary Simulation Hook\n// useEffect(() => {\n// const timer = setTimeout(() => {\n// const dummyRuleMessage = {\n// role: 'assistant',\n// id: `debug-${uuidv4()}`,\n// time: new Date(),\n// citations: [],\n// content: `Hi\n// <!-- \\`\\`\\`json property=\"updated_fields\" { \"title\": \"Order Separation <ai_reasoning><id>2</id><reason>- The user **explicitly** confirmed **[order separation](citationNumber=4&citation_type=rule_book&citationSource=R1&relevanceScore=100&chat_citation_id=0)** as the rule type.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"rule_description\": \"Maintains a minimum separation of 20 minutes between ads with the same order number. <ai_reasoning><id>3</id><reason>- The [rule description](citationNumber=5&citation_type=rule_book&citationSource=R1&relevanceScore=100) is derived from the [Order Separation](citationNumber=6&citation_type=rule_book&citationSource=R1&relevanceScore=100&chat_citation_id=0) rule template.\\n- The [20 minutes](citationNumber=7&citation_type=terminology&citationSource=T17&relevanceScore=100&chat_citation_id=1) separation time was extracted from the user's input.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"wta\": \"When the advertiser is Audacy <ai_reasoning><id>4</id><reason>- The user specified that the rule **applies to [Audacy](citationNumber=8&citation_type=advertiser_names&citationSource=Audacy&relevanceScore=100&chat_citation_id=2) only**.\\n- This indicates a targeted application for the rule.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"variant_type\": \"Variant <ai_reasoning><id>5</id><reason>- The [When to Apply](citationNumber=9&citation_type=terminology&citationSource=T22&relevanceScore=100) condition is specific to an entity ([Audacy](citationNumber=10&citation_type=advertiser_names&citationSource=Audacy&relevanceScore=100&chat_citation_id=2)), therefore the variant type is 'Variant'.</reason><gap></gap><relevance_score>100</relevance_score></ai_reasoning>\", \"scheduling_config\": { \"custom_sep_time_for_entities\": { \"order_sep_times\": { \"advertiser\": { \"Audacy\": 1200 } } } }, \"is_user_accepted_risk\": false }\\`\\`\\` -->\n// To finalize the configuration, please specify the tier for this rule.<!-- <ai_reasoning><id>6</id><reason>- The [tier](citationNumber=11&citation_type=terminology&citationSource=T4&relevanceScore=95) for the rule has not been explicitly confirmed by the user in the current or previous turns.\\n- The UI State value for scope is not considered a confirmed value without explicit user input.</reason><gap>- The tier assignment is missing.</gap><relevance_score>95</relevance_score></ai_reasoning> -->\n// `,\n// };\n// setMessages((prev) => [...prev, dummyRuleMessage]);\n// }, 1500);\n// return () => clearTimeout(timer);\n// }, []);\n\n \n useEffect(() => {\n if (!isStreaming) {\n let content = \"\";\n if (pendingSuccessMessage) {\n content = savedMessage || \"Thank you teacher for teaching me, your rule has been saved successfully.\";\n } else if (isError) {\n content = errorMessage || \"I'm sorry, I couldn't save your changes. Please try again.\";\n }\n\n if (content) {\n const systemMsg = {\n role: 'assistant',\n content: content,\n id: uuidv4(),\n citations: [],\n time: new Date(),\n };\n\n setMessages(prev => [...prev, systemMsg]);\n setPendingSuccessMessage(false);\n setTimeout(() => scrollToBottom('smooth'), 100);\n }\n }\n}, [pendingSuccessMessage, isError, isStreaming, savedMessage, errorMessage, scrollToBottom]);\n\n useEffect(() => {\n if (shouldAutoScrollRef.current) {\n scrollToBottom('smooth');\n }\n }, [scrollToBottom]);\n\n\n const getChatSettings = () => {\n let config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: `${url}/api/chatbot/getChatSettings?name=${chatAssistant}&organizationName=${organizationName}`,\n headers: user?.accessToken ? { Authorization: `Bearer ${user.accessToken}` } : {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n if (response?.data?.chatSettings?.chatInitialMessage !== '') {\n setShowWelcomeMessage(true);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const getChatHistory = async () => {\n const getHistoryURL = `${url}/api/chat/history?name=${chatAssistant}&organizationName=${organizationName}`;\n\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n headers: user?.accessToken ? { Authorization: `Bearer ${user.accessToken}` } : {},\n withCredentials: true,\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n if (data.length > 0) {\n setMessages(data);\n scrollToBottom();\n } else {\n setShowWelcomeMessage(true);\n }\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n const resetChatHistory = () => {\n const resetChatHistoryURL = `${url}/api/chat/resetHistory?name=${chatAssistant}&organizationName=${organizationName}`;\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true,\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n setIsNewChatClicked(true);\n setChatInitialMessage('');\n setInitialSelection(null);\n processedWtaWntaRef.current.clear();\n preservedMessagesRef.current.clear(); // Clears preserved messages on reset\n chatPreviewIdRef.current = `${uuidv4()}`;\n setMessages([]);\n setShowWelcomeMessage(true);\n sessionStartTimeRef.current = null;\n onResetChat?.();\n if (onResetLearningData) {\n onResetLearningData();\n }\n })\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n guestSessionIdRef.current = `${chatAssistant}-${organizationName}-${uuidv4()}`;\n })\n\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n const regex = /<a [^>]*>.*?<\\/a>/g;\n const replacedString = inputString?.replace(regex, (match) => {\n return match?.replace(/\\*/g, '*');\n });\n return replacedString;\n }\nconst getAssistantObj2 = (\n data: any, \n accordianMessageArray: any[], \n explainabilityMap: Map<string, any>, \n preservedMessagesRef: React.MutableRefObject<Map<string, string[]>>\n ) => {\n let streamedresponse : AssistantMessage = { \n role: 'assistant', \n content: '', \n id: uuidv4(), \n time: new Date(),\n citations: [] \n };\n \n const continueResult = data?.chatStream?.continueChatResult || {};\n const requestId = continueResult?.requestId;\n const isPreserve = continueResult?.preserve_message;\n const isEnd = continueResult?.isEnd;\n const currentContent = continueResult?.message?.content || '';\n const isOrchestrator = continueResult?.is_orchestrator;\n const isThinkingBreak = continueResult?.thinking_break;\n const isCitationsPresent = continueResult?.message?.citations || [];\n\n // 1. Accumulate preserved messages throughout the stream (never on the isEnd frame).\n if (requestId && isPreserve && currentContent && !isEnd ) {\n let preservedList = preservedMessagesRef.current.get(requestId) || [];\n // Prevent consecutive duplicate appends\n if (preservedList[preservedList.length - 1] !== currentContent) {\n preservedList.push(currentContent);\n preservedMessagesRef.current.set(requestId, preservedList);\n }\n }\n\n // 2. Build the rendered content:\n // - preserved messages are shown statically as they arrive (no waiting for isEnd)\n // - live currentContent streams below the preserved block on every non-preserve frame\n // - on isEnd=true: drop currentContent entirely, show only preservedList\n const preservedList = requestId ? (preservedMessagesRef.current.get(requestId) || []) : [];\n const preservedBlock = preservedList.join('\\n\\n');\n\n let finalContent = '';\n if (isEnd) {\n // If there are preserved messages, show them. Otherwise, show the final response (currentContent)\n if (preservedBlock && preservedBlock.trim() !== '') {\n finalContent = preservedBlock;\n } else {\n // Show the final response content if nothing was preserved\n finalContent = currentContent;\n }\n } else if (isPreserve) {\n // This frame itself is being preserved — show the full preserved block\n // (already includes this frame since we accumulated it above)\n finalContent = preservedBlock;\n } else {\n // Live streaming frame — show preserved block (static, above) +\n // currentContent (live, below). Strip unclosed XML comment blocks.\n const stripped = currentContent.replace(/<!--(?![\\s\\S]*-->)[\\s\\S]*$/, '').trimEnd();\n const liveContent = (isOrchestrator !== false && !isThinkingBreak && isCitationsPresent.length === 0) ? stripped : '';\n finalContent = preservedBlock\n ? `${preservedBlock}\\n\\n${liveContent}`\n : liveContent;\n }\n\n streamedresponse.content = replaceAsteriskInAnchor(finalContent);\n\n // Accordion / Explainability / WatchMeWork logic\n if (\n continueResult?.thinking_break === true &&\n continueResult?.is_orchestrator === true &&\n continueResult?.isEnd === false\n ) {\n accordianMessageArray.push({\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n });\n }\n\n if (\n continueResult?.thinking_break === false &&\n continueResult?.is_orchestrator === false &&\n continueResult?.isEnd === false\n ) {\n if (continueResult.explainability_id && continueResult.responded_by) {\n const explainabilityId = continueResult.explainability_id;\n const respondedBy = continueResult.responded_by;\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, {\n responded_by: respondedBy,\n index: accordianMessageArray.length,\n });\n }\n }\n\n if (explainabilityMap.has(continueResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(continueResult.explainability_id);\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: true,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: true,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: false,\n },\n ];\n }\n }\n\n if (\n continueResult?.thinking_break === true &&\n continueResult?.is_orchestrator === false &&\n continueResult?.isEnd === false\n ) {\n if (continueResult.explainability_id && continueResult.responded_by) {\n const explainabilityId = continueResult.explainability_id;\n const respondedBy = continueResult.responded_by;\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, {\n responded_by: respondedBy,\n index: accordianMessageArray.length,\n });\n }\n }\n\n if (explainabilityMap.has(continueResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(continueResult.explainability_id);\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray.push({\n responsedata: currentContent,\n responseFrom: continueResult.responded_by,\n header_message: continueResult.header_message,\n finalResponseStatus: false,\n explainability_id: continueResult.explainability_id ?? '',\n isParallelToolResponse: false,\n });\n }\n }\n \n let assistantObj = {\n orchestratorAndAgentsMessages: accordianMessageArray,\n ...streamedresponse,\n };\n return assistantObj;\n };\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n if (startIndex !== -1) {\n const extractedString = inputString.substring(startIndex + prefix.length);\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (\n data: any,\n explainabilityMap: any,\n accordianMessageArray: any,\n userQuestionTime: any,\n userInputParam: string,\n isFirstQuestionSent?: boolean,\n customId?: string \n ) => {\n if (data?.chatStream?.continueChatResult?.header_message) {\n const headerMsg = {\n header_message: data.chatStream.continueChatResult.header_message,\n responsedata: data?.chatStream?.continueChatResult?.message?.content,\n };\n processHeaderMessage(headerMsg);\n }\n\n const continueResult = data?.chatStream?.continueChatResult;\n const isEnd = continueResult?.isEnd;\n const citations = continueResult?.message?.citations || [];\n\n if (isEnd && citations.length > 0 && setCitations) {\n setCitations(citations);\n }\n\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n \n if (streamedresponse.content !== '') {\n setMessageLoading(false);\n setMessages([\n ...messages,\n {\n role: 'user',\n content: userInputParam,\n time: userQuestionTime,\n isFirstQuestionSent: isFirstQuestionSent || false,\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n reply: '',\n },\n streamedresponse,\n ]);\n }\n } else {\n setWaitMessageLoading(false);\n \n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n if (typeof incomingRequestId === 'string' && incomingRequestId && setCurrentRequestId) {\n setCurrentRequestId(incomingRequestId);\n }\n\n const assistantObject = getAssistantObj2(\n data, \n accordianMessageArray, \n explainabilityMap, \n preservedMessagesRef\n );\n \n assistantObject.time = new Date();\n assistantObject.citations = citations;\n \n assistantObject.isEnd = data?.chatStream?.continueChatResult?.isEnd;\n assistantObject.requestId = data?.chatStream?.continueChatResult?.requestId;\n assistantObject.sessionId = guestSessionIdRef.current;\n \n\n assistantObject.orchestratorAndAgentsMessages?.forEach((msg: any) => {\n if (msg && msg.header_message) {\n processHeaderMessage(msg);\n }\n });\n\n if (\n assistantObject?.content !== '' || \n (assistantObject?.orchestratorAndAgentsMessages && assistantObject?.orchestratorAndAgentsMessages.length > 0)\n ) {\n setMessageLoading(false);\n setMessages([\n ...messages,\n {\n role: 'user',\n content: userInputParam || '',\n time: userQuestionTime,\n isFirstQuestionSent: isFirstQuestionSent || false,\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n requestId: data?.chatStream?.continueChatResult?.requestId ?? '',\n },\n assistantObject,\n ]);\n }\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n };\n\n // NEW: Shared function to execute when timeout passes OR websocket throws an error\n const handleStreamTimeout = useCallback((requestId: string, reason: string = \"inactivity\") => {\n console.error(`🛑 Stream failed or timed out due to:reason=${reason} requestId=${requestId} at ${new Date().toISOString()}`);\n\n // Clear only this request's own timer\n const timer = streamTimeoutRefsMap.current.get(requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(requestId);\n }\n\n // Always safe to stop THIS specific request and clean its preserved messages\n if (requestId && baseWebsocketUrl) {\n stopStreaming(requestId, baseWebsocketUrl, false);\n preservedMessagesRef.current.delete(requestId);\n }\n\n // Only this request's timeout is allowed to touch global UI state / show the retry bubble — a stale timeout for a superseded request must not clobber the state of whatever stream is actually active now.\n const isStillActiveStream = requestId === currentStreamRequestIdRef.current;\n if (!isStillActiveStream) {\n console.warn(`🛑 [handleStreamTimeout] Ignoring stale timeout for superseded requestId=${requestId}; active=${currentStreamRequestIdRef.current}`);\n return;\n }\n \n // 1. Reset standard UI and flight states\n isRequestInFlightRef.current = false;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n \n // Turn off the loading text\n setMessageLoading(false); \n setWaitMessageLoading(false); \n\n // 2. Append an error message with a Retry button\n setMessages(prev => {\n // Find the most recent message sent by the user\n const lastUserMessage = [...prev].reverse().find(msg => msg.role === 'user');\n const retryQuery = lastUserMessage?.content || '';\n \n // Escape any double quotes in the query so it doesn't break the HTML attribute\n const safeRetryQuery = retryQuery.replace(/\"/g, '"');\n\n // Check if the very last message in the chat is an incomplete assistant message.\n const updatedMessages = [...prev];\n const lastMessage = updatedMessages[updatedMessages.length - 1];\n \n if (lastMessage && lastMessage.role === 'assistant' && !lastMessage.isEnd) {\n updatedMessages.pop(); // Remove the broken partial message\n }\n\n // custom error message\n let errorText = \"I ran into an unexpected issue while trying to process this learning.\";\n if (reason === \"inactivity\") {\n errorText = \"Something went wrong—teaching is taking longer than expected.\";\n } else if (reason === \"websocket_error\") {\n errorText = \"I lost connection to the server while working on that.\";\n }\n\n return [\n ...updatedMessages,\n {\n role: 'assistant',\n content: `${errorText} Please try again.\\n\\n<button class=\"clickable-button\" data-value=\"${safeRetryQuery}\">Retry</button>`,\n id: uuidv4(),\n time: new Date(),\n isEnd: true,\n citations: []\n }\n ];\n });\n }, [socketTimeOutInMilliSeconds, baseWebsocketUrl]);\n\n // Function to reset the timer on every successful stream chunk\n const resetStreamTimeout = useCallback((requestId: string) => {\n // 1. Always clear the existing timer if it exists\n const existing = streamTimeoutRefsMap.current.get(requestId);\n if (existing) clearTimeout(existing);\n\n // 2. ONLY start the timeout if the prop exists and is greater than 0\n if (socketTimeOutInMilliSeconds && socketTimeOutInMilliSeconds > 0) {\n console.log(`⏱️ [Timeout armed] requestId=${requestId} timeout=${socketTimeOutInMilliSeconds}ms at ${new Date().toISOString()}`);\n const timer = setTimeout(() => {\n console.warn(`⏱️ [Timeout FIRED — auto stop] requestId=${requestId} at ${new Date().toISOString()}`);\n handleStreamTimeout(requestId, \"inactivity\");\n }, socketTimeOutInMilliSeconds);\n streamTimeoutRefsMap.current.set(requestId, timer);\n }\n }, [handleStreamTimeout, socketTimeOutInMilliSeconds]);\n \n const handleStream = async (\n event?: any,\n isFirstQuestionSent?: boolean,\n userInputParam?: string,\n isValidationFailure: boolean = false,\n customId?: string,\n setIsLoading?: (loading: boolean) => void\n ) => {\n const contentSource = userInputParam !== undefined ? userInputParam : (userInput || '');\n const finalInput = contentSource.trim();\n\n const isEnterKey = event?.key === 'Enter' && !event?.shiftKey && !isGlobalEditActive;\n if (isEnterKey) {\n event?.preventDefault?.();\n }\n\n const isLastMessageUser = messages[messages.length - 1]?.role === 'user';\n\n if (!finalInput || isStreaming || isRequestInFlightRef.current || isLastMessageUser || (event?.key && !isEnterKey)) {\n \n return;\n }\n\n // --- SESSION VALIDATION LOGIC ---\n if (!sessionStartTimeRef.current) {\n sessionStartTimeRef.current = new Date().toISOString();\n console.log(`Session start time set to ${sessionStartTimeRef.current}`);\n }\n\n if (onValidateSession) {\n setMessageLoading(true);\n setInitialLoadingMessage(\"Validating session...\");\n try {\n const isValid = await onValidateSession(sessionStartTimeRef.current);\n if (!isValid) {\n setSessionInvalidPopupOpen(true);\n setMessageLoading(false);\n setIsLoading && setIsLoading(false);\n return; // Abort chat stream entirely\n }\n } catch (error) {\n console.error('Validation error:', error);\n setSessionInvalidPopupOpen(true);\n setMessageLoading(false);\n setIsLoading && setIsLoading(false);\n return;\n }\n // If valid, clear the validation message so the normal flow can take over\n setMessageLoading(false);\n }\n\n isRequestInFlightRef.current = true;\n\n const isEnterRuleDescriptionFlow = finalInput === \"I want to add a rule description\";\n\n if (isEnterRuleDescriptionFlow) {\n setIsStreamEnd(false);\n shouldAutoScrollRef.current = true;\n setIsStreaming(true);\n\n if (!initialSelection && finalInput) {\n setInitialSelection(userInputParam || \"manual_entry\");\n }\n\n const userQuestionTime = new Date();\n \n setMessages(prev => [\n ...prev.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace('WaitMessage: ', ''),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false, id: customId || uuidv4() },\n ]);\n scrollToBottom('smooth');\n\n setTimeout(() => {\n const AssistantMessage = \"I'd be happy to help you set up a new rule! To get started, could you tell me what kind of behavior or logic you would like this rule to follow?\";\n setMessages(prev => [\n ...prev,\n {\n role: 'assistant',\n content: AssistantMessage,\n id: uuidv4(),\n citations: [],\n time: new Date(),\n },\n ]);\n scrollToBottom('smooth');\n\n setTimeout(() => {\n setIsStreaming(false);\n setIsStreamEnd(true);\n }, 500);\n }, 500);\n\n return;\n }\n\n setIsStreamEnd(false);\n shouldAutoScrollRef.current = true;\n setIsStreaming(true);\n\n if (!initialSelection && finalInput) {\n setInitialSelection(userInputParam || \"manual_entry\");\n }\n\n const userQuestionTime = new Date();\n const streamGeneration = streamGenerationRef.current;\n setMessages(prev => {\n const mapped = prev.map(m => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace('WaitMessage: ', ''),\n }));\n if (customId && mapped.some(m => m.id === customId)) {\n // If a skeleton entry already exists for this id, update it but keep\n // any skeleton flag intact (it will be turned off by the end signal).\n return mapped.map(m => m.id === customId ? { ...m, content: finalInput } : m);\n }\n return [\n ...mapped,\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false, id: customId || uuidv4() },\n ];\n });\n scrollToBottom('smooth');\n\n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n // Add this helper inside ChatComponent, near where customMetaData is consumed\n const resolveMetaData = (\n meta: Record<string, any> | React.MutableRefObject<Record<string, any>> | undefined\n ): Record<string, any> => {\n if (!meta) return {};\n // A React ref has exactly {current: value} — real metadata always has many keys\n const keys = Object.keys(meta);\n if (keys.length === 1 && keys[0] === 'current') {\n return (meta as React.MutableRefObject<Record<string, any>>).current ?? {};\n }\n return meta as Record<string, any>;\n };\n const liveHeaders = {\n get Authorization() {\n return accessTokenRef.current ? `Bearer ${accessTokenRef.current}` : undefined;\n },\n};\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: userDetails?.name ?? 'Guest User',\n userEmailId: userDetails?.email ?? 'guestUser@example.com',\n userId: userDetails?.id ?? 'Guest User',\n query: finalInput,\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData:resolveMetaData(customMetaData),\n aiModel: '',\nadditionalHeaders: liveHeaders as Record<string, string>,\n enableLogs: true,\n logControls: {\n infoLogs: enableChatLogs,\n debugLogs: enableChatLogs,\n },\n \n onStreamEvent: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW LOG: Track incoming chunks\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n const headerMsg = data?.chatStream?.continueChatResult?.header_message;\n console.log(`📦 [Stream Chunk Received] With RequestID and header_message: ${incomingRequestId},${headerMsg}`);\n // NEW: Reset the timeout timer every time data is successfully received\n resetStreamTimeout(params.requestId);\n\n // NEW: Gracefully catch explicit agent errors\n const errorState = data?.chatStream?.continueChatResult?.error_state;\n if (Array.isArray(errorState) && errorState.length > 0) {\n console.error('⚠️ Agent returned an error_state during stream:', { requestId: incomingRequestId, errorState });\n \n // Abort stream and trigger the retry button UI\n handleStreamTimeout(params.requestId, \"agent_error\");\n return;\n }\n\n handleMessages(\n data,\n explainabilityMap,\n accordianMessageArray,\n userQuestionTime,\n finalInput,\n isFirstQuestionSent,\n customId \n );\n },\n onStreamEnd: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW LOG: Track clean finishes\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n streamCompletedRef.current.add(params.requestId);\n console.log(`✅ [Stream Completed] RequestID: ${incomingRequestId}`);\n // NEW: Clear the timeout since the stream finished successfully\n const timer = streamTimeoutRefsMap.current.get(params.requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(params.requestId);\n }\n\n isRequestInFlightRef.current = false;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n const endTime = Date.now();\n const startTime = streamStartTimesRef.current.get(params.requestId);\n if (startTime) {\n const timeTaken = Math.round((endTime - startTime) / 1000).toFixed(1); \n setMessages(prev => {\n const lastAssistantIdx = [...prev].reverse().findIndex(m => m.role === 'assistant');\n if (lastAssistantIdx === -1) return prev;\n const realIdx = prev.length - 1 - lastAssistantIdx;\n return prev.map((m, i) => i === realIdx ? { ...m, finalTimeTaken: timeTaken } : m);\n });\n }\n },\n onError: (error: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n // NEW: Clear the timeout on stream errors\n const timer = streamTimeoutRefsMap.current.get(params.requestId);\n if (timer) {\n clearTimeout(timer);\n streamTimeoutRefsMap.current.delete(params.requestId);\n }\n\n // NEW: if this request already completed cleanly, this is post-completion cleanup noise (e.g. from client.dispose()) — ignore it, don't show a false \"lost connection\" message or discard the completed response.\n if (streamCompletedRef.current.has(params.requestId)) {\n console.warn('Ignoring post-completion error for already-finished request:', params.requestId);\n streamCompletedRef.current.delete(params.requestId);\n return;\n }\n \n console.error('Stream error:', error);\n \n // Trigger the exact same failure logic as a timeout\n handleStreamTimeout(params.requestId, \"websocket_error\");\n },\n };\n\n if (finalInput) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom();\n const loadingMessage = customId \n ? `Just a moment, processing your request...` \n : `Okay, got it. Let me take a moment to work on this and I'll get back to you shortly.`;\n setInitialLoadingMessage(loadingMessage);\n streamStartTimesRef.current.set(params.requestId, Date.now()); \n currentStreamRequestIdRef.current = params.requestId; \n\n console.log(\"Chat Stream Params:\", params);\n\n // NEW: Start the timeout clock right before initiating the stream\n resetStreamTimeout(params.requestId);\n // NEW LOG: Track exactly how many times the UI calls the library\n streamInvocationCountRef.current += 1;\n console.log(`🚀 [UI Action] stream started (Total UI invocations: ${streamInvocationCountRef.current}) | RequestID: ${params.requestId} | Query: \"${finalInput}\"`);\n startChatStream(params);\n }\n setIsLoading && setIsLoading(false);\n };\n const handleStreamRef = useRef<typeof handleStream>(null as any);\n useLayoutEffect(() => {\n handleStreamRef.current = handleStream;\n });\n const stableHandleStream = useCallback(\n (...args: Parameters<typeof handleStream>) => handleStreamRef.current?.(...args),\n [] \n );\n \n\n \n const initialMarkdownComponents = useMemo(() => ({\n p: ({ node, children, ...props }: any) => (\n <div\n style={{\n margin: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '10px',\n fontFamily: 'inherit',\n }}\n >\n {children}\n </div>\n ),\n button: ({ node, className, children, ...props }: any) => {\n const label = extractTextFromChildren(children);\n const hiddenValue = props['data-value'];\n const isSelected = initialSelection === label || initialSelection === hiddenValue;\n const isDisabled = !!initialSelection || !!isGlobalEditActive;\n\n const isTesterGenie = label === 'Tester Genie';\n return (\n <ActionableButton\n {...props}\n className={className}\n handleStream={stableHandleStream} \n isStreamEnd={isStreamEnd}\n disabled={isDisabled}\n isLastMessage={true}\n style={{ margin: 0 }}\n isTesterGenie={isTesterGenie}\n data-selected={isSelected ? 'true' : initialSelection ? 'false' : undefined}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {children}\n\n {isTesterGenie && (\n <svg width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.20368 8.94768e-06C7.48895 -0.00208639 7.69331 0.364327 7.83856 0.57465C8.14381 1.01633 8.38012 1.87909 7.71077 2.14118C8.57167 2.21011 9.70406 2.93098 10.1785 3.64699C10.5932 4.27286 10.4559 5.16037 9.80301 5.56007L9.9502 7.16593C9.97671 7.44871 10.0265 7.87092 10.0299 8.14457C10.4213 8.23046 11.0787 8.55391 11.326 8.87592C11.5979 8.75656 11.9189 8.76963 12.1688 8.93469C12.3563 8.67751 12.5598 8.41456 12.7507 8.15787C12.3283 7.45155 12.5047 6.57745 13.2143 6.13784C13.5375 5.9377 13.9264 5.87277 14.2971 5.95705C14.0961 6.30964 13.8775 6.72182 13.6593 7.05857C13.7906 7.2436 13.9184 7.44225 14.044 7.63194L14.8022 7.63198C15.0349 7.30106 15.2515 6.90827 15.4835 6.59349C15.8623 7.0712 15.8156 7.79671 15.4734 8.28241C15.1318 8.76741 14.4886 8.9899 13.9118 8.88251C13.758 9.12108 13.5577 9.39243 13.3941 9.63201C13.7143 9.9316 13.7725 10.364 13.4067 10.6594C13.5231 10.8889 13.5309 11.1613 13.447 11.402C13.1502 12.2523 12.1724 12.5645 11.3474 12.5025C11.1171 12.4852 10.939 12.4698 10.7197 12.3953C10.8724 13.1271 10.7744 14.2031 10.5132 14.9051C10.1688 15.8304 9.43632 16.5569 8.54503 16.9655C7.90465 17.2706 7.21222 17.3607 6.50472 17.4505C5.74445 17.5471 4.75801 17.4362 4.08533 17.825C3.9327 17.9132 3.86566 18.0173 3.82943 18.1792C3.94996 18.5982 4.47858 18.6063 4.78474 18.8897C5.20191 19.2758 4.90716 19.9663 4.36611 19.9908C4.31476 19.9931 4.26867 19.9867 4.23186 19.9493C4.23089 19.8303 4.47587 19.7199 4.49787 19.5262C4.55075 19.0604 3.70014 19.0078 3.37835 18.8374C3.13013 18.706 2.99537 18.6309 2.82242 18.4021C2.63795 18.1579 2.58428 17.835 2.63138 17.5392C2.74868 16.7847 3.47123 16.393 4.12184 16.1497C4.61314 15.9659 5.46304 15.7158 5.52019 15.0793C5.58589 14.348 4.97543 13.5523 4.57739 12.9807C4.44275 12.7875 4.3039 12.579 4.16309 12.3919C4.18987 12.365 4.21049 12.3463 4.23916 12.3212C4.59619 12.6218 5.21209 12.6421 5.55038 12.2979C5.70457 12.144 5.78974 11.9342 5.78642 11.7164C5.78121 11.4493 5.63382 11.2002 5.4454 11.019C5.44704 10.9932 5.44824 10.9676 5.449 10.9419C5.4566 10.6648 5.37505 10.4902 5.1892 10.2943C5.18398 10.2538 5.17776 10.2134 5.17053 10.1732C5.08123 9.69297 4.71708 9.34182 4.23415 9.27108C4.16418 9.26083 3.96108 9.26105 3.92071 9.23344C3.90485 9.1828 3.9059 9.20792 3.91904 9.15527C4.22103 8.90139 4.14407 8.78214 4.31107 8.4846C4.42301 8.28513 4.73047 8.15239 4.95452 8.10701C4.96167 7.51076 5.03684 6.88562 5.10036 6.29144C5.12451 6.0655 5.12531 5.75046 5.1511 5.55257C4.11108 4.86747 4.39091 3.75946 5.25465 3.06391C5.84978 2.58469 6.34496 2.31002 7.10143 2.14517C7.01589 2.10416 6.93842 2.04811 6.87269 1.97972C6.77021 1.87349 6.70248 1.73857 6.67853 1.59293C6.60568 1.12096 7.04104 0.914625 7.18759 0.526392C7.26428 0.323403 7.03925 0.146075 7.20368 8.94768e-06Z\" fill=\"#475569\" />\n <path d=\"M7.459 4.5C7.48797 4.50312 7.71949 4.61154 7.76205 4.63061C8.27062 4.85835 8.87051 5.09164 9.35658 5.3582C9.36602 6.03495 9.37016 6.56625 8.70573 6.91519C8.6633 6.80883 8.63019 6.72409 8.56332 6.63044C8.43786 6.45568 8.24656 6.33963 8.03354 6.30909C7.8434 6.28211 7.65146 6.3197 7.49586 6.43503C7.21897 6.21256 6.76265 6.28197 6.5229 6.52486C6.39308 6.65639 6.34815 6.75074 6.28902 6.92344C5.59702 6.5957 5.58761 6.04267 5.60583 5.35582C5.89882 5.23844 6.21318 5.0724 6.50153 4.941C6.82145 4.79522 7.14482 4.6574 7.459 4.5Z\" fill=\"#D1EDFD\" />\n <path d=\"M11.0756 10.6406C11.1037 10.6701 11.1324 10.7706 11.1535 10.8145C11.2818 11.0817 11.4922 11.1945 11.7498 11.2977C11.5607 11.63 11.4567 11.8797 11.1034 12.0466L11.0839 12.0517C10.9262 12.0927 10.7996 12.0968 10.651 12.0135C10.4755 11.915 10.3807 11.6614 10.4792 11.478C10.6388 11.1809 10.8877 10.9272 11.0756 10.6406Z\" fill=\"#D1EDFD\" />\n <path d=\"M11.6036 9.1377C11.6993 9.11763 11.8391 9.16378 11.9294 9.19593C11.6952 9.50644 11.4706 9.81614 11.2327 10.1261L11.1572 10.2255C10.7581 9.73539 11.0333 9.24481 11.6036 9.1377Z\" fill=\"#D1EDFD\" />\n <path d=\"M7.49681 0.882812C7.53691 0.925159 7.61244 1.08523 7.63598 1.14156C7.74243 1.39673 7.75769 1.76908 7.38596 1.77504C7.28236 1.75599 7.15628 1.68938 7.13517 1.5783C7.0843 1.3107 7.35609 1.09964 7.48737 0.897583L7.49681 0.882812Z\" fill=\"#D1EDFD\" />\n <path d=\"M1.68305 6.17249C1.71659 6.1673 1.8134 6.16478 1.84892 6.16432C2.34052 6.15616 2.81496 6.34495 3.16655 6.68866C3.50847 7.01806 3.70349 7.47119 3.70765 7.94596C3.70896 8.42345 3.54045 8.85284 3.20281 9.19025C3.34033 9.28068 3.5321 9.52219 3.6543 9.65748C4.17158 9.39073 4.91447 9.69339 4.79675 10.3444C5.08751 10.5485 5.19656 10.8288 5.0585 11.1674C5.15418 11.2375 5.25595 11.3205 5.32383 11.4186C5.40228 11.5303 5.4309 11.6695 5.40291 11.8031C5.32228 12.1857 4.90085 12.3286 4.57669 12.1236C4.51367 12.0838 4.42258 11.9595 4.35299 11.9431C4.30669 11.9557 4.28453 11.9584 4.23644 11.9644C4.22885 11.9742 4.22118 11.9841 4.21343 11.9938C3.93597 12.3413 3.49234 12.4682 3.06933 12.5157C2.85285 12.518 2.70432 12.5146 2.49066 12.4609C1.80785 12.2892 1.50808 11.6167 1.70723 10.9639C1.829 10.5648 2.11891 10.2506 2.48939 10.0518C2.54655 10.132 2.57559 10.2191 2.64066 10.303C2.73571 10.2223 2.82048 10.1482 2.92363 10.0773C2.81023 9.95313 2.66811 9.7693 2.55817 9.63584C2.38871 9.6878 2.23026 9.72879 2.05298 9.74653C1.54239 9.80228 1.03118 9.64711 0.637735 9.31695C0.269964 9.01018 0.0453493 8.54827 0.00544736 8.07322C-0.0309495 7.60988 0.116099 7.15077 0.414918 6.79478C0.742554 6.41198 1.18728 6.21393 1.68305 6.17249Z\" fill=\"#475569\" />\n <path d=\"M1.79616 6.5951C2.54894 6.5619 3.18687 7.14364 3.22301 7.8963C3.25915 8.64894 2.67989 9.28913 1.92739 9.3282C1.17073 9.3675 0.526231 8.78435 0.489885 8.02753C0.45354 7.27071 1.03921 6.62849 1.79616 6.5951Z\" fill=\"#D1EDFD\" />\n <path d=\"M4.93607 11.4844C5.12839 11.6261 5.22049 11.9085 4.91876 11.9419C4.8067 11.8805 4.78491 11.8646 4.71094 11.7561C4.81572 11.6752 4.862 11.5925 4.93607 11.4844Z\" fill=\"#FEFEFD\" />\n <path d=\"M12.5164 3.58594L12.5715 3.59466C12.6589 3.65863 12.6908 3.94434 12.7882 4.05193C12.8789 4.15216 12.9155 4.17816 13.0326 4.24929C13.1363 4.31224 13.3325 4.34025 13.384 4.43124C13.3643 4.56218 13.0693 4.54857 12.9127 4.69344C12.6903 4.89898 12.7114 5.06971 12.5892 5.28622C12.5669 5.28439 12.5368 5.2868 12.5261 5.27346C12.4336 5.15843 12.4072 4.9308 12.3099 4.81465C12.1627 4.63903 11.9972 4.60054 11.7981 4.51372C11.7544 4.49467 11.7266 4.47099 11.7129 4.42649C11.7867 4.31876 12.0509 4.34309 12.2376 4.14892C12.43 3.94901 12.4155 3.72208 12.5164 3.58594Z\" fill=\"#475569\" />\n <path d=\"M2.13644 3.72656C2.24401 3.77084 2.29712 4.1268 2.431 4.25226C2.60327 4.41371 2.7311 4.41949 2.93246 4.52449C2.96024 4.53897 2.97173 4.56042 2.97671 4.58878C2.89584 4.6981 2.61854 4.70721 2.4596 4.85659C2.26275 5.04156 2.27341 5.29132 2.17022 5.42088C2.16192 5.41849 2.11671 5.40232 2.1156 5.40043C2.01291 5.21216 1.9836 5.04909 1.84812 4.87273C1.73599 4.72675 1.36534 4.69959 1.32812 4.56939C1.3835 4.47941 1.67823 4.44211 1.82291 4.30563C2.02737 4.11274 2.0042 3.8372 2.13644 3.72656Z\" fill=\"#475569\" />\n </svg>\n )}\n </span>\n </ActionableButton>\n );\n },\n }), [stableHandleStream, isStreamEnd, initialSelection, isGlobalEditActive]);\n const anySkeletonActive = useMemo(() => {\n return messages.some((m: any) => m.isSkeleton);\n }, [messages]);\n\n const handleMouseEnter = () => {\n if (copyButtonsTimeoutRef.current) {\n clearTimeout(copyButtonsTimeoutRef.current);\n }\n copyButtonsTimeoutRef.current = setTimeout(() => {\n setShowCopyButtons(true);\n }, 500);\n };\n\n\n const handleMouseLeave = () => {\n if (copyButtonsTimeoutRef.current) {\n clearTimeout(copyButtonsTimeoutRef.current);\n }\n setShowCopyButtons(false);\n };\n\n const copyCurrentMessage = () => {\n if (messages.length > 0) {\n const chatText = messages\n .filter((msg:any) => msg.role === 'user')\n .map(msg => msg.content)\n .join('\\n\\n');\n navigator.clipboard.writeText(chatText);\n setCopiedButton('messages');\n \n if (copiedTimeoutRef.current) {\n clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = setTimeout(() => {\n setCopiedButton(null);\n }, 2000);\n }\n };\n\n const copyEntireChat = () => {\n const chatText = messages\n .map(msg => `${msg.role === 'user' ? 'You' : 'Assistant'}: ${msg.content}`)\n .join('\\n\\n');\n navigator.clipboard.writeText(chatText);\n setCopiedButton('entire');\n \n if (copiedTimeoutRef.current) {\n clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = setTimeout(() => {\n setCopiedButton(null);\n }, 2000);\n };\n\n const handleFeedbackSubmit = async (payload: any) => {\n if (onSubmitFeedback) {\n await onSubmitFeedback(payload); \n \n // Append the Thank You message as a new assistant bubble ONLY on success\n setMessages((prev) => [\n ...prev,\n {\n role: 'assistant',\n content: 'Thanks for your feedback — this will help improve future suggestions.',\n id: uuidv4(),\n citations: [],\n time: new Date(),\n isEnd: true,\n },\n ]);\n setTimeout(() => scrollToBottom('smooth'), 100);\n }\n };\n\n return (\n <div className={`${defaultStyles.customFont} ${styles.chatContainer}`}\n style={{\n transition: 'box-shadow 0.3s ease-in-out',\n boxShadow: (isHighlighted && !anySkeletonActive) ? '0 0 20px 5px rgba(37, 99, 235, 0.5)' : 'none',\n }}>\n <div ref={scrollContainerRef} className={styles.scrollWrapper}>\n <div ref={chatHeaderRef} className={styles.stickyHeader}>\n <ChatHeader\n resetChatHistory={resetChatHistory}\n isStreamEnd={isStreamEnd}\n chatTitle={chatTitle}\n onResize={setChatSize}\n chatSize={chatSize}\n movingTowards={movingTowards}\n />\n </div>\n\n <div className={styles.messagesList}>\n <div className={styles.initialMessageRow}>\n <div className={styles.iconWrapper}>\n <SparkleIcon />\n </div>\n <div className={styles.welcomeTextWrapper}>\n <div className={styles.welcomeMarkdownWrapper}>\n <span>\n <ReactMarkdown\n rehypePlugins={[rehypeRaw] as any[]}\n components={initialMarkdownComponents}\n >\n {initialChatMessage}\n </ReactMarkdown>\n </span>\n </div>\n </div>\n </div>\n \n {messages.length > 0 && messages.map((message: any, index: number) => (\n <div key={message.id} className={styles.messageRow}>\n {message.role === 'assistant' ? (\n <div className={styles.assistantIconContainer}>\n <SparkleIcon />\n </div>\n ) : (\n <div className={styles.userSpacer} />\n )}\n\n <div className={styles.messageContent}>\n {message.role === 'assistant' ? (\n <>\n {message.orchestratorAndAgentsMessages &&\n message.orchestratorAndAgentsMessages.length > 0 && (\n <WatchMeWork\n orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} \n isStreamEnd={isStreamEnd} \n finalTimeTaken={message?.finalTimeTaken}\n key={message?.finalTimeTaken ?? message?.id}\n />\n )}\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={stableHandleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n setChatSize={setChatSize}\n chatSize={chatSize}\n isStreamEnd={isStreamEnd}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onTypeResponseClick={() => { \n setIsInputGlowing(true);\n textAreaRef.current?.focus();\n }}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\n isGlobalEditActive={isGlobalEditActive}\n fieldLabelMap={fieldLabelMap}\n />\n {message.hasOwnProperty('isEnd') &&\n !message?.isEnd &&\n message?.content?.length > 0 && (\n <>\n <Skeleton variant=\"text\" width={'50%'} height={20} />\n <div style={{ marginTop: '10px' }}></div>\n <Skeleton variant=\"text\" width={'100%'} height={40} />\n </>\n )}\n <div className={styles.timestamp}>\n {message.time && !isNaN(new Date(message.time).getTime()) \n ? new Date(message.time).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n : new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n }\n </div>\n </>\n ) : (\n <div className={styles.userMessageWrapper}>\n <div className={styles.userMessageBubble}\n style={{\n transition: 'box-shadow 0.3s ease-in-out',\n boxShadow: (!message.isSkeleton && !anySkeletonActive && message.id === highlightedMessageId)\n ? '0 0 15px 3px rgba(37, 99, 235, 0.6)'\n : 'none'\n }}>\n {message.isSkeleton ? (\n <div style={{ \n display: 'flex', \n flexDirection: 'column', \n gap: '12px', \n minWidth: '280px',\n padding: '8px 0' \n }}>\n <Skeleton variant=\"text\" width=\"100%\" height={16} />\n <Skeleton variant=\"text\" width=\"80%\" height={16} />\n </div>\n ) : (\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={stableHandleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n isStreamEnd={isStreamEnd}\n isGlobalEditActive={isGlobalEditActive}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\n fieldLabelMap={fieldLabelMap}\n />\n )}\n <div style={{marginTop: '0.5rem'}}>\n <UserIcon />\n </div>\n </div>\n <div className={styles.userTimestamp}>\n {new Date(message.time).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n ))}\n\n {messageLoading && (\n <div className={styles.loadingRow}>\n <div className={styles.iconWrapper} style={{ marginTop: '0.2rem' }}>\n <SparkleIcon />\n </div>\n <div className={styles.loadingTextWrapper}>\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n <div ref={messagesEndRef} style={{ float: 'left', clear: 'both' }} />\n </div>\n </div>\n {/* {isCopyEnabled && (\n <div \n style={{\n display: 'flex', \n justifyContent: 'flex-end', \n width: '100%', \n position: 'relative', \n paddingRight: '20px',\n height: '0px',\n overflow: 'visible'\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n > */}\n {/* Invisible hover target - no visual, just a hit area */}\n {/* <div style={{\n position: 'absolute',\n right: '20px',\n top: '-80px',\n width: '120px',\n height: '80px',\n }} />\n\n {showCopyButtons && (\n <div style={{\n position: 'absolute',\n right: '20px',\n bottom: '10px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n backgroundColor: '#fff',\n borderRadius: '8px',\n boxShadow: '0 2px 12px rgba(0,0,0,0.12)',\n padding: '4px',\n zIndex: 100,\n animation: 'fadeIn 0.3s ease-in-out'\n }}>\n <button\n onClick={copyCurrentMessage}\n style={{\n padding: '10px 14px',\n backgroundColor: 'transparent',\n color: '#000',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: '500',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n whiteSpace: 'nowrap'\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = '#f5f5f5'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {copiedButton === 'messages' ? <Check width=\"16\" height=\"16\" /> : <Copy width=\"16\" height=\"16\" />}\n {copiedButton === 'messages' ? 'Copied!' : 'Copy Your Messages'}\n </button>\n <button\n onClick={copyEntireChat}\n style={{\n padding: '10px 14px',\n backgroundColor: 'transparent',\n color: '#000',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '13px',\n fontWeight: '500',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n whiteSpace: 'nowrap'\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = '#f5f5f5'; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {copiedButton === 'entire' ? <Check width=\"16\" height=\"16\" /> : <Copy width=\"16\" height=\"16\" />}\n {copiedButton === 'entire' ? 'Copied!' : 'Copy Entire Chat'}\n </button>\n </div>\n )}\n </div>\n )} */}\n <div className={styles.inputAreaWrapper}>\n {/* {isStreaming && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n paddingBottom: '8px',\n paddingLeft: '4px',\n fontFamily: '\"Plus Jakarta Sans\", sans-serif',\n fontSize: '0.875rem',\n color: '#6b7280',\n width: '100%',\n }}\n >\n <span>Instant Learning AI is thinking</span>\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: '-0.32s',\n }}\n />\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n animationDelay: '-0.16s',\n }}\n />\n <Box\n sx={{\n width: '5px',\n height: '5px',\n bgcolor: '#6b7280',\n borderRadius: '50%',\n animation: `${thinkingBounce} 1.4s infinite ease-in-out both`,\n }}\n />\n </Box>\n )} */}\n <Tooltip\n title={isFormValidating ? 'Please wait for the validation to be completed.' : ''}\n >\n \n <div \n className={`${styles.inputBoxContainer} ${isTextareaDisabled ? styles.disabled : ''}`}\n style={isInputGlowing ? {\n boxShadow: '0 0 15px 3px rgba(37, 99, 235, 0.5)',\n borderColor: '#2563eb',\n transition: 'box-shadow 0.3s ease-in-out, border-color 0.3s ease-in-out'\n } : {\n transition: 'box-shadow 0.3s ease-in-out, border-color 0.3s ease-in-out'\n }}\n >\n {messages.length > 0 && !isAtBottom && (\n <div\n onMouseDown={(e) => {\n e.preventDefault();\n scrollToBottom('smooth');\n }}\n className={styles.scrollToBottomBtn}\n >\n <ScrollToBottom />\n </div>\n )}\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder={textareaPlaceholder}\n value={userInput || ''} \n onChange={(e) => {\n setUserInput(e.target.value); \n }}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n disabled={isTextareaDisabled}\n className={`no-scrollbar ${styles.chatTextarea}`}\n style={{\n // Change: Check if focused OR if there's a long draft\n minHeight: (isFocused || (userInput && userInput.length > 40)) ? '120px' : '50px',\n height: (isFocused || (userInput && userInput.length > 40)) ? '120px' : '50px',\n maxHeight: '120px',\n }}\n />\n <span className={styles.sendButtonWrapper}>\n <button\n onClick={(e) => {\n if(isSendButtonDisabled) return;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }));\n }}\n disabled={isSendButtonDisabled}\n className={`${styles.sendButton} ${isSendButtonDisabled ? styles.disabled : styles.active}`}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </Tooltip>\n </div>\n <div className={styles.footerTools}>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n },\n },\n }}\n >\n <span className={styles.footerToolItem}>\n <AudioWaveform\n amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false}\n />\n </span>\n </Tooltip>\n <Tooltip\n title={'Coming soon'}\n placement=\"top\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n fontSize: '0.875rem',\n padding: '0.5rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n },\n },\n }}\n >\n <span className={styles.footerToolItem}>\n <AudioWaveform\n amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false}\n />\n </span>\n </Tooltip>\n </div>\n {/* --- SESSION INVALID POPUP --- */}\n <Dialog \n open={sessionInvalidPopupOpen} \n onClose={() => {}} // Empty function prevents closing by clicking the backdrop\n PaperProps={{\n sx: {\n borderRadius: '12px',\n padding: '8px',\n maxWidth: '400px',\n backgroundColor: 'var(--il-surface, #ffffff)',\n color: 'var(--il-foreground, #0F172A)',\n }\n }}\n >\n <Box sx={{ p: 3, textAlign: 'center', fontFamily: \"'Plus Jakarta Sans', sans-serif\" }}>\n <h3 style={{ fontSize: '18px', fontWeight: 600, color: 'var(--il-foreground, #0F172A)', marginBottom: '10px' }}>\n Session Expired\n </h3>\n <p style={{ fontSize: '14px', color: 'var(--il-muted, #64748B)', lineHeight: '1.5', marginBottom: '20px' }}>\n Changes were made to the learnings in this scope while you were editing. To avoid conflicts, concurrent edits aren’t allowed.\n </p>\n \n <Box sx={{ display: 'flex', gap: 2, justifyContent: 'center' }}>\n <button \n onClick={() => {\n setSessionInvalidPopupOpen(false);\n resetChatHistory();\n }}\n style={{ \n flex: 1, padding: '10px 16px', cursor: 'pointer', backgroundColor: 'var(--il-secondary-bg, white)',\n border: '1px solid var(--il-border, #E2E8F0)', borderRadius: '8px', fontSize: '14px',\n fontWeight: 500, color: 'var(--il-secondary-fg, #475569)', transition: 'all 0.2s'\n }}\n onMouseOver={(e) => e.currentTarget.style.backgroundColor = 'var(--il-hover, #F8FAFC)'}\n onMouseOut={(e) => e.currentTarget.style.backgroundColor = 'var(--il-secondary-bg, white)'}\n >\n Reset Session\n </button>\n <button \n onClick={() => {\n setSessionInvalidPopupOpen(false);\n onCloseSessionModal?.();\n }}\n style={{ \n flex: 1, padding: '10px 16px', backgroundColor: 'var(--il-danger, #EF4444)', color: 'var(--il-primary-fg, white)',\n border: 'none', borderRadius: '8px', fontSize: '14px', fontWeight: 500,\n cursor: 'pointer', transition: 'background-color 0.2s'\n }}\n onMouseOver={(e) => e.currentTarget.style.backgroundColor = 'var(--il-danger-hover, #DC2626)'}\n onMouseOut={(e) => e.currentTarget.style.backgroundColor = 'var(--il-danger, #EF4444)'}\n >\n Discard & Close\n </button>\n </Box>\n </Box>\n </Dialog>\n </div>\n );\n};\n\nexport default ChatComponent;\n"],"names":["uuidv4","preservedMessagesRef","preservedList","isLastMessageUser","userQuestionTime","_a","_b","_c","_d","_e","_f"],"mappings":"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"}
|