@e-llm-studio/instant-learning 1.3.4 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"NormalChat.js","sources":["../../../../../src/features/IL-OTJ/_components/ChatComponents/NormalChat.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Box, 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 NewMinimizedThinkingSteps from '../NewMinimizedThinkingSteps';\nimport useAuthStore from '../../../LearningManagement/store/useAuthStore';\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>;\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}\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 NormalChat: 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}) => {\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>('');\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 const streamStartTimesRef = useRef<Map<string, number>>(new Map());\n const currentStreamRequestIdRef = useRef<string>('');\n const streamGenerationRef = useRef(0);\n const isMountedRef = useRef(true);\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 \n const isSendButtonDisabled = useMemo(\n () => isInputEmpty || isStreaming || isFormValidating,\n [isInputEmpty, isStreaming, isFormValidating]\n );\n\n // Notify parent when streaming state changes\n useEffect(() => {\n onStreamingStateChange?.(isStreaming);\n }, [isStreaming, onStreamingStateChange]);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n streamGenerationRef.current += 1;\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\n // useEffect(() => {\n // if (isSaving) {\n // const manualUserMsg = {\n // role: 'user',\n // content: \"Save this learning\",\n // id: uuidv4(),\n // time: new Date(),\n // };\n \n // setMessages(prev => [...prev, manualUserMsg]);\n // setTimeout(() => scrollToBottom('smooth'), 100);\n // }\n // }, [isSaving]);\n \n // useEffect(() => {\n // // Flag to prevent double injection in strict mode\n // const TEST_ID = 'test-select-injection';\n \n // setMessages((prev) => {\n // if (prev.some(m => m.id === TEST_ID)) return prev;\n\n // const singleSelectMsg = {\n // role: 'assistant',\n // id: TEST_ID,\n // time: new Date(),\n // citations: [], // Add mock citations if you want CD card to work fully\n // isEnd: true,\n // content: `Hey welcome to Agent Composer! How would you like to proceed? \n // <instantselect>\n // <selectoption id=\"meetings\">\n // Meeting recordings and call transcripts \n // <ai_reasoning>\n // <id>1</id>\n // <reason>- This is the primary data source for capturing verbal agreements and action items.</reason>\n // <gap>- Requires integration with Zoom or Teams API.</gap>\n // <relevance_score>90</relevance_score>\n // </ai_reasoning>\n // </selectoption>\n // <selectoption id=\"docs\">\n // Documents and files\n // <ai_reasoning>\n // <id>2</id>\n // <reason>- Supports PDF and Docx analysis for static information.</reason>\n // <gap>- OCR might be slow for scanned images.</gap>\n // <relevance_score>70</relevance_score>\n // </ai_reasoning>\n // </selectoption>\n // </instantselect>\n // Please select one of the options to help me understand your data sources better!`\n \n // };\n\n // // const multiSelectMsg = {\n // // role: 'assistant',\n // // id: TEST_ID + '-multi',\n // // time: new Date(new Date().getTime() + 1000),\n // // citations: [], \n // // isEnd: true,\n // // content: `What input sources should we handle?\n // // <multiselect>\n // // <selectoption id=\"meetings\">\n // // Meeting recordings and call transcripts\n // // <ai_reasoning>\n // // <id>1</id>\n // // <reason>This is the primary data source for capturing verbal agreements and action items.</reason>\n // // <gap>Requires integration with Zoom or Teams API.</gap>\n // // <relevance_score>90</relevance_score>\n // // </ai_reasoning>\n // // </selectoption>\n // // <selectoption id=\"docs\">\n // // Documents and files\n // // <ai_reasoning>\n // // <id>2</id>\n // // <reason>Supports PDF and Docx analysis for static information.</reason>\n // // <gap>OCR might be slow for scanned images.</gap>\n // // <relevance_score>70</relevance_score>\n // // </ai_reasoning>\n // // </selectoption>\n // // </multiselect>`\n // // };\n\n // // const instantSelectMsg = {\n // // role: 'assistant',\n // // id: TEST_ID + '-instant',\n // // time: new Date(new Date().getTime() + 1000),\n // // citations: [], \n // // isEnd: true,\n // // content: `What input sources should we handle?\n // // <instantselect>\n // // <selectoption id=\"meetings\">Meeting recordings and call transcripts (sales calls, demos)</selectoption>\n // // <selectoption id=\"docs\">Documents and files (PDFs, Word docs)</selectoption>\n // // <selectoption id=\"crm\">CRM and lead data</selectoption>\n // // </instantselect>`\n // // };\n\n // return [...prev, singleSelectMsg];\n // });\n // }, []);\n\n\n// useEffect(() => {\n// const dummyRuleMessage = {\n// role: 'assistant',\n// id: `debug-${uuidv4()}`,\n// time: new Date(),\n// citations: [],\n// content: `\n// I've analyzed the rule and found a potential conflict. <br> I've analyzed the rule and found a potential conflict.\n\n// <!-- <rule-validation-card decisionStrength=\"79%\" validationType=\"similar\" ruleId=\"019cc3b7-8eba-7a4c-8949-571c2c6cc1b5\" ruleTitle=\"Order Separation\" tier=\"tier1\" ruleDescription=\"The rules share the same title and scope, but differ in separation time and specific application conditions. \"><ai_reasoning><id>1</id><reason>- Title is an [exact_match](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=title).\n// - Scope is an [exact_match](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=scope).\n// - Description shows [partial_overlap](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description) due to differing minute values.\n// - WTA conditions have [partial_overlap](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=when_to_apply) with shared advertiser.</reason><gap>- Rule A specifies [12 minutes](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description) while Rule B specifies [20 minutes](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description).\n// - Rule A's WTA includes [Audacy and break code CM](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=when_to_apply) not present in Rule B.</gap></ai_reasoning></rule-validation-card> -->\n\n// <!-- <critical_gaps count=\"1\" critical_gaps_decision_strength=\"79%\" value=\"Variant creation for order separation with different thresholds\"> <gap_card gap_name=\"Order Separation Variant\" gap_decision_strength=\"79%\" impact=\"100%\" gap_value=\"The existing rule applies 20 minutes order separation for KYKY or Michigan Auto Law. The new rule applies 12 minutes for Audacy or KYKY and break code CM. Would you like to create a variant for the new rule's specific conditions?\"> <ai_reasoning> <id>2</id> <reason>- The existing rule applies a 20-minute order separation for advertisers KYKY or Michigan Auto Law.\\n- The new rule applies a 12-minute order separation for advertisers Audacy or KYKY and break code CM.\\n- Since the thresholds differ and there is a partial overlap in WTA (KYKY), a variant can be created to apply the new rule's specific conditions without altering the existing rule.</reason> <gap>- A decision is needed on whether to create a variant for the new rule's specific conditions or discard it.</gap> <relevance_score>79</relevance_score> </ai_reasoning> <radioselect> <selectoption id=\"option1\">Create variant with 12 mins order separation for Audacy or KYKY and break code CM (existing rule uses 20 mins for KYKY or Michigan Auto Law) <explaination value='[\"A variant will be created to apply 12-minute order separation specifically for Audacy or KYKY and break code CM.\", \"The existing rule will remain unchanged, applying 20-minute separation for KYKY or Michigan Auto Law.\"]'></explaination> <ai_reasoning> <id>1</id> <reason>- This option creates a new variant rule that applies 12 minutes of order separation to Audacy or KYKY and break code CM.\\n- The existing rule, which applies 20 minutes of order separation to KYKY or Michigan Auto Law, will remain untouched.</reason> <gap>- The new rule's specific conditions and threshold can be applied as a variant without conflicting with the existing rule.</gap> <relevance_score>79</relevance_score> </ai_reasoning> </selectoption> <selectoption id=\"option2\">Discard and create a new rule <explaination value='[\"The current configuration will be discarded, allowing you to define a new rule with different conditions or constraints from scratch.\", \"Choose this if the variant approach does not fit your intended separation logic.\"]'></explaination> <ai_reasoning> <id>2</id> <reason>- Start the rule creation process from the beginning to define a distinct rule.</reason> <gap></gap> <relevance_score>70</relevance_score> </ai_reasoning> </selectoption> </radioselect> </gap_card> </critical_gaps> -->\n\n// `,\n// };\n// setMessages((prev) => [...prev, dummyRuleMessage]);\n \n// }, []);\n\n // useEffect(() => {\n // // Only trigger once for testing purposes\n // if (messages.some(m => m.id === 'test-critical-gaps')) return;\n\n // const testXML = `\n // Here is an analysis of the rule configuration:\n\n // <critical_gaps count=\"2\" critical_gaps_decision_strength=\"94%\" value=\"Shows missing information required to complete the rule\">\n\n // <gap_card gap_name=\"Gap 1\" gap_decision_strength=\"90%\" impact=\"90%\" gap_value=\"The tier information is currently missing. Could you please clarify where this rule should be applied?\">\n // <ai_reasoning>\n // <id>1</id>\n // <reason>The rule logic requires specific tier assignment to function correctly within the ad server.</reason>\n // <gap>User input for Tier scope is null.</gap>\n // <relevance_score>100</relevance_score>\n // </ai_reasoning>\n // <checkbox> All Tiers </checkbox>\n // <checkbox> Tier 1 </checkbox>\n // <checkbox> Tier 2 </checkbox>\n // </gap_card>\n\n // <gap_card gap_name=\"Gap 2\" gap_decision_strength=\"88%\" impact=\"88%\" gap_value=\"The behavior of the rule has not been defined. Kindly choose the desired behavior for the rule.\">\n // <ai_reasoning>\n // <id>2</id>\n // <reason>Without a defined behavior, the system defaults to 'Ignore', which may not be intended.</reason>\n // <gap>Missing behavioral predicate.</gap>\n // <relevance_score>100</relevance_score>\n // </ai_reasoning>\n // <radioselect>\n // <selectoption id=\"option1\">\n // Apply to all advertisers / Breakcodes\n // </selectoption>\n // <selectoption id=\"option2\">\n // Add custom condition / Breakcode\n // </selectoption>\n // <selectoption id=\"option3\">\n // Type Your Response\n // </selectoption>\n // </radioselect>\n // </gap_card>\n // </critical_gaps>\n // To proceed, I would appreciate it if you could address these gaps. Please let me know how you would like to move forward.\n // `;\n\n // setMessages(prev => [...prev, {\n // role: 'assistant',\n // content: testXML,\n // id: 'test-critical-gaps',\n // citations: [],\n // time: new Date(),\n // isEnd: true // Important to ensure controls are active\n // }]);\n\n // }, []); // Run on mount\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) {\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 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 chatPreviewIdRef.current = `${uuidv4()}`;\n setMessages([]);\n setShowWelcomeMessage(true);\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, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj2 = (data: any, accordianMessageArray: any, explainabilityMap: any) => {\n let streamedresponse : AssistantMessage = { \n role: 'assistant', \n content: '', \n id: uuidv4(), \n time: new Date(),\n citations: [] \n };\n \n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n streamedresponse.content = replaceAsteriskInAnchor(\n data.chatStream.continueChatResult.message.content || ''\n );\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === true &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n streamedresponse.content = '';\n accordianMessageArray.push({\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n });\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === true\n ) {\n streamedresponse.content = replaceAsteriskInAnchor(\n data.chatStream.continueChatResult.message.content\n );\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === false &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = data.chatStream.continueChatResult;\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.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(data.chatStream.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(\n data.chatStream.continueChatResult.explainability_id\n );\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: true,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: true,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: false,\n },\n ];\n }\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === true &&\n data.chatStream?.continueChatResult?.is_orchestrator === false &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = data.chatStream.continueChatResult;\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.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(data.chatStream.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(\n data.chatStream.continueChatResult.explainability_id\n );\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray.push({\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: false,\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 // UPDATED: Added customId param here\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 // UPDATED: Use customId if available\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n reply: '',\n },\n streamedresponse,\n ]);\n }\n } else {\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n if (typeof incomingRequestId === 'string' && incomingRequestId && setCurrentRequestId) {\n setCurrentRequestId(incomingRequestId);\n }\n\n const assistantObject = getAssistantObj2(data, accordianMessageArray, explainabilityMap);\n assistantObject.time = new Date();\n assistantObject.citations = citations;\n // if (citations && citations.length > 0 && setCitations) {\n // setCitations(citations);\n // }\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 // UPDATED: Added customId param to handleStream\n const handleStream = (\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;\n\n if (isEnterKey) {\n event?.preventDefault?.();\n }\n\n if (!finalInput || (isStreaming && !userInputParam) || (event?.key && !isEnterKey)) {\n return;\n }\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 const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: 'Guest User',\n userEmailId: 'guestUser@example.com',\n userId: 'Guest User',\n query: finalInput,\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData,\n aiModel: '',\n additionalHeaders: user?.accessToken\n ? {\n Authorization: `Bearer ${user.accessToken}`,\n }\n : undefined,\n onStreamEvent: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n handleMessages(\n data,\n explainabilityMap,\n accordianMessageArray,\n userQuestionTime,\n finalInput,\n isFirstQuestionSent,\n customId // UPDATED: Passing customId to the callback\n );\n },\n onStreamEnd: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n // REPLACE previous onStreamEnd time logic with this:\n const endTime = Date.now();\n const startTime = streamStartTimesRef.current.get(currentStreamRequestIdRef.current);\n if (startTime) {\n const timeTaken = Math.round((endTime - startTime) / 1000).toFixed(1); //parseFloat for decimal, math.round for int\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 console.error('Stream error:', error);\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\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 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 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;\n\n const isTesterGenie = label === 'Tester Genie';\n return (\n <ActionableButton\n {...props}\n className={className}\n handleStream={stableHandleStream} // ← stable ref, not recreated on scroll\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 // style={{\n // display: 'inline-flex',\n // alignItems: 'center',\n // gap: '3px',\n // padding: '1px 6px',\n // borderRadius: '3px',\n // fontSize: '10px',\n // fontWeight: 500,\n // backgroundColor: '#dcfce7',\n // color: '#15803d',\n // border: '1px solid #86efac',\n // }}\n // >\n // <svg\n // width=\"10\"\n // height=\"10\"\n // viewBox=\"0 0 16 16\"\n // xmlns=\"http://www.w3.org/2000/svg\"\n // fill=\"currentColor\"\n // >\n // <path d=\"M4.708 5.578L2.061 8.224l2.647 2.646-.708.708-3-3V7.87l3-3 .708.708zm7-.708L11 5.578l2.647 2.646L11 10.87l.708.708 3-3V7.87l-3-3zM4.908 13l.894.448 5-10L9.908 3l-5 10z\" />\n // </svg>\n // Dev\n // </span>\n )}\n </span>\n </ActionableButton>\n );\n },\n }), [stableHandleStream, isStreamEnd, initialSelection]);\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\nconsole.log(messages, 'rendering messages');\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 {/* REFACTORED: Removed the IIFE and used existing memoized 'anySkeletonActive' */}\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?.id} // ADD THIS\n />\n )}\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={handleStream}\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 />\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={handleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n isStreamEnd={isStreamEnd}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\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 minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n }}\n />\n <span className={styles.sendButtonWrapper}>\n <button\n onClick={(e) => {\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 </div>\n );\n};\n\nexport default NormalChat;\n"],"names":["uuidv4","userQuestionTime","_a"],"mappings":"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"}
1
+ {"version":3,"file":"NormalChat.js","sources":["../../../../../src/features/IL-OTJ/_components/ChatComponents/NormalChat.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { Box, 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 NewMinimizedThinkingSteps from '../NewMinimizedThinkingSteps';\nimport useAuthStore from '../../../LearningManagement/store/useAuthStore';\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>;\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}\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 NormalChat: 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}) => {\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>('');\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 const streamStartTimesRef = useRef<Map<string, number>>(new Map());\n const currentStreamRequestIdRef = useRef<string>('');\n const streamGenerationRef = useRef(0);\n const isMountedRef = useRef(true);\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 \n const isSendButtonDisabled = useMemo(\n () => isInputEmpty || isStreaming || isFormValidating,\n [isInputEmpty, isStreaming, isFormValidating]\n );\n\n // Notify parent when streaming state changes\n useEffect(() => {\n onStreamingStateChange?.(isStreaming);\n }, [isStreaming, onStreamingStateChange]);\n const accessTokenRef = useRef(user?.accessToken);\n useEffect(() => {\n accessTokenRef.current = user?.accessToken;\n }, [user?.accessToken]);\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n streamGenerationRef.current += 1;\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\n // useEffect(() => {\n // if (isSaving) {\n // const manualUserMsg = {\n // role: 'user',\n // content: \"Save this learning\",\n // id: uuidv4(),\n // time: new Date(),\n // };\n \n // setMessages(prev => [...prev, manualUserMsg]);\n // setTimeout(() => scrollToBottom('smooth'), 100);\n // }\n // }, [isSaving]);\n \n // useEffect(() => {\n // // Flag to prevent double injection in strict mode\n // const TEST_ID = 'test-select-injection';\n \n // setMessages((prev) => {\n // if (prev.some(m => m.id === TEST_ID)) return prev;\n\n // const singleSelectMsg = {\n // role: 'assistant',\n // id: TEST_ID,\n // time: new Date(),\n // citations: [], // Add mock citations if you want CD card to work fully\n // isEnd: true,\n // content: `Hey welcome to Agent Composer! How would you like to proceed? \n // <instantselect>\n // <selectoption id=\"meetings\">\n // Meeting recordings and call transcripts \n // <ai_reasoning>\n // <id>1</id>\n // <reason>- This is the primary data source for capturing verbal agreements and action items.</reason>\n // <gap>- Requires integration with Zoom or Teams API.</gap>\n // <relevance_score>90</relevance_score>\n // </ai_reasoning>\n // </selectoption>\n // <selectoption id=\"docs\">\n // Documents and files\n // <ai_reasoning>\n // <id>2</id>\n // <reason>- Supports PDF and Docx analysis for static information.</reason>\n // <gap>- OCR might be slow for scanned images.</gap>\n // <relevance_score>70</relevance_score>\n // </ai_reasoning>\n // </selectoption>\n // </instantselect>\n // Please select one of the options to help me understand your data sources better!`\n \n // };\n\n // // const multiSelectMsg = {\n // // role: 'assistant',\n // // id: TEST_ID + '-multi',\n // // time: new Date(new Date().getTime() + 1000),\n // // citations: [], \n // // isEnd: true,\n // // content: `What input sources should we handle?\n // // <multiselect>\n // // <selectoption id=\"meetings\">\n // // Meeting recordings and call transcripts\n // // <ai_reasoning>\n // // <id>1</id>\n // // <reason>This is the primary data source for capturing verbal agreements and action items.</reason>\n // // <gap>Requires integration with Zoom or Teams API.</gap>\n // // <relevance_score>90</relevance_score>\n // // </ai_reasoning>\n // // </selectoption>\n // // <selectoption id=\"docs\">\n // // Documents and files\n // // <ai_reasoning>\n // // <id>2</id>\n // // <reason>Supports PDF and Docx analysis for static information.</reason>\n // // <gap>OCR might be slow for scanned images.</gap>\n // // <relevance_score>70</relevance_score>\n // // </ai_reasoning>\n // // </selectoption>\n // // </multiselect>`\n // // };\n\n // // const instantSelectMsg = {\n // // role: 'assistant',\n // // id: TEST_ID + '-instant',\n // // time: new Date(new Date().getTime() + 1000),\n // // citations: [], \n // // isEnd: true,\n // // content: `What input sources should we handle?\n // // <instantselect>\n // // <selectoption id=\"meetings\">Meeting recordings and call transcripts (sales calls, demos)</selectoption>\n // // <selectoption id=\"docs\">Documents and files (PDFs, Word docs)</selectoption>\n // // <selectoption id=\"crm\">CRM and lead data</selectoption>\n // // </instantselect>`\n // // };\n\n // return [...prev, singleSelectMsg];\n // });\n // }, []);\n\n\n// useEffect(() => {\n// const dummyRuleMessage = {\n// role: 'assistant',\n// id: `debug-${uuidv4()}`,\n// time: new Date(),\n// citations: [],\n// content: `\n// I've analyzed the rule and found a potential conflict. <br> I've analyzed the rule and found a potential conflict.\n\n// <!-- <rule-validation-card decisionStrength=\"79%\" validationType=\"similar\" ruleId=\"019cc3b7-8eba-7a4c-8949-571c2c6cc1b5\" ruleTitle=\"Order Separation\" tier=\"tier1\" ruleDescription=\"The rules share the same title and scope, but differ in separation time and specific application conditions. \"><ai_reasoning><id>1</id><reason>- Title is an [exact_match](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=title).\n// - Scope is an [exact_match](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=scope).\n// - Description shows [partial_overlap](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description) due to differing minute values.\n// - WTA conditions have [partial_overlap](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=when_to_apply) with shared advertiser.</reason><gap>- Rule A specifies [12 minutes](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description) while Rule B specifies [20 minutes](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=description).\n// - Rule A's WTA includes [Audacy and break code CM](variant_id=019cc3b7-8eba-7a4c-8949-571c2c6cc1b5&citation_type=comparison&field_name=when_to_apply) not present in Rule B.</gap></ai_reasoning></rule-validation-card> -->\n\n// <!-- <critical_gaps count=\"1\" critical_gaps_decision_strength=\"79%\" value=\"Variant creation for order separation with different thresholds\"> <gap_card gap_name=\"Order Separation Variant\" gap_decision_strength=\"79%\" impact=\"100%\" gap_value=\"The existing rule applies 20 minutes order separation for KYKY or Michigan Auto Law. The new rule applies 12 minutes for Audacy or KYKY and break code CM. Would you like to create a variant for the new rule's specific conditions?\"> <ai_reasoning> <id>2</id> <reason>- The existing rule applies a 20-minute order separation for advertisers KYKY or Michigan Auto Law.\\n- The new rule applies a 12-minute order separation for advertisers Audacy or KYKY and break code CM.\\n- Since the thresholds differ and there is a partial overlap in WTA (KYKY), a variant can be created to apply the new rule's specific conditions without altering the existing rule.</reason> <gap>- A decision is needed on whether to create a variant for the new rule's specific conditions or discard it.</gap> <relevance_score>79</relevance_score> </ai_reasoning> <radioselect> <selectoption id=\"option1\">Create variant with 12 mins order separation for Audacy or KYKY and break code CM (existing rule uses 20 mins for KYKY or Michigan Auto Law) <explaination value='[\"A variant will be created to apply 12-minute order separation specifically for Audacy or KYKY and break code CM.\", \"The existing rule will remain unchanged, applying 20-minute separation for KYKY or Michigan Auto Law.\"]'></explaination> <ai_reasoning> <id>1</id> <reason>- This option creates a new variant rule that applies 12 minutes of order separation to Audacy or KYKY and break code CM.\\n- The existing rule, which applies 20 minutes of order separation to KYKY or Michigan Auto Law, will remain untouched.</reason> <gap>- The new rule's specific conditions and threshold can be applied as a variant without conflicting with the existing rule.</gap> <relevance_score>79</relevance_score> </ai_reasoning> </selectoption> <selectoption id=\"option2\">Discard and create a new rule <explaination value='[\"The current configuration will be discarded, allowing you to define a new rule with different conditions or constraints from scratch.\", \"Choose this if the variant approach does not fit your intended separation logic.\"]'></explaination> <ai_reasoning> <id>2</id> <reason>- Start the rule creation process from the beginning to define a distinct rule.</reason> <gap></gap> <relevance_score>70</relevance_score> </ai_reasoning> </selectoption> </radioselect> </gap_card> </critical_gaps> -->\n\n// `,\n// };\n// setMessages((prev) => [...prev, dummyRuleMessage]);\n \n// }, []);\n\n // useEffect(() => {\n // // Only trigger once for testing purposes\n // if (messages.some(m => m.id === 'test-critical-gaps')) return;\n\n // const testXML = `\n // Here is an analysis of the rule configuration:\n\n // <critical_gaps count=\"2\" critical_gaps_decision_strength=\"94%\" value=\"Shows missing information required to complete the rule\">\n\n // <gap_card gap_name=\"Gap 1\" gap_decision_strength=\"90%\" impact=\"90%\" gap_value=\"The tier information is currently missing. Could you please clarify where this rule should be applied?\">\n // <ai_reasoning>\n // <id>1</id>\n // <reason>The rule logic requires specific tier assignment to function correctly within the ad server.</reason>\n // <gap>User input for Tier scope is null.</gap>\n // <relevance_score>100</relevance_score>\n // </ai_reasoning>\n // <checkbox> All Tiers </checkbox>\n // <checkbox> Tier 1 </checkbox>\n // <checkbox> Tier 2 </checkbox>\n // </gap_card>\n\n // <gap_card gap_name=\"Gap 2\" gap_decision_strength=\"88%\" impact=\"88%\" gap_value=\"The behavior of the rule has not been defined. Kindly choose the desired behavior for the rule.\">\n // <ai_reasoning>\n // <id>2</id>\n // <reason>Without a defined behavior, the system defaults to 'Ignore', which may not be intended.</reason>\n // <gap>Missing behavioral predicate.</gap>\n // <relevance_score>100</relevance_score>\n // </ai_reasoning>\n // <radioselect>\n // <selectoption id=\"option1\">\n // Apply to all advertisers / Breakcodes\n // </selectoption>\n // <selectoption id=\"option2\">\n // Add custom condition / Breakcode\n // </selectoption>\n // <selectoption id=\"option3\">\n // Type Your Response\n // </selectoption>\n // </radioselect>\n // </gap_card>\n // </critical_gaps>\n // To proceed, I would appreciate it if you could address these gaps. Please let me know how you would like to move forward.\n // `;\n\n // setMessages(prev => [...prev, {\n // role: 'assistant',\n // content: testXML,\n // id: 'test-critical-gaps',\n // citations: [],\n // time: new Date(),\n // isEnd: true // Important to ensure controls are active\n // }]);\n\n // }, []); // Run on mount\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) {\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 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 chatPreviewIdRef.current = `${uuidv4()}`;\n setMessages([]);\n setShowWelcomeMessage(true);\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, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj2 = (data: any, accordianMessageArray: any, explainabilityMap: any) => {\n let streamedresponse : AssistantMessage = { \n role: 'assistant', \n content: '', \n id: uuidv4(), \n time: new Date(),\n citations: [] \n };\n \n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n streamedresponse.content = replaceAsteriskInAnchor(\n data.chatStream.continueChatResult.message.content || ''\n );\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === true &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n streamedresponse.content = '';\n accordianMessageArray.push({\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n });\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === true &&\n data.chatStream?.continueChatResult?.isEnd === true\n ) {\n streamedresponse.content = replaceAsteriskInAnchor(\n data.chatStream.continueChatResult.message.content\n );\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === false &&\n data.chatStream?.continueChatResult?.is_orchestrator === false &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = data.chatStream.continueChatResult;\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.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(data.chatStream.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(\n data.chatStream.continueChatResult.explainability_id\n );\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: true,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: true,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: false,\n },\n ];\n }\n }\n\n if (\n data.chatStream?.continueChatResult?.thinking_break === true &&\n data.chatStream?.continueChatResult?.is_orchestrator === false &&\n data.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = data.chatStream.continueChatResult;\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.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(data.chatStream.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(\n data.chatStream.continueChatResult.explainability_id\n );\n const index = targetedIndexId?.index;\n accordianMessageArray[index] = {\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: true,\n };\n } else {\n accordianMessageArray.push({\n responsedata: data.chatStream.continueChatResult.message.content,\n responseFrom: data.chatStream.continueChatResult.responded_by,\n header_message: data.chatStream.continueChatResult.header_message,\n finalResponseStatus: false,\n explainability_id: data.chatStream.continueChatResult.explainability_id ?? '',\n isParallelToolResponse: false,\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 // UPDATED: Added customId param here\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 // UPDATED: Use customId if available\n id: customId || data?.chatStream?.continueChatResult?.requestId || '',\n reply: '',\n },\n streamedresponse,\n ]);\n }\n } else {\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n const incomingRequestId = data?.chatStream?.continueChatResult?.requestId;\n if (typeof incomingRequestId === 'string' && incomingRequestId && setCurrentRequestId) {\n setCurrentRequestId(incomingRequestId);\n }\n\n const assistantObject = getAssistantObj2(data, accordianMessageArray, explainabilityMap);\n assistantObject.time = new Date();\n assistantObject.citations = citations;\n // if (citations && citations.length > 0 && setCitations) {\n // setCitations(citations);\n // }\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 const liveHeaders = {\n get Authorization() {\n return accessTokenRef.current ? `Bearer ${accessTokenRef.current}` : undefined;\n },\n};\n // UPDATED: Added customId param to handleStream\n const handleStream = (\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;\n\n if (isEnterKey) {\n event?.preventDefault?.();\n }\n\n if (!finalInput || (isStreaming && !userInputParam) || (event?.key && !isEnterKey)) {\n return;\n }\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 const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n const params = {\n WEBSOCKET_URL: baseWebsocketUrl,\n organizationName: organizationName,\n chatAssistantName: chatAssistant,\n selectedAIModel: 'gpt-4',\n replyMessage: '',\n userName: 'Guest User',\n userEmailId: 'guestUser@example.com',\n userId: 'Guest User',\n query: finalInput,\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData,\n aiModel: '',\nadditionalHeaders: liveHeaders as Record<string, string>,\n onStreamEvent: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n handleMessages(\n data,\n explainabilityMap,\n accordianMessageArray,\n userQuestionTime,\n finalInput,\n isFirstQuestionSent,\n customId // UPDATED: Passing customId to the callback\n );\n },\n onStreamEnd: (data: any) => {\n if (!isMountedRef.current || streamGenerationRef.current !== streamGeneration) return;\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\n // REPLACE previous onStreamEnd time logic with this:\n const endTime = Date.now();\n const startTime = streamStartTimesRef.current.get(currentStreamRequestIdRef.current);\n if (startTime) {\n const timeTaken = Math.round((endTime - startTime) / 1000).toFixed(1); //parseFloat for decimal, math.round for int\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 console.error('Stream error:', error);\n setIsStreamEnd(true);\n setIsStreaming(false);\n setIsAwaitingValidationResponse(false);\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 console.log(\"Chat Stream Params:\", params);\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 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;\n\n const isTesterGenie = label === 'Tester Genie';\n return (\n <ActionableButton\n {...props}\n className={className}\n handleStream={stableHandleStream} // ← stable ref, not recreated on scroll\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 // style={{\n // display: 'inline-flex',\n // alignItems: 'center',\n // gap: '3px',\n // padding: '1px 6px',\n // borderRadius: '3px',\n // fontSize: '10px',\n // fontWeight: 500,\n // backgroundColor: '#dcfce7',\n // color: '#15803d',\n // border: '1px solid #86efac',\n // }}\n // >\n // <svg\n // width=\"10\"\n // height=\"10\"\n // viewBox=\"0 0 16 16\"\n // xmlns=\"http://www.w3.org/2000/svg\"\n // fill=\"currentColor\"\n // >\n // <path d=\"M4.708 5.578L2.061 8.224l2.647 2.646-.708.708-3-3V7.87l3-3 .708.708zm7-.708L11 5.578l2.647 2.646L11 10.87l.708.708 3-3V7.87l-3-3zM4.908 13l.894.448 5-10L9.908 3l-5 10z\" />\n // </svg>\n // Dev\n // </span>\n )}\n </span>\n </ActionableButton>\n );\n },\n }), [stableHandleStream, isStreamEnd, initialSelection]);\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\nconsole.log(messages, 'rendering messages');\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 {/* REFACTORED: Removed the IIFE and used existing memoized 'anySkeletonActive' */}\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?.id} // ADD THIS\n />\n )}\n <MessageRendering\n index={index}\n content={message?.content}\n role={message?.role}\n messages={messages}\n handleStream={handleStream}\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 />\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={handleStream}\n isLastMessage={index === messages.length - 1}\n onSave={onSave}\n citations={message?.citations}\n isStreamEnd={isStreamEnd}\n messageIsEnd={message?.isEnd}\n onViewComparison={onViewComparison}\n onComparisonLinkClick={onComparisonLinkClick}\n baseURL={url}\n onFeedbackSubmit={handleFeedbackSubmit}\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 minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n }}\n />\n <span className={styles.sendButtonWrapper}>\n <button\n onClick={(e) => {\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 </div>\n );\n};\n\nexport default NormalChat;\n"],"names":["uuidv4","userQuestionTime","_a"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TeachMePlugin.d.ts","sourceRoot":"","sources":["../../../../../../src/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAevE,OAAO,EAA4B,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;AAG7H,OAAO,EAAwF,KAAK,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEtK,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IAEjC,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAC,GAAG,CAAC;IACX;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAGD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAM1E,CAAC;AAuBF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgB/C,CAAC;AAuLF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"TeachMePlugin.d.ts","sourceRoot":"","sources":["../../../../../../src/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAevE,OAAO,EAA4B,wBAAwB,EAAE,MAAM,yDAAyD,CAAC;AAG7H,OAAO,EAAwF,KAAK,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEtK,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IAEjC,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAC,GAAG,CAAC;IACX;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAGD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAM1E,CAAC;AAuBF,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgB/C,CAAC;AA6LF,eAAe,aAAa,CAAC"}