@e-llm-studio/instant-learning 1.3.3 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/ILMarketplaceWrapper.js +3 -0
  2. package/dist/ILMarketplaceWrapper.js.map +1 -1
  3. package/dist/cjs/ILMarketplaceWrapper.js +3 -0
  4. package/dist/cjs/ILMarketplaceWrapper.js.map +1 -1
  5. package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
  6. package/dist/cjs/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
  7. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
  8. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  9. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
  10. package/dist/cjs/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  11. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  12. package/dist/cjs/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  13. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js +444 -169
  14. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  15. package/dist/cjs/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  16. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js +19 -2
  17. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  18. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  19. package/dist/cjs/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  20. package/dist/cjs/features/InstantLearning/InstantLearning.js +1 -0
  21. package/dist/cjs/features/InstantLearning/InstantLearning.js.map +1 -1
  22. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js +3 -1
  23. package/dist/cjs/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  24. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  25. package/dist/cjs/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  26. package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js +5 -2
  27. package/dist/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.js.map +1 -1
  28. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js +12 -4
  29. package/dist/features/IL-OTJ/_components/ChatComponents/ChatComponent.js.map +1 -1
  30. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js +13 -4
  31. package/dist/features/IL-OTJ/_components/ChatComponents/NormalChat.js.map +1 -1
  32. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js +41 -4
  33. package/dist/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.js.map +1 -1
  34. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js +446 -171
  35. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.js.map +1 -1
  36. package/dist/features/IL-marketplace/PromoteFlow/PromoteFlow.module.css.js +2 -2
  37. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js +17 -3
  38. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.api.js.map +1 -1
  39. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js +7 -0
  40. package/dist/features/IL-marketplace/PromoteFlow/promote-flow.store.js.map +1 -1
  41. package/dist/features/InstantLearning/InstantLearning.js +1 -0
  42. package/dist/features/InstantLearning/InstantLearning.js.map +1 -1
  43. package/dist/features/InstantLearning/_components/ChatComponent.js +3 -1
  44. package/dist/features/InstantLearning/_components/ChatComponent.js.map +1 -1
  45. package/dist/features/InstantLearning/_components/ContextualChatComponent.js +3 -1
  46. package/dist/features/InstantLearning/_components/ContextualChatComponent.js.map +1 -1
  47. package/dist/types/src/ILMarketplaceWrapper.d.ts.map +1 -1
  48. package/dist/types/src/features/IL-OTJ/ValueTypeWrappers/TeachMePlugin.d.ts.map +1 -1
  49. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/ChatComponent.d.ts.map +1 -1
  50. package/dist/types/src/features/IL-OTJ/_components/ChatComponents/NormalChat.d.ts.map +1 -1
  51. package/dist/types/src/features/IL-marketplace/PromoteFlow/EnvironmentConfigurationModal.d.ts.map +1 -1
  52. package/dist/types/src/features/IL-marketplace/PromoteFlow/PromoteFlow.d.ts.map +1 -1
  53. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts +5 -2
  54. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.api.d.ts.map +1 -1
  55. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts +26 -1
  56. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.interfaces.d.ts.map +1 -1
  57. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts +3 -1
  58. package/dist/types/src/features/IL-marketplace/PromoteFlow/promote-flow.store.d.ts.map +1 -1
  59. package/dist/types/src/features/InstantLearning/InstantLearning.d.ts.map +1 -1
  60. package/dist/types/src/features/InstantLearning/_components/ChatComponent.d.ts.map +1 -1
  61. package/dist/types/src/features/InstantLearning/_components/ContextualChatComponent.d.ts.map +1 -1
  62. package/package.json +4 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ContextualChatComponent.js","sources":["../../../../src/features/InstantLearning/_components/ContextualChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { startChatStream } from '@e-llm-studio/streaming-response';\nimport { v4 as uuidv4 } from 'uuid';\nimport { http } from '../../../api/transport';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport MinimizedThinkingSteps from './MinimizedThinkingSteps';\nimport NewChatIcon from './_svg/NewChatIcon';\nimport defaultStyles from '../InstantLearning.module.css';\nimport Tooltip from '@mui/material/Tooltip';\nimport JSON5 from 'json5';\nimport AudioWaveform from './AudioWaveform';\nimport './ChatComponent.css'\nimport MessageRendering from './MessageRendering';\nimport { sanitizePythonDictToJSON, sanitizePythonDictToJSON2 } from '../../../utils/instantLearning.utils';\nimport { parseValidationRecommendations, FormattedValidationRecommendation } from '../../../utils/recommendationParser';\nimport { ContextualLearningData } from \"../InstantLearning\";\nimport { publishAgenticFeedbackForVariantIngestion } from '../../../service/InstantLearningService';\n\ninterface IntermediateStep {\n responseFrom: string;\n responseMessage: string;\n \n}\n\n// Define a specific type for parsed suggestions\ninterface ParsedSuggestion {\n conditions_whentoapply?: any[];\n conditions_whennottoapply?: any[];\n _isContextual?: boolean;\n}\n\ninterface Message {\n requestId?: string;\n role: string;\n content: string;\n time: any;\n id?: string;\n reply?: string;\n citations?: Array<any>\n resourceId?: string;\n citationDisplayType?: string;\n orchestratorAndAgentsMessages?: any[];\n intermediateSteps?: IntermediateStep[];\n isFirstQuestionSent?: boolean;\n}\n\ninterface ChatComponentProps {\n chatAssistantLogoUrl: string\n chatAssistantName: string\n authToken?: string\n organizationName: string\n baseUrl: string\n setInstantLearningSuggestions: any\n formDataState: any,\n setFormDataState: any,\n hasUserFilledForm: boolean\n setHasUserFilledForm: React.Dispatch<React.SetStateAction<boolean>>\n baseWebsocketUrl: string\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>\n selectedText: string\n ChatIconComponent: React.ReactNode\n ggcAssistantName: string\n ThinkingBulbIconComponent: React.ReactNode\n hasUserWrittenModification: boolean\n setExtractedModification: React.Dispatch<React.SetStateAction<string>> | React.Dispatch<React.SetStateAction<null>>\n setSave: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedTooltip: React.Dispatch<React.SetStateAction<string>>\n setIsSaveLoading: React.Dispatch<React.SetStateAction<boolean>>\n isSaveLoading: boolean\n save: boolean\n instantLearningSuggestions: any\n template?: string\n setShouldTriggerSave: React.Dispatch<React.SetStateAction<boolean>>,\n isFormSaveClicked: boolean,\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>,\n validationWtaResponse?: any,\n setValidationWtaResponse?: any,\n learningWtaResponse?: any,\n setLearningWtaResponse?: any,\n onDeleteLearning?: (label: string) => void,\n deleteLearningTrigger?: string | null,\n setDeleteLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onMergeLearning?: (learningId: string) => void,\n mergeLearningTrigger?: string | null,\n setMergeLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onResetLearningData?: () => void,\n setEditConflictingLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n setEditSimilarLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n sendMessageInChat: string\n setSendMessageInChat: React.Dispatch<React.SetStateAction<string>>\n setIsMergeLoading: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedHowToRespond: React.Dispatch<React.SetStateAction<string>>;\n setExtractedTopic: React.Dispatch<React.SetStateAction<string>>;\n setExtractedCategories: React.Dispatch<React.SetStateAction<string[]>>;\n setValidationRecommendations: (recommendations: FormattedValidationRecommendation | null) => void; \n validationRecommendations: FormattedValidationRecommendation | null; \n addInReview? : any[];\n editInReview? : any[];\n deleteInReview? : { question_id: string; variant_id: string }[];\n assistantId?: string | null;\n isFromDashboard?: boolean;\n\n}\n \n\n\ninterface Config {\n GGCLLMASSISTANTNAME: string;\n ORGANIZATION_NAME: string;\n API_KEY?: string;\n}\n\ninterface LLMRequestParams {\n config: Config;\n user_prompt: string;\n check_similarity: boolean;\n system_prompt: string;\n primary_type: string;\n fallback_type: string;\n primary_model: string;\n fallback_model: string;\n region: string;\n temperature: number;\n max_tokens: number;\n primary_retries: number;\n}\n\nconst SendButton = () => {\n return (\n <svg\n width=\"20px\"\n height=\"20px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.91158 12H7.45579H4L2.02268 4.13539C2.0111 4.0893 2.00193 4.04246 2.00046 3.99497C1.97811 3.27397 2.77209 2.77366 3.46029 3.10388L22 12L3.46029 20.8961C2.77983 21.2226 1.99597 20.7372 2.00002 20.0293C2.00038 19.9658 2.01455 19.9032 2.03296 19.8425L3.5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst ChatHeader = ({ resetChatHistory, isStreamEnd }: { resetChatHistory: () => void; isStreamEnd: boolean }) => {\n return (\n <div\n className={defaultStyles.customFont}\n style={{\n width: '100%',\n padding: '0.75rem 0rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#fff',\n borderBottom: '1px solid #e5e7eb',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)'\n }}\n >\n <span\n style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: '#1f2937',\n flex: 1,\n marginLeft: '0.5rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <span style={{ color: '#5928ED' }}>InstantLearning.AI</span> Contextual Chat\n {/* Tell me more about this learning */}\n </span>\n\n <Tooltip\n title={'New chat'}\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 <div\n onClick={() => {\n console.log(NewChatIcon, 'hello')\n if (isStreamEnd) resetChatHistory(); // Prevent click if disabled\n }}\n style={{\n height: '1.8rem',\n width: '1.8rem',\n marginLeft: '1rem',\n marginRight: '0.5rem',\n cursor: !isStreamEnd ? 'not-allowed' : 'pointer',\n backgroundColor: 'transparent',\n transition: 'transform 0.2s ease-in-out, opacity 0.2s',\n opacity: !isStreamEnd ? 0.4 : 0.8,\n pointerEvents: !isStreamEnd ? 'none' : 'auto', // prevents any interaction\n }}\n onMouseOver={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1.1)';\n e.currentTarget.style.opacity = '1';\n }\n }}\n onMouseOut={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n >\n <NewChatIcon />\n </div>\n </Tooltip>\n </div>\n );\n};\n\nconst constructUserQuery = (formDataState: any) => {\n return `Hey generate wta and wnta based on: \\n The issue user is facing is: ${formDataState.issue_with_response}. The user feedback is: Replace ${formDataState.original} with ${formDataState.modification}${formDataState.tooltip}`\n}\n\n\ntype WhenToApplyCondition = {\n when_to_apply: string;\n};\n\ntype InstantLearningSuggestion = {\n conditions_whentoapply: WhenToApplyCondition[];\n conditions_whennottoapply: WhenToApplyCondition[];\n};\n\nconst ToggleSelector = ({ label, onToggle }: any) => {\n const [selected, setSelected] = useState(false);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const handleChange = () => {\n const newState = !selected;\n setSelected(newState);\n onToggle(label, newState);\n };\n\n useEffect(() => {\n const el = spanRef.current;\n if (el && selected) {\n el.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n el.style.transform = 'scale(1)';\n el.style.backgroundColor = '#E8F5E9'; // selected bg\n el.style.color = '#2E7D32'; // selected text\n }\n }, [selected]);\n\n return (\n <span ref={spanRef} onClick={handleChange}\n style={{\n cursor: 'pointer',\n backgroundColor: selected ? '#E8F5E9' : '#fbfaff',\n color: selected ? '#2E7D32' : '#000000de',\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)', // default shadow\n transform: 'scale(1)', // make sure it resets after hover\n }}\n\n onMouseEnter={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 136, 229, 0.3)';\n e.currentTarget.style.transform = 'scale(1.02)';\n e.currentTarget.style.backgroundColor = '#f0f7ff'; // light blue hover\n e.currentTarget.style.color = '#1E88E5'; // primary blue text\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.backgroundColor = '#fbfaff';\n e.currentTarget.style.color = '#000000de';\n }\n }}>\n <span\n style={{\n fontWeight: 'bold',\n fontSize: '16px',\n // color: selected ? '#2E7D32' : '#888',\n transition: 'all 0.3s ease',\n transform: selected ? 'scale(1.2)' : 'scale(1)',\n opacity: selected ? 1 : 0.9,\n paddingLeft: '0.25rem',\n paddingRight: '0.25rem',\n }}\n >\n {selected ? '✓' : '+'}\n </span>\n <span>{label}</span>\n </span>\n );\n};\n\nfunction SuggestionChips({ onSelect, original, modification, tooltip }: any) {\n const themeColor = '#5928ed';\n const hoverBg = '#eae4fd';\n const suggestions = [`I want to modify \"${original}\" ${modification !== '' ? `to ${modification}` : ''}`, `I want to add a tooltip ${tooltip !== '' ? `which says ${tooltip}` : ''} to \"${original}\"`]; //\"I want to modify this and add a tooltip\"\n\n return (\n <div style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n marginTop: '8px',\n // paddingLeft: '1rem',\n }}>\n {suggestions.map((text, index) => (\n <div\n key={index}\n onClick={() => onSelect(text)}\n style={{\n padding: '6px 12px',\n borderRadius: '16px',\n backgroundColor: '#f9f9ff',\n border: `1px solid ${themeColor}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: themeColor,\n fontWeight: 500,\n transition: 'background-color 0.2s ease, color 0.2s ease',\n userSelect: 'none'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9f9ff';\n }}\n >\n {text}\n </div>\n ))}\n </div>\n );\n}\n\nconst SuggestionArea = ({ formDataState, handleStream }: any) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <span\n style={{\n // paddingLeft: '1rem',\n fontSize: '1rem',\n color: '#1f2937',\n lineHeight: '1.75rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n display: 'inline'\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ fontSize: '1rem' }}>\n You can also try some options from the\n </span>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n style={{\n backgroundColor: '#f3f0ff',\n color: '#5928ed',\n padding: '4px 12px',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '0.9rem',\n fontWeight: 500,\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#ebe4ff')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#f3f0ff')}\n >\n suggestions\n <span style={{ fontSize: '0.7rem' }}>{isExpanded ? <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 10L7.5 3L14 10\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg> : <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5L7.5 12L1 5\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg>}</span>\n </button>\n </div>\n\n {isExpanded && (\n <div\n style={{\n // marginTop: '0.75rem',\n // padding: '0.75rem',\n backgroundColor: '#f9fafb',\n // border: '1px solid #e5e7eb',\n borderRadius: '0.75rem',\n display: 'flex',\n justifyContent: 'start',\n // boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n animation: 'fadeIn 0.3s ease-in-out',\n transition: 'opacity 0.4s ease',\n opacity: 1,\n }}\n >\n\n <SuggestionChips\n onSelect={(text: string) => {\n handleStream(\n new KeyboardEvent('keydown', { key: 'Enter' }),\n false,\n `${text}`\n );\n }}\n original={formDataState?.original}\n tooltip={formDataState?.tooltip}\n modification={formDataState?.modification}\n />\n </div>\n )}\n </span>\n );\n};\n\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({ chatAssistantLogoUrl, chatAssistantName, organizationName, baseUrl, setInstantLearningSuggestions, formDataState, setFormDataState, hasUserFilledForm, setHasUserFilledForm, baseWebsocketUrl, setIsNewChatClicked, selectedText, ChatIconComponent, ggcAssistantName, ThinkingBulbIconComponent, hasUserWrittenModification, setExtractedModification, setSave, setExtractedTooltip, setIsSaveLoading, isSaveLoading, save, instantLearningSuggestions, template = '', setShouldTriggerSave, validationWtaResponse, setValidationWtaResponse, learningWtaResponse, setLearningWtaResponse, isFormSaveClicked,\n setIsFormSavedClicked, onDeleteLearning, deleteLearningTrigger, setDeleteLearningTrigger, onMergeLearning, mergeLearningTrigger, setMergeLearningTrigger, onResetLearningData, setEditConflictingLearningTrigger, setEditSimilarLearningTrigger\n\n , sendMessageInChat,\n setSendMessageInChat,\n setIsMergeLoading,\n //contextual props \n setExtractedHowToRespond,\n setExtractedTopic,\n setExtractedCategories,\n setValidationRecommendations, \n validationRecommendations, \n addInReview,\n editInReview,\n deleteInReview,\n assistantId,\n isFromDashboard = false,\n\n}) => {\n const chatAssistant = chatAssistantName;\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [selectedWTA, setSelectedWTA] = useState<string[]>([]);\n const [showSelectedWTA, setShowSelectedWTA] = useState(false);\n // const isFirstQuestionSent = useRef<boolean>(false)\n const [userInput, setUserInput] = useState<null | string>('');\n const [welcomeMessage, setWelcomeMessage] = useState('');\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState(false);\n const [isStreamEnd, setIsStreamEnd] = useState(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState(true);\n const [chatInitialMessage, setChatInitialMessage] = useState('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const [suggestedWta, setSuggestedWta] = useState<string[]>([]);\n const [deletedLearningIds, setDeletedLearningIds] = useState<Set<string>>(new Set());\n const [mergedLearningIds, setMergedLearningIds] = useState<Set<string>>(new Set());\n const lastProcessedResponseRef = useRef<string>('');\n const lastProcessedMergeResponseRef = useRef<string>('');\n const processedDeleteToolsRef = useRef<Set<string>>(new Set());\n const isInputEmpty = useMemo(() => { return userInput?.trim() === '' || isStreaming }, [userInput, isStreaming]);\n const [deletionsInReviewState, setDeletionsInReviewState] = useState<{ question_id: string; variant_id: string }[]>(deleteInReview || []);\n const [editsInReviewState, setEditsInReviewState] = useState<any[]>(editInReview || []);\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState('100%');\n const learningWtaResponseRef = useRef(learningWtaResponse);\n const formDataStateRef = useRef(formDataState);\n \n useEffect(() => {\n learningWtaResponseRef.current = learningWtaResponse;\n }, [learningWtaResponse]);\n \n useEffect(() => {\n formDataStateRef.current = formDataState;\n }, [formDataState]);\n\n const areAllrequiredFieldsFilled = useMemo(() => {\n return formDataState?.original?.trim() !== \"\" &&\n (!formDataState?.isTooltipEnabled || formDataState?.tooltip?.trim() !== \"\") &&\n (!formDataState?.isModificationEnabled ||\n formDataState?.modification?.trim() !== \"\");\n }, [formDataState])\n\n // const makeLLMRequest = async ({\n // config,\n // user_prompt,\n // check_similarity,\n // system_prompt,\n // primary_type,\n // fallback_type,\n // primary_model,\n // fallback_model,\n // region,\n // temperature,\n // max_tokens,\n // primary_retries\n // }: LLMRequestParams): Promise<any> => {\n // const payload = {\n // name: ggcAssistantName,\n // organizationName: organizationName,\n // prompt: user_prompt,\n // overrideAgentConfig: {\n // GGCLLMAgent: {\n // properties: {\n // check_similarity: { value: check_similarity }\n // },\n // tools: {\n // LLMConfigurationTool: {\n // properties: {\n // context: { value: system_prompt },\n // llm_provider: { value: primary_type },\n // fallback1_provider: { value: fallback_type },\n // add_citations_in_response: { value: false }\n // },\n // integrations: {\n // VertexAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_output_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // AnthropicIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // OpenAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model }\n // }\n // }\n // }\n // }\n // }\n // }\n // }\n // };\n\n // try {\n // const response = await http.post(`${baseUrl}/api/chat/chatResponse`, payload, {\n // headers: {\n // 'Content-Type': 'application/json',\n // ...(config.API_KEY && { Authorization: `Bearer ${config.API_KEY}` })\n // }\n // });\n\n // const message = response?.data?.result?.Answer + '\\n Tell me more about this learning.';\n // const messageSplit = message.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < messageSplit.length; index++) {\n // setTimeout(() => {\n // concatStr += messageSplit[index] + ' ';\n // setChatInitialMessage(concatStr.trim());\n // }, 25 * index);\n // }\n\n // // setChatInitialMessage(concatStr)\n // return response.data;\n // } catch (error: any) {\n // console.error('Error making LLM request:', error.response?.data || error.message);\n // }\n // };\n\n // useEffect(() => {\n // // const staticWelcomeMessage = `👋 Welcome! I'm here to help suggest when to apply and when not to apply for your learning. Looks like you want to teach some learning about \"${selectedText}\"... \\n\\nCould you share in which scenarios you would like this learning to be applied?`\n // const staticWelcomeMessage = `Please tell me how I should correct \"${selectedText}\"? `\n\n // const welcomeMessageWords = staticWelcomeMessage.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < welcomeMessageWords.length; index++) {\n // setTimeout(() => {\n // concatStr += welcomeMessageWords[index] + ' ';\n // setWelcomeMessage(concatStr.trim());\n // }, 45 * index);\n // }\n // }, [])\n\n useEffect(() => {\n // if from dashboard ask user to enter questioin\n if (isFromDashboard){\n let staticWelcomeMessage = `Please enter the question you want to provide the learning for. `\n setWelcomeMessage(staticWelcomeMessage)\n }\n else {\n let staticWelcomeMessage = `Please tell me how I should respond to \"${selectedText}\"? `\n setWelcomeMessage(staticWelcomeMessage)\n } \n\n }, [formDataState])\n\n // const promptToTest = `You're a warm, conversational assistant helping someone explore when to apply and when not to apply a learning.\n\n // The user has just shared something they're thinking about—this could be a word, a phrase, or a full sentence:\n // \"{original}\"\n\n // At this stage, we don't know what this learning means to them or how they're thinking about using it.\n\n // Write one friendly message using the CARE framework, with a tone that blends curiosity, empathy, and acknowledgment:\n\n // Curiosity: Gently ask what prompted them to explore this learning—what made it stand out?\n\n // Acknowledge: Let them know it's thoughtful of them to reflect before jumping into action.\n\n // Respond with Empathy: Reassure them it's completely natural to pause and check if something fits before applying it.\n\n // Keep the tone warm, conversational, and supportive.\n // Don't suggest when to apply it yet—just invite them to share more.`\n\n\n // useEffect(() => {\n // if (!messages?.length) {\n // makeLLMRequest({\n // config: {\n // GGCLLMASSISTANTNAME: ggcAssistantName,\n // ORGANIZATION_NAME: organizationName\n // },\n // user_prompt: `Original Word: ${selectedText}`,\n // check_similarity: false,\n // system_prompt: promptToTest,\n // primary_type: 'Google VertexAI',\n // fallback_type: 'Azure OpenAI',\n // primary_model: 'gemini-2.0-flash',\n // fallback_model: 'gpt-4o',\n // region: 'us-central1',\n // temperature: 0,\n // max_tokens: 8192,\n // primary_retries: 3\n // })\n // }\n // }, [messages])\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n\n const handleScroll = () => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollTop = scrollContainer.scrollTop; // Distance scrolled\n const scrollHeight = scrollContainer.scrollHeight; // Total height of content\n const clientHeight = scrollContainer.clientHeight; // Visible height\n\n // Calculate if the user is at the bottom\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) <= 35; // 0px threshold\n setIsVisible(!isAtBottom);\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleScroll);\n }\n };\n }, [isVisible, isStreamEnd, messages]);\n\n // useEffect(() => {\n // if (hasUserFilledForm) {\n // isFirstQuestionSent.current = true;\n // // const constructedUserQuery = constructUserQuery(formDataState);\n // // // setUserInput(constructUserQuery(formDataState))\n // // setTimeout(() => {\n // // const keyBoardEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n // // handleStream(keyBoardEvent, true, constructedUserQuery)\n // // }, 200)\n // }\n // }, [hasUserFilledForm])\n\n\n // const useParsedHeaderSuggestions = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // // Regex to extract code block that starts with ```json and ends with ```\n // const codeBlockRegex = /```json\\s*([\\s\\S]*?)\\s*```/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(codeBlockRegex);\n // if (match) {\n // try {\n // const parsed = JSON.parse(match[1]); // match[1] contains the inner JSON block\n // results.push(parsed);\n // } catch (e) {\n // console.error(\"Failed to parse JSON inside code block:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSuggestions = (messages: any[],onRecommendationFound: (recommendations: FormattedValidationRecommendation | null) => void, onDeleteToolCall?: (deleteToolData: any) => void, onMergeToolCall?: (mergeToolData: any) => void,\n onEditToolCall?: (editToolData: any) => void) => {\n return useMemo(() => {\n const results: object[] = [];\n\n // const pattern = /\"conditions_whentoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*\"conditions_whennottoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n \n //suggestion tool\n const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n\n const contextualPattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n // const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[(\\s*\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?)*\\s*\\]/i;\n \n // validation tool \n const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?\\s*)*\\]\\s*,\\s*['\"]save['\"]\\s*:\\s*(true|false|True|False)/;\n\n // retrieval tool regex\nconst dbValidationPattern = /['\"]is_valid_db['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflicting_learnings['\"]\\s*:\\s*([\\s\\S]*?)\\s*,\\s*['\"]similar_learnings['\"]\\s*:\\s*([\\s\\S]*)(?:\\s*,\\s*[\"']save[\"']\\s*:\\s*(true|false|True|False))?(?=\\s*})/;\n\n // Delete tool pattern to match delete tool JSON structure\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]deleted_similar_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]\\s*,\\s*['\"]deleted_conflicting_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]/;\n\n // Robust merge tool pattern that handles Python dictionary format with single quotes and True\n const mergeToolPattern = /{\\s*['\"]merge_learnings['\"]\\s*:\\s*(?:True|true)[\\s\\S]+?}/;\n\n\n //Edit tool pattern \n // REGEX FOR MATCHING: (NOTE: DO INCLUDE A string check for edit_actions)\n\n // const regex = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n // const match = text.match(regex);\n // let jsonLike = match[1];\n // const jsonStr = jsonLike.replace(/'/g, '\"');\n\n const editToolPattern = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n const jsonFinderPattern = /({[\\s\\S]*})/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n console.log('🔍 RESPONSE DATA:', String(responseData));\n \n // Check if response contains merge_learnings\n if (String(responseData).includes('merge_learnings')) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n \n // Check if response contains merge_learnings\n if (String(responseData).includes(\"'merge_learnings'\")) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n const contextualMatch = responseData.match(contextualPattern);\n if (contextualMatch) {\n try {\n let cleanedContextual = sanitizePythonDictToJSON(contextualMatch[0] || '');\n const contextualObj = JSON5.parse(`{${cleanedContextual}}`);\n \n console.log('Contextual conditions detected:', contextualObj);\n \n // Store in results with a flag to differentiate\n results.push({\n ...contextualObj,\n _isContextual: true // Flag to identify contextual data\n });\n } catch (e) {\n console.error(\"Failed to parse contextual JSON:\", e);\n }\n }\n\n const validationMatch = responseData.match(validationPattern);\n console.log('validationObj before cond ', validationMatch);\n if (validationMatch) {\n try {\n //will get stored in validation match only if validation fails.\n\n let cleanedValidation = sanitizePythonDictToJSON(responseData || '')\n let parsedData = JSON5.parse(cleanedValidation);\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid' in parsedData &&\n 'conflictingConditions' in parsedData) {\n console.log('Found validation data in response:', parsedData);\n setValidationWtaResponse(parsedData);\n console.log('dbVal after set in chat', validationWtaResponse);\n }\n } catch (e) {\n console.error(\"Failed to parse validation JSON:\", e);\n }\n }\n // Try to parse the entire responseData as JSON to handle nested objects properly\n try {\n let cleanedResponse = sanitizePythonDictToJSON(responseData || '')\n\n // Try to parse as a complete JSON object first\n let parsedData = JSON5.parse(cleanedResponse);\n\n // Check if this contains our expected validation structure\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid_db' in parsedData &&\n 'conflicting_learnings' in parsedData &&\n 'similar_learnings' in parsedData) {\n\n console.log('Found validation data in response:', parsedData);\n setLearningWtaResponse(parsedData);\n console.log('dbVal after set in chat', learningWtaResponse);\n } else {\n // Fallback to regex if JSON parsing doesn't find the expected structure\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n let cleanedDBValidation = sanitizePythonDictToJSON2(dbValidationMatch[0] || '')\n const dbValidationObj = JSON5.parse(`{${cleanedDBValidation}}`);\n setLearningWtaResponse(dbValidationObj);\n console.log('dbVal after set in chat (regex fallback)', learningWtaResponse);\n }\n }\n } catch (e) {\n // If JSON parsing fails, fallback to the original regex approach\n console.log('JSON parsing failed, trying regex fallback for validation data');\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n let cleanedDBValidation = sanitizePythonDictToJSON2(dbValidationMatch[0] || '')\n const dbValidationObj = JSON5.parse(`{${cleanedDBValidation}}`);\n setLearningWtaResponse(dbValidationObj);\n console.log('dbVal after set in chat (regex fallback)', learningWtaResponse);\n } catch (regexError) {\n console.error(\"Failed to parse validation JSON with regex fallback:\", regexError);\n }\n }\n }\n const deleteToolMatch = responseData.match(deleteToolPattern);\n if (deleteToolMatch) {\n try {\n let cleanedDeleteTool = sanitizePythonDictToJSON(deleteToolMatch[0] || '')\n\n const deleteToolObj = JSON5.parse(`{${cleanedDeleteTool}}`);\n\n console.log('Delete tool detected:', deleteToolObj);\n\n // Call the callback with the delete tool data (deduplication happens in the callback)\n if (onDeleteToolCall) {\n onDeleteToolCall(deleteToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse delete tool JSON:\", e);\n }\n }\n\n\n console.log('🔍 Testing merge tool regex on response data...');\n \n const mergeToolMatch = responseData.match(mergeToolPattern);\n console.log('🔍 Merge tool regex match result:', mergeToolMatch);\n \n if (mergeToolMatch) {\n console.log('🔍 MERGE TOOL REGEX MATCHED!');\n try {\n // get python-like dictionary string.\n const pythonLikeString = mergeToolMatch[0];\n\n // sanitize the string into valid JSON format.\n const jsonString = sanitizePythonDictToJSON(pythonLikeString);\n\n // parse the sanitized JSON string into an object.\n const mergeToolObj = JSON5.parse(jsonString);\n\n console.log('✅ Correctly parsed merge tool object:', mergeToolObj);\n\n //pass the complete, correctly parsed object to the callback.\n // The arrays inside mergeToolObj are now perfect and require no splitting.\n if (onMergeToolCall) {\n onMergeToolCall(mergeToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse merge tool JSON:\", e);\n }\n }\n //edit tool \n const editToolMatch = responseData.match(editToolPattern);\n if (editToolMatch && responseData.includes('edit_actions')) {\n try {\n console.log('Edit tool match found:', editToolMatch[0]);\n const jsonString = sanitizePythonDictToJSON(editToolMatch[0]);\n const editToolObj = JSON5.parse(jsonString);\n console.log('Edit tool detected and parsed successfully:', editToolObj);\n\n // Existing logic for form triggers (keep for non-dashboard or hybrid flows)\n if (editToolObj.conflicting_learnings) {\n setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n }\n if (editToolObj.similar_learnings) {\n setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n }\n \n // Call the new callback\n if (onEditToolCall) {\n onEditToolCall(editToolObj);\n }\n \n } catch (e) {\n console.error(\"Failed to parse edit tool JSON:\", e);\n }\n }\n const jsonMatch = responseData.match(jsonFinderPattern);\n if (jsonMatch) {\n try {\n const jsonString = sanitizePythonDictToJSON(jsonMatch[0]);\n const parsedObject = JSON5.parse(jsonString);\n\n // Check if it's the recommendation object\n if (parsedObject.recommended_whentoapply || parsedObject.recommended_whennottoapply) {\n console.log(\"Found recommendation data:\", parsedObject);\n // Use the parser function\n const recommendations = parseValidationRecommendations(parsedObject);\n console.log(\"Parsed recommendations:\", recommendations);\n onRecommendationFound(recommendations); // <-- Call the callback\n }\n } catch (e) {\n // It's okay if parsing fails, might not be the recommendation JSON\n // console.error(\"Attempted to parse recommendations, but failed (might be other JSON):\", e);\n }\n }\n }\n\n return results;\n }, [messages, onDeleteToolCall]);\n};\n\n //edit tool for dashboard behavior.\n\n const processedEditToolsRef = useRef<Set<string>>(new Set());\n\n // Callback function to handle edit tool calls\n const handleEditToolCallback = useCallback(async (editToolData: any) => {\n // Create a unique identifier for this edit operation to prevent duplicates\n const editOperationId = JSON.stringify({\n conflicting: Object.keys(editToolData.conflicting_learnings || {}).sort(),\n similar: Object.keys(editToolData.similar_learnings || {}).sort(),\n variant: Object.values(editToolData.similar_learnings || {})[0] // Simple check on content\n });\n\n if (processedEditToolsRef.current.has(editOperationId)) {\n return;\n }\n processedEditToolsRef.current.add(editOperationId);\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n console.log(\"[Dashboard Mode] Processing Edit Tool:\", editToolData);\n\n const processEdits = async (learningsDict: any) => {\n if (!learningsDict) return;\n\n for (const [id, data] of Object.entries(learningsDict)) {\n const editData = data as any;\n \n // 1. Helper to find the original learning object to get variant_id\n const getLearningDetails = (searchId: string) => {\n const conflicting = learningWtaResponseRef.current?.conflicting_learnings || {};\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n \n // Search by ID in values (since keys might be \"A\", \"B\", etc.)\n let found = Object.values(conflicting).find((l: any) => l.id === searchId);\n if (found) return found;\n \n found = Object.values(similar).find((l: any) => l.id === searchId);\n return found;\n };\n\n const itemDetails: any = getLearningDetails(id);\n\n if (!itemDetails) {\n console.warn(`[Dashboard Mode] Could not find original learning for edit ID: ${id}`);\n continue;\n }\n\n // 2. Prepare Payload\n const variantId = itemDetails.variant_id; // \"id\" in payload\n const parentId = itemDetails.id; // \"parentId\" in payload\n\n // Join arrays to strings for the API\n const wta = Array.isArray(editData.conditions_whentoapply) \n ? editData.conditions_whentoapply.join(' OR ') \n : (editData.conditions_whentoapply || \"\");\n \n const wnta = Array.isArray(editData.conditions_whennottoapply) \n ? editData.conditions_whennottoapply.join(' OR ') \n : (editData.conditions_whennottoapply || \"\");\n \n const currentFormScope = formDataStateRef.current?.scope;\n \n // Default to Global if user hasn't selected anything, otherwise use form data\n let scopePayload = { name: \"Global\", value: null as any };\n\n if (currentFormScope && currentFormScope.name) {\n if (currentFormScope.name === 'Global') {\n scopePayload = { name: \"Global\", value: null };\n } else {\n // For User, Custom, and Assistant, the value in formDataState\n // matches the required API structure (Array for User, Object for others)\n scopePayload = {\n name: currentFormScope.name,\n value: currentFormScope.value\n };\n }\n }\n\n const editPayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isUpdateAction: true, // Edit Action\n isAgentsFeedback: true,\n variant: {\n id: variantId, // The variant_id\n variant: editData.variant,\n conditions_whentoapply: wta,\n conditions_whennottoapply: wnta,\n scope: scopePayload,\n topic: {\n id: null,\n value: itemDetails.feedback?.topic?.value,\n },\n categories: [],\n originalQuestion: \"\",\n parameterizedQuestion: itemDetails.feedback.question,\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n created_by: null,\n updated_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n updated_by: \"madumbu.kathyayani@techolution.com\",\n instantLearningType: \"iL\",\n appliedTagsIL: [],\n tagMappingInfoIL: {}, \n }\n }\n };\n \n \n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: editPayload\n });\n\n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully Edited ID: ${id}`);\n \n // 3. Update UI only on success (Update local state to reflect changes)\n setLearningWtaResponse((prev: any) => {\n if (!prev) return prev;\n const newResp = { ...prev };\n \n const updateList = (listName: string) => {\n const list = newResp[listName];\n if (!list) return;\n // Iterate keys (A, B, etc.) to find the item with matching ID\n Object.keys(list).forEach(key => {\n if (list[key].id === id) {\n list[key] = {\n ...list[key],\n feedback: {\n ...list[key].feedback,\n variant: editData.variant,\n when_to_apply: editData.conditions_whentoapply, // Keep array for UI\n when_not_to_apply: editData.conditions_whennottoapply // Keep array for UI\n }\n };\n }\n });\n };\n \n updateList('conflicting_learnings');\n updateList('similar_learnings');\n return newResp;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to edit ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling edit API for ID: ${id}`, error);\n }\n }\n };\n\n await processEdits(editToolData.conflicting_learnings);\n await processEdits(editToolData.similar_learnings);\n }\n }, [isFromDashboard, baseUrl, organizationName, setLearningWtaResponse]);\n\n\n// Callback function to handle delete tool calls\n const handleDeleteToolCallback = useCallback(async (deleteToolData: any) => {\n // Create a unique identifier for this delete operation\n const deleteOperationId = JSON.stringify({\n deleted_similar_learning_ids: deleteToolData.deleted_similar_learning_ids || [],\n deleted_conflicting_learning_ids: deleteToolData.deleted_conflicting_learning_ids || [],\n delete_current_learning: deleteToolData.delete_current_learning || false\n });\n\n // Check if we've already processed this exact delete operation\n if (processedDeleteToolsRef.current.has(deleteOperationId)) {\n return; \n }\n processedDeleteToolsRef.current.add(deleteOperationId);\n\n // Collect all IDs to delete\n const allDeletedIds = [\n ...(deleteToolData.deleted_similar_learning_ids || []),\n ...(deleteToolData.deleted_conflicting_learning_ids || [])\n ];\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n if (allDeletedIds.length > 0) {\n console.log(\"[Dashboard Mode] Executing Delete APIs for IDs:\", allDeletedIds);\n\n // Helper function to find the learning object by ID from the REF\n const getLearningDetails = (id: string) => {\n // --- CHANGED: Use Ref.current here ---\n const conflicting = learningWtaResponseRef.current?.conflicting_learnings || {};\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n \n let found = Object.values(conflicting).find((l: any) => l.id === id);\n if (found) return found;\n \n found = Object.values(similar).find((l: any) => l.id === id);\n return found;\n };\n\n for (const id of allDeletedIds) {\n // 1. Get the details of the item being deleted\n const itemDetails: any = getLearningDetails(id);\n \n // 2. Extract specific fields\n \n const payloadId = itemDetails?.variant_id; \n \n const variantText = itemDetails?.feedback?.variant || \"\";\n const wtaRaw = itemDetails?.feedback?.when_to_apply;\n const wtaString = Array.isArray(wtaRaw) ? wtaRaw.join(' OR ') : (wtaRaw || \"\");\n const wntaRaw = itemDetails?.feedback?.when_not_to_apply;\n const wntaString = Array.isArray(wntaRaw) ? wntaRaw.join(' OR ') : (wntaRaw || \"\");\n\n // 3. Construct the detailed payload\n const payload = {\n \"status\": \"approved\",\n \"metadata\": {\n \"userName\": \"M Kathyayani\",\n \"userEmailId\": \"madumbu.kathyayani@techolution.com\",\n \"llm\": \"claude-3.5-sonnet\",\n \"isVariantFlow\": true,\n \"isDeleteAction\": true,\n \"isAgentsFeedback\": true,\n \"variant\": {\n \"id\": payloadId, \n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n \"variant\": variantText, \n \"conditions_whentoapply\": wtaString,\n \"conditions_whennottoapply\": wntaString,\n \"question\": \"\",\n \"categories\": [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }), \n \"originalQuestion\": \"\",\n \"parameterizedQuestion\": \"\",\n \"parentId\": itemDetails?.id \n },\n \n }\n };\n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: payload\n });\n \n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully deleted ID: ${id}`);\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(id);\n return newSet;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to delete ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling delete API for ID: ${id}`, error);\n }\n }\n }\n return; \n }\n // -------------------------------\n\n // Standard Mode Logic (Non-Dashboard)\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n allDeletedIds.forEach(id => newSet.add(id));\n return newSet;\n });\n\n }, [setDeletedLearningIds, baseUrl, organizationName, isFromDashboard]); // REMOVED learningWtaResponse from here\n\n \n// Callback function to handle merge tool calls\n const handleMergeToolCallback = useCallback(async (mergeToolData: any) => {\n setIsMergeLoading(true);\n console.log('🔴 MERGE CALLBACK - Processing merge tool call');\n \n const { merge_learnings, similar_learnings, conditions_whentoapply, conditions_whennottoapply } = mergeToolData;\n\n if (!merge_learnings || !similar_learnings || !Array.isArray(similar_learnings)) {\n console.log('Invalid merge tool data, skipping');\n setIsMergeLoading(false);\n return;\n }\n\n // 1. Update the Current Form with new conditions (Common for both modes)\n if (conditions_whentoapply && Array.isArray(conditions_whentoapply)) {\n console.log(' MERGE CALLBACK - Replacing whenToApply conditions:', conditions_whentoapply);\n const whenToApplyString = conditions_whentoapply.join(' OR ');\n \n setFormDataState((prev: any) => ({\n ...prev,\n whenToApply: whenToApplyString,\n _mergeUpdate: true, \n _mergeWTA: conditions_whentoapply \n }));\n }\n\n if (conditions_whennottoapply && Array.isArray(conditions_whennottoapply)) {\n console.log(' MERGE CALLBACK - Replacing whenNotToApply conditions:', conditions_whennottoapply);\n const whenNotToApplyString = conditions_whennottoapply.join(' OR ');\n \n setFormDataState((prev: any) => ({\n ...prev,\n whenNotToApply: whenNotToApplyString,\n _mergeUpdate: true, \n _mergeWNTA: conditions_whennottoapply \n }));\n }\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n console.log(\"[Dashboard Mode] Executing Merge-Delete APIs for IDs:\", similar_learnings);\n\n // Helper to look up variant_id\n const getLearningDetails = (id: string) => {\n // Use Ref.current to avoid dependency recursion\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n return Object.values(similar).find((l: any) => l.id === id);\n };\n\n for (const id of similar_learnings) {\n // Get details to find the correct variant_id\n const itemDetails: any = getLearningDetails(id);\n // Use variant_id if available, fallback to id\n const payloadId = itemDetails?.variant_id;\n\n // For a merge, we essentially \"Delete\" the old one because its conditions \n // have been moved to the current form state (handled above).\n const payload = {\n \"status\": \"approved\",\n \"metadata\": {\n \"userName\": \"M Kathyayani\",\n \"userEmailId\": \"madumbu.kathyayani@techolution.com\",\n \"llm\": \"claude-3.5-sonnet\",\n \"isVariantFlow\": true,\n \"isDeleteAction\": true,\n \"isAgentsFeedback\": true,\n \"variant\": {\n \"id\": payloadId, \n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n \"variant\": \"\", \n \"conditions_whentoapply\": \"\",\n \"conditions_whennottoapply\": \"\",\n \"question\": \"\",\n \"categories\": [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }), \n \"originalQuestion\": \"\",\n \"parameterizedQuestion\": \"\",\n \"parentId\": itemDetails?.id \n },\n \n }\n };\n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: payload\n });\n\n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully Merged (Deleted) ID: ${id}`);\n // Update UI only on success\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(id);\n return newSet;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to merge-delete ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling merge-delete API for ID: ${id}`, error);\n }\n }\n \n setIsMergeLoading(false);\n return; // Exit function for dashboard mode\n }\n // -------------------------------\n\n // Standard Mode (Non-Dashboard): Optimistic Update\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n similar_learnings.forEach((id: string) => newSet.add(id));\n return newSet;\n });\n \n setIsMergeLoading(false);\n \n }, [setMergedLearningIds, setFormDataState, setIsMergeLoading, baseUrl, organizationName, isFromDashboard]);\n\n const parsedSuggestions = useParsedHeaderSuggestions(messages, setValidationRecommendations,handleDeleteToolCallback, handleMergeToolCallback, handleEditToolCallback);\n\n // Replace the logic inside the useEffect for parsedSuggestions\n \n useEffect(() => {\n const latestSuggestions: ParsedSuggestion | null = parsedSuggestions?.[parsedSuggestions?.length - 1] || null;\n if (latestSuggestions) {\n \n if (latestSuggestions._isContextual) {\n console.log(\"Processing contextual suggestions:\", latestSuggestions);\n\n // Filter out empty strings immediately\n const whenToApplyStrings = latestSuggestions.conditions_whentoapply?.map(\n (item: any) => item.when_to_apply\n ).filter((str: string) => str && str.trim() !== '') || [];\n\n const whenNotToApplyStrings = latestSuggestions.conditions_whennottoapply?.map(\n (item: any) => item.when_not_to_apply \n ).filter((str: string) => str && str.trim() !== '') || [];\n\n // Update formDataState with the CLEANED arrays\n // If the result is [], the form will show \"No suggestions found\" instead of \"1.\"\n setFormDataState((prev: any) => ({\n ...prev,\n whenToApply: whenToApplyStrings,\n whenNotToApply: whenNotToApplyStrings,\n _contextualUpdate: true \n }));\n }\n else {\n // Handle find/replace suggestions (existing logic)\n setInstantLearningSuggestions(latestSuggestions);\n }\n console.log(\"Parsed suggestions:\", parsedSuggestions);\n }\n }, [parsedSuggestions]);\n\n\n\n // Filter learningWtaResponse when deletedLearningIds changes (similar to LearningDetailsForm logic)\n useEffect(() => {\n if (!learningWtaResponse || deletedLearningIds.size === 0) return;\n\n // Check if we have any learnings that need to be filtered out\n const hasConflictingToFilter = learningWtaResponse.conflicting_learnings &&\n Object.values(learningWtaResponse.conflicting_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasConflictingToFilter && !hasSimilarToFilter) return;\n\n // Create a unique identifier for the current response to prevent infinite loops\n const currentResponseId = JSON.stringify({\n deletedIds: Array.from(deletedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of deleted IDs\n if (lastProcessedResponseRef.current === currentResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out deleted learnings from conflicting learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.conflicting_learnings) {\n const remainingConflicting = Object.values(filteredResponse.conflicting_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying conflicting learnings:', {\n originalKeys: Object.keys(filteredResponse.conflicting_learnings),\n remainingCount: remainingConflicting.length,\n remainingLearnings: remainingConflicting.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedConflicting: any = {};\n remainingConflicting.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedConflicting[key] = learning;\n console.log(`[ChatComponent] Conflicting learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.conflicting_learnings = rekeyedConflicting;\n console.log('[ChatComponent] Final conflicting learnings keys:', Object.keys(rekeyedConflicting));\n }\n\n // Filter out deleted learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of deleted IDs as processed\n lastProcessedResponseRef.current = currentResponseId;\n\n console.log('Filtered learningWtaResponse after deletion:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [deletedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // Filter learningWtaResponse when mergedLearningIds changes (similar to delete logic)\n useEffect(() => {\n if (!learningWtaResponse || mergedLearningIds.size === 0) return;\n\n // Check if we have any similar learnings that need to be filtered out (merge only affects similar learnings)\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n mergedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasSimilarToFilter) return;\n\n // Create a unique identifier for the current merge response to prevent infinite loops\n const currentMergeResponseId = JSON.stringify({\n mergedIds: Array.from(mergedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of merged IDs\n if (lastProcessedMergeResponseRef.current === currentMergeResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out merged learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !mergedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings after merge:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys after merge:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of merged IDs as processed\n lastProcessedMergeResponseRef.current = currentMergeResponseId;\n\n console.log('Filtered learningWtaResponse after merge:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [mergedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // ContextualChatComponent.tsx\n\nconst useParsedHeaderHowToRespond = (messages: any[]) => {\n return useMemo(() => {\n \n const results: object[] = [];\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n \n \n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n \n const extractedData: { question? : string , howtorespond?: string, topic?: string, categories?: string[], scope?: string, } = {};\n\n // Check if response contains any of our fields\n const hasRelevantFields = responseData.includes('howtorespond') || \n responseData.includes('topic') || \n responseData.includes('categories') || \n responseData.includes('scope') ||\n responseData.includes('question');\n \n if (hasRelevantFields) { \n try {\n console.log('checking question response data:', responseData);\n // Clean and parse the Python dict\n const cleanedData = sanitizePythonDictToJSON(responseData);\n \n const parsed = JSON5.parse(cleanedData);\n \n if ('howtorespond' in parsed) {\n extractedData.howtorespond = parsed.howtorespond;\n }\n \n if ('topic' in parsed) {\n extractedData.topic = parsed.topic;\n }\n \n if ('categories' in parsed) {\n extractedData.categories = Array.isArray(parsed.categories) \n ? parsed.categories \n : [];\n }\n if ('scope' in parsed) {\n extractedData.scope = parsed.scope;\n }\n // for dashboard\n if ('question' in parsed) {\n extractedData.question = parsed.question;\n }\n } catch (e) {\n console.error(\"❌ Failed to parse response data:\", e);\n \n const questionMatch = responseData.match(/['\"]question['\"]\\s*:\\s*['\"]([\\s\\S]*?)['\"](?=\\s*[,}])/);\n if (questionMatch) {\n extractedData.question = questionMatch[1];\n }\n // Manual extraction as fallback\n const howtoMatch = responseData.match(/['\"]howtorespond['\"]\\s*:\\s*['\"](.*?)['\"](?=\\s*[,}])/);\n if (howtoMatch) {\n console.log('🔧 MANUAL EXTRACTION succeeded:', howtoMatch[1]);\n extractedData.howtorespond = howtoMatch[1];\n } else {\n console.error('🔧 MANUAL EXTRACTION also failed');\n console.error('🔧 Trying alternative pattern...');\n \n // Even simpler pattern - just get everything between the quotes\n const simpleMatch = responseData.match(/howtorespond['\"]\\s*:\\s*['\"]([\\s\\S]*?)['\"](?:\\s*[,}]|$)/);\n if (simpleMatch) {\n console.log('🔧 ALTERNATIVE EXTRACTION succeeded:', simpleMatch[1]);\n extractedData.howtorespond = simpleMatch[1];\n }\n }\n }\n } else {\n console.log('⏭️ Skipping message - no relevant fields');\n }\n \n if (Object.keys(extractedData).length > 0) {\n console.log('📦 FINAL EXTRACTED DATA:', extractedData);\n results.push(extractedData);\n } else {\n console.log('⚠️ No data extracted from this message');\n }\n }\n \n console.log('🏁 useParsedHeaderHowToRespond COMPLETE. Results count:', results.length);\n return results;\n }, [messages]);\n};\n\n const parsedHowToRespond = useParsedHeaderHowToRespond(messages);\n \n useEffect(() => {\n\n const latestData: any = parsedHowToRespond?.[parsedHowToRespond?.length - 1] || null;\n \n if (!latestData) {\n return;\n }\n \n if ('howtorespond' in latestData) {\n setExtractedHowToRespond(latestData.howtorespond);\n }\n \n if ('topic' in latestData) {\n setExtractedTopic(latestData.topic);\n }\n\n if ('question' in latestData) {\n console.log(\"✅ Question Extracted:\", latestData.question);\n setFormDataState((prev: any) => {\n // Prevent unnecessary updates if it's the same\n if (prev.question === latestData.question) return prev;\n return {\n ...prev,\n question: latestData.question\n };\n });\n }\n if ('categories' in latestData && Array.isArray(latestData.categories)) {\n setExtractedCategories(latestData.categories);\n }\n \n if ('scope' in latestData) {\n console.log(\"✅ Setting scope:\", latestData.scope);\n \n setFormDataState((prev: any) => {\n // CASE 1: Empty scope (reset)\n if (latestData.scope === '') {\n return {\n ...prev,\n scope: {\n name: '', // This triggers the placeholder \"Select scope\"\n value: null\n }\n };\n }\n\n if (prev.scope?.name === latestData.scope) {\n return prev;\n }\n\n // CASE 3: New valid scope selection\n let newScopeValue: any = null;\n \n if (latestData.scope === 'User') {\n newScopeValue = []; \n } else if (latestData.scope === 'Assistant') {\n newScopeValue = { assistantName: chatAssistantName || '', conciergeId: assistantId || '' };\n }\n console.log('📌 Scope Set from Chat:', latestData.scope, 'Value:', newScopeValue);\n return {\n ...prev,\n scope: {\n name: latestData.scope,\n value: newScopeValue\n }\n };\n });\n }\n }, [parsedHowToRespond, setExtractedHowToRespond, setExtractedTopic, setExtractedCategories, setFormDataState, chatAssistantName]);\n\n\n\n const useParsedHeaderModification = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /['\"](\\w+)['\"]\\s*:\\s*['\"](.*?)['\"]/g;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON for header message:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parsedModification = useParsedHeaderModification(messages);\n\n useEffect(() => {\n const latestModification: any = parsedModification?.[parsedModification?.length - 1] || null;\n if (latestModification) {\n setExtractedModification(latestModification.modification)\n }\n\n }, [parsedModification]);\n\n const useParsedWtaSuggestions = (\n messages: any[],\n setSuggestedWta: (wta: string[]) => void\n ) => {\n useEffect(() => {\n const orchestratorAndAgentsMessages =\n messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const regex = /<wta>([\\s\\S]*?)<\\/wta>/gi;\n const matches: string[] = [];\n let match;\n while ((match = regex.exec(responseData)) !== null) {\n console.log('match wta suggestion', match)\n matches.push(match[1]);\n }\n\n if (matches.length) {\n setSuggestedWta(matches);\n }\n }\n }, [messages, setSuggestedWta]);\n };\n\n useParsedWtaSuggestions(messages, setSuggestedWta);\n\n const useParsedHeaderTooltip = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /^\\{\\s*(['\"])(\\w+)\\1\\s*:\\s*(['\"])(.*?)\\3\\s*\\}$/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match: string[] = responseData.match(pattern);\n if (match) {\n console.log('match: ', match[0])\n try {\n const extracted = JSON5.parse(match[0]);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parseTooltip = useParsedHeaderTooltip(messages);\n\n useEffect(() => {\n const latestParseTooltip: any = parseTooltip?.[parseTooltip?.length - 1] || null;\n if (latestParseTooltip) {\n console.log('latestParseTooltip: ', latestParseTooltip)\n setExtractedTooltip(latestParseTooltip?.tooltip)\n }\n\n }, [parseTooltip]);\n\n // const useParsedHeaderSave = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // const pattern = /\\{\\s*'save'\\s*:\\s*(True|False|true|false)\\s*\\}/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(pattern);\n // if (match) {\n // try {\n // // Transform and store the fixed version\n // const fixed = match[0]\n // .replace(/\\bTrue\\b/, 'true')\n // .replace(/\\bFalse\\b/, 'false')\n // .replace(/'/g, '\"'); // single to double quotes\n\n // console.log('corrected: ', fixed);\n\n // const extracted = JSON5.parse(fixed);\n // results.push(extracted);\n // } catch (e) {\n // console.error(\"Failed to parse JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSave = (messages: any[]) => {\n const [parsedSave, setParsedSave] = useState<object[]>([]);\n\n useEffect(() => {\n const results: object[] = [];\n const pattern = /\\{\\s*['\"]save['\"]\\s*:\\s*(True|False|true|false)\\s*\\}/;\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n\n if (match) {\n try {\n const fixed = match[0]\n .replace(/\\bTrue\\b/, 'true')\n .replace(/\\bFalse\\b/, 'false')\n .replace(/'/g, '\"');\n\n console.log('corrected:', fixed);\n\n const extracted = JSON5.parse(fixed);\n if (extracted.save === true) {\n setShouldTriggerSave(true);\n }\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n setParsedSave(results);\n }, [messages]);\n\n return parsedSave;\n };\n\n const parsedSave = useParsedHeaderSave(messages);\n\n // useEffect(() => {\n // const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n\n // let timeoutId: NodeJS.Timeout;\n\n // if (latestParsedSave && latestParsedSave?.save && !isSaveLoading) {\n // setIsSaveLoading(true)\n // timeoutId = setTimeout(() => {\n // setIsSaveLoading(false)\n // setSave(latestParsedSave.save);\n // }, 200); // delay in milliseconds\n // }\n\n // return () => {\n // clearTimeout(timeoutId);\n // };\n // }, [parsedSave]);\n useEffect(() => {\n const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n // Guard: ensure it's a boolean value\n if (!latestParsedSave || typeof latestParsedSave.save !== 'boolean') return;\n\n setIsSaveLoading(true);\n\n const timeoutId = setTimeout(() => {\n setIsSaveLoading(false);\n setSave(latestParsedSave.save);\n }, 200);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [parsedSave]);\n\n useEffect(() => {\n if (isFormSaveClicked) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save it')\n setIsFormSavedClicked(false)\n }\n }, [isFormSaveClicked])\n\n useEffect(() => {\n if (deleteLearningTrigger && onDeleteLearning) {\n const deleteMessage = `Delete learning ${deleteLearningTrigger}`;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, deleteMessage)\n if (setDeleteLearningTrigger) {\n setDeleteLearningTrigger(null);\n }\n }\n }, [deleteLearningTrigger, onDeleteLearning, setDeleteLearningTrigger])\n\n useEffect(() => {\n if(sendMessageInChat) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat)\n setSendMessageInChat('');\n }\n }, [sendMessageInChat])\n\n useEffect(() => {\n getChatSettings();\n getChatHistory()\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n\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\n const scrollToBottom = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n setTimeout(() => {\n scrollContainer.scrollTo({\n top: scrollContainer.scrollHeight,\n behavior: \"smooth\",\n });\n setIsVisible(false)\n }, 100);\n }\n }, []);\n\n useEffect(() => {\n if (selectedWTA?.length > 0) {\n scrollToBottom()\n }\n }, [selectedWTA]);\n\n const getChatSettings = () => {\n let config = {\n method: 'get',\n maxBodyLength: Infinity,\n url: `${url}/api/chatbot/getChatSettings?name=${chatAssistant}&organizationName=${organizationName}`,\n headers: {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n // setChatInitialMessage(\n // response?.data?.chatSettings?.chatInitialMessage\n // );\n\n if (response?.data?.chatSettings?.chatInitialMessage !== '') {\n setShowWelcomeMessage(true);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n });\n };\n\n const getChatHistory = async () => {\n const getHistoryURL = `${url}/api/chat/history?name=${chatAssistant}&organizationName=${organizationName}`;\n\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n\n if (data.length > 0) {\n setMessages(data)\n // addDateDividerToMessages(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 setValidationWtaResponse(null)\n setLearningWtaResponse(null)\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n setExtractedHowToRespond('');\n setExtractedTopic('');\n setExtractedCategories([]);\n setEditsInReviewState([]);\n\n setIsNewChatClicked(true)\n setShowSelectedWTA(false)\n setSelectedWTA([])\n setChatInitialMessage('');\n setDeletedLearningIds(new Set()); // Clear deleted learning IDs for new chat\n setDeletionsInReviewState([]);\n lastProcessedResponseRef.current = ''; // Reset processing ref for new chat\n processedDeleteToolsRef.current.clear(); // Clear processed delete tools for new chat\n processedMergeTriggers.current.clear(); // Clear processed merge triggers for new chat\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null); // Clear any pending merge triggers\n }\n chatPreviewIdRef.current = `${uuidv4()}`;\n setHasUserFilledForm(false)\n setMessages([]);\n setShowWelcomeMessage(true);\n\n // Reset learning data in LearningDetailsForm\n if (onResetLearningData) {\n console.log('[ChatComponent] 🔄 Calling onResetLearningData callback');\n onResetLearningData();\n } else {\n console.log('[ChatComponent] ❌ onResetLearningData callback not available');\n }\n processedEditToolsRef.current.clear(); // Clear processed edit tools for new chat\n // --- FIX: REMOVED incorrect setFormDataState block ---\n // This was resetting the wrong data structure and is\n // redundant because onResetLearningData() handles it.\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n // Regular expression to match an anchor tag with asterisk inside\n const regex = /<a [^>]*>.*?<\\/a>/g;\n // Check if the inputString contains an anchor tag with asterisk and replace it\n const replacedString = inputString?.replace(regex, (match) => {\n // Replace asterisk inside the anchor tag with &ast;\n return match?.replace(/\\*/g, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj = (event: any, accordianMessageArray: any, explainabilityMap: any) => {\n console.log('event', event, Object.keys(event));\n console.log('content: ', event?.data)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n //orchestrator is sending message, we initially set it as normal message\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n //orchestrator is sending message and thinking break is there, we add it to accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n //check for wait message deletion\n streamedresponse.content = \"\";\n accordianMessageArray.push(\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n\n }\n //orchestrator replied with the final message, this is the final response, no need for accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === true) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n\n //agent responded it will directly be shown in collapsed form\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n ]\n }\n }\n\n //final response from agent\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult?.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray.push(\n\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n }\n\n }\n\n const annotations = event?.data?.chatStream?.continueChatResult?.message?.annotations;\n const userFeedbackId = event?.data?.chatStream?.continueChatResult?.message?.userFeedbackId || ''\n let assistantObj = {\n role: 'assistant',\n content: streamedresponse.content,\n orchestratorAndAgentsMessages: accordianMessageArray,\n time: new Date(),\n requestId: event?.data?.chatStream?.continueChatResult?.requestId ?? '',\n citations: event?.data?.chatStream?.continueChatResult?.message?.citations,\n guides_utilized: event?.data?.chatStream?.continueChatResult?.message?.guides_utilized ?? [],\n annotations: annotations,\n resourceId: event?.data?.chatStream?.continueChatResult?.resourceId,\n userFeedbackId,\n citationDisplayType: event?.data?.chatStream?.continueChatResult?.message?.citationDisplayType ?? \"\"\n }\n\n if (annotations) {\n for (let index = 0; index < annotations?.length; index++) {\n const annotation = annotations[index];\n assistantObj = { ...assistantObj, content: assistantObj?.content?.replace(annotation?.text, annotation?.text + `<sup>${index}</sup>`) }\n }\n }\n return assistantObj;\n }\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n\n if (startIndex !== -1) {\n const extractedString = inputString.substring(\n startIndex + prefix.length\n );\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (data: any, explainabilityMap: any, accordianMessageArray: any, userQuestionTime: any, userInputParam: string, isFirstQuestionSent?: boolean) => {\n console.log('userInput: ', userInputParam)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setMessageLoading(false);\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n //@ts-ignore\n setMessages([...messages, { role: 'user', content: userInputParam, time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, id: data?.chatStream?.continueChatResult?.requestId || '', reply: '' }, streamedresponse\n ]);\n } else {\n setMessageLoading(false);\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n\n const assistantObject = getAssistantObj({ data }, accordianMessageArray, explainabilityMap);\n console.log('assistantObject', assistantObject);\n setMessages([\n ...messages,\n { role: 'user', content: userInputParam || '', time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, requestId: data?.chatStream?.continueChatResult?.requestId ?? '' },\n assistantObject,\n ]);\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n }\n\n const handleStream = (event?: any, isFirstQuestionSent?: boolean, userInputParam?: string) => {\n \n const finalInput = userInputParam?.trim() || userInput?.trim() || '';\n \n const processConditions = (conditions: string | string[] | undefined): string[] => {\n if (Array.isArray(conditions)) {\n // If it's an array, filter out any empty strings\n return conditions.filter(c => c.trim() !== '');\n }\n if (typeof conditions === 'string') {\n // If it's a string, split it and filter\n return conditions.split(' OR ').filter(c => c.trim() !== '');\n }\n return [];\n };\n const whenToApplyConditions = processConditions(formDataState?.whenToApply);\n const whenNotToApplyConditions = processConditions(formDataState?.whenNotToApply);\n\n const scopeName = formDataState?.scope?.name \n \n // Change type to allow string array\n let scopeId: string | string[] | null = null; \n\n if (formDataState?.scope?.value) {\n try {\n switch (scopeName) {\n case \"Assistant\":\n // Value is AssistantScopeValue: { assistantName: string, conciergeId: string }\n // We send the conciergeId as the string ID\n scopeId = (formDataState.scope.value as any).conciergeId || null;\n break;\n case \"User\":\n // Value is UserScopeItem[]: [{ email, userId, name }]\n // We send the first user's userId as the string ID\n const userArray = (formDataState.scope.value as any[]);\n if (userArray.length > 0) {\n scopeId = userArray[0].userId || null;\n }\n break;\n case \"Custom\":\n // Value is CustomScopeValue: { scopeName: string, scopeId: string }\n // Per your request, backend expects an array of strings for \"Custom\"\n \n const customScopeId = (formDataState.scope.value as any).scopeId;\n if (customScopeId) {\n // Wrap the single string ID in an array\n scopeId = [customScopeId]; \n } else {\n // Send empty array if no ID is set\n scopeId = []; \n }\n break;\n case \"Global\":\n default:\n // Value is null\n scopeId = null;\n break;\n }\n } catch (e) {\n console.error(\"Error parsing scope_id:\", e, formDataState.scope);\n scopeId = null; // Default to null on error\n }\n }\n\n if (event.key !== 'Enter' || event.shiftKey || (userInputParam?.trim() === '' && userInput?.trim() === '') || isStreaming) {\n return;\n }\n setIsStreaming(true)\n const userQuestionTime = new Date();\n setMessages([\n ...messages.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace(\n 'WaitMessage: ',\n ''\n ),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false },\n ]);\n\n\n const finalInputLower = finalInput.toLowerCase();\n const isDeleteMessage = finalInputLower.startsWith('delete ');\n const isEditMessage = finalInputLower.startsWith('edit '); \n const isMergeMessage = finalInputLower.startsWith('merge ');\n\n let deletionsForThisStream: { question_id: string; variant_id: string }[] = deletionsInReviewState;\n // 'edit' state will just pass through without modification\n let editsForThisStream: any[] = editsInReviewState; \n\n if (isDeleteMessage) {\n console.log(\"Delete message detected, parsing for specific label...\");\n \n const deleteRegex = /^Delete (?:conflict|similar) learning ([A-Z])/i;\n const match = finalInput.match(deleteRegex);\n\n if (match) {\n const sequentialLabel = match[1]; // e.g., \"A\"\n console.log(`Found label \"${sequentialLabel}\" in delete message.`);\n \n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n // Combine both lists to find the learning by its label \"A\", \"B\", etc.\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n \n // Check if this item is *already* in the state to avoid duplicates\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n // Append this new, specific deletion to our persistent state\n const newDeletionsState = [...deletionsInReviewState, newDeletion];\n setDeletionsInReviewState(newDeletionsState); // Persist for next message\n deletionsForThisStream = newDeletionsState; // Use for this stream\n console.log(\"Appended new deletion to in_review state:\", newDeletion);\n } else {\n console.log(\"Item already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n // Only hide card optimistically if NOT in dashboard mode.\n if (!isFromDashboard && !deletedLearningIds.has(learning.id)) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(learning.id);\n return newSet;\n });\n }\n } else {\n console.warn(\"Delete message parsed, but could not find learning for label:\", sequentialLabel);\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n } else { \n console.warn(\"Could not parse label. Checking for generic delete (e.g., 'Delete similar learning').\");\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n \n // Get the learnings as arrays\n const conflictingLearnings = Object.values(conflicting) as any[];\n const similarLearnings = Object.values(similar) as any[];\n\n let learningsToAutoDelete: any[] = [];\n\n if (finalInputLower.includes('similar learnings') && similarLearnings.length > 1) { \n console.log(`Found ${similarLearnings.length} similar learnings. Auto-selecting ALL for deletion.`);\n learningsToAutoDelete = similarLearnings; \n \n // Check for \"Delete conflicting learnings\" (PLURAL)\n } else if (finalInputLower.includes('conflicting learnings') && conflictingLearnings.length > 1) { \n console.log(`Found ${conflictingLearnings.length} conflicting learnings. Auto-selecting ALL for deletion.`);\n learningsToAutoDelete = conflictingLearnings; \n\n // Check for \"Delete similar learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('similar learning') && similarLearnings.length === 1) {\n console.log(\"Found 1 similar learning. Auto-selecting for deletion.\");\n learningsToAutoDelete = [similarLearnings[0]]; \n \n // Check for \"Delete conflicting learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('conflicting learning') && conflictingLearnings.length === 1) {\n console.log(\"Found 1 conflicting learning. Auto-selecting for deletion.\");\n learningsToAutoDelete = [conflictingLearnings[0]]; \n \n } else {\n console.log(\"Generic delete message, but conditions not met (e.g., used 'learnings' for 1 item). No action taken.\");\n }\n\n if (learningsToAutoDelete.length > 0) {\n \n const newDeletions: { question_id: string; variant_id: string }[] = [];\n let itemsAddedCount = 0;\n\n for (const learning of learningsToAutoDelete) {\n if (learning && learning.id && learning.variant_id) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n newDeletions.push(newDeletion);\n itemsAddedCount++;\n }\n } else {\n console.warn(\"Skipping invalid learning object during auto-delete:\", learning);\n }\n }\n\n if (itemsAddedCount > 0) {\n const newDeletionsState = [...deletionsInReviewState, ...newDeletions];\n setDeletionsInReviewState(newDeletionsState); \n deletionsForThisStream = newDeletionsState; \n console.log(`Appended ${itemsAddedCount} new generic deletion(s) to in_review state:`, newDeletions);\n \n if (!isFromDashboard) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newDeletions.forEach(item => newSet.add(item.question_id));\n console.log('Added generic deleted learning IDs to LOCAL UI tracking set');\n return newSet;\n });\n }\n } else {\n console.log(\"Item(s) already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState;\n }\n } else {\n // No auto-delete found, just use the existing state\n deletionsForThisStream = deletionsInReviewState;\n }\n \n \n \n }\n \n } else if (isEditMessage) {\n console.log(\"Edit message detected, parsing and persisting 'in_review.edit' state.\");\n \n const editRegex = /^Edit (?:conflict|similar) learning ([A-Z]) to respond with \"([\\s\\S]*?)\" with WTA: ([\\s\\S]*?) (?:and WNTA: ([\\s\\S]*)|and remove the WNTA conditions)$/i;\n const match = finalInput.match(editRegex);\n\n if (match) {\n const [_, sequentialLabel, howToRespond, whenToApply, whenNotToApplyText] = match;\n \n console.log(`Found label \"${sequentialLabel}\" in edit message.`);\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n // Build the new edit object according to your schema\n const newEdit = {\n \"id\": learning.id, \n \"feedback\": {\n \"variant\": howToRespond.trim(),\n \"when_to_apply\": whenToApply.trim(),\n \"when_not_to_apply\": (whenNotToApplyText || \"\").trim() // Use empty string if \"remove\" was matched\n },\n \"variant_id\": learning.variant_id\n };\n \n console.log(\"Constructed new edit object:\", newEdit);\n\n const otherEdits = editsInReviewState.filter(\n (item: any) => item.id !== learning.id\n );\n \n const newEditsState = [...otherEdits, newEdit];\n \n setEditsInReviewState(newEditsState); // Persist for next message\n editsForThisStream = newEditsState; // Use for this stream\n\n } else {\n console.warn(\"Edit message parsed, but could not find learning for label:\", sequentialLabel);\n editsForThisStream = editsInReviewState; // Use existing state\n }\n } else {\n console.warn(\"Could not parse edit message:\", finalInput);\n editsForThisStream = editsInReviewState; // Use existing state\n }\n } else if (isMergeMessage) {\n console.log(\"Merge message detected, parsing and persisting as 'in_review.delete' state.\");\n \n // Regex to find the label (e.g., \"A\") in \"Merge Similar Learning A...\"\n const mergeRegex = /^Merge (?:Similar|Conflicting) Learning ([A-Z])/i;\n const match = finalInput.match(mergeRegex); \n\n if (match) {\n const sequentialLabel = match[1].toUpperCase(); // e.g., \"A\"\n console.log(`Found label \"${sequentialLabel}\" in merge message.`);\n \n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n // Combine both lists to find the learning by its label \"A\", \"B\", etc.\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n \n // Check if this item is *already* in the state to avoid duplicates\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n // Append this new, specific deletion to our persistent state\n const newDeletionsState = [...deletionsInReviewState, newDeletion];\n setDeletionsInReviewState(newDeletionsState); // Persist for next message\n deletionsForThisStream = newDeletionsState; // Use for this stream\n console.log(\"Appended new MERGE-AS-DELETE to in_review state:\", newDeletion);\n } else {\n console.log(\"Item (from merge) already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n if (!isFromDashboard && !deletedLearningIds.has(learning.id)) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(learning.id);\n console.log('Added MERGED learning ID to LOCAL UI tracking set:');\n return newSet;\n });\n }\n } else {\n console.warn(\"Merge message parsed, but could not find learning for label:\", sequentialLabel);\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n } else { \n // --- START: Added generic fallback logic ---\n console.warn(\"Could not parse label for merge. Checking for generic merge (e.g., 'Merge similar learning').\");\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n \n // Get the learnings as arrays\n const conflictingLearnings = Object.values(conflicting) as any[];\n const similarLearnings = Object.values(similar) as any[];\n\n let learningsToAutoMerge: any[] = []; // Renamed variable for clarity\n\n // Check for \"Merge similar learnings\" (PLURAL)\n if (finalInputLower.includes('similar learnings') && similarLearnings.length > 1) { \n console.log(`Found ${similarLearnings.length} similar learnings. Auto-selecting ALL for MERGE.`);\n learningsToAutoMerge = similarLearnings; \n \n // Check for \"Merge conflicting learnings\" (PLURAL)\n } else if (finalInputLower.includes('conflicting learnings') && conflictingLearnings.length > 1) { \n console.log(`Found ${conflictingLearnings.length} conflicting learnings. Auto-selecting ALL for MERGE.`);\n learningsToAutoMerge = conflictingLearnings; \n\n // Check for \"Merge similar learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('similar learning') && similarLearnings.length === 1) {\n console.log(\"Found 1 similar learning. Auto-selecting for MERGE.\");\n learningsToAutoMerge = [similarLearnings[0]]; \n \n // Check for \"Merge conflicting learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('conflicting learning') && conflictingLearnings.length === 1) {\n console.log(\"Found 1 conflicting learning. Auto-selecting for MERGE.\");\n learningsToAutoMerge = [conflictingLearnings[0]]; \n \n } else {\n console.log(\"Generic merge message, but conditions not met (e.g., used 'learnings' for 1 item). No action taken.\");\n }\n\n if (learningsToAutoMerge.length > 0) {\n \n const newDeletions: { question_id: string; variant_id: string }[] = [];\n let itemsAddedCount = 0;\n\n for (const learning of learningsToAutoMerge) {\n if (learning && learning.id && learning.variant_id) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n newDeletions.push(newDeletion);\n itemsAddedCount++;\n }\n } else {\n console.warn(\"Skipping invalid learning object during auto-merge:\", learning);\n }\n }\n\n if (itemsAddedCount > 0) {\n const newDeletionsState = [...deletionsInReviewState, ...newDeletions];\n setDeletionsInReviewState(newDeletionsState); \n deletionsForThisStream = newDeletionsState; \n console.log(`Appended ${itemsAddedCount} new generic MERGE-AS-DELETE(s) to in_review state:`, newDeletions);\n if (!isFromDashboard) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newDeletions.forEach(item => newSet.add(item.question_id));\n console.log('Added generic MERGED learning IDs to LOCAL UI tracking set');\n return newSet;\n });\n }\n } else {\n console.log(\"Item(s) from generic merge already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState;\n }\n } else {\n // No auto-merge found, just use the existing state\n deletionsForThisStream = deletionsInReviewState;\n }\n // --- END: Added generic fallback logic ---\n }\n }\n \n \n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n setShowSelectedWTA(false);\n\n // Create the new customMetaData object based on ContextualLearningForm state\n const customMetaData:any = {\n userQuery: formDataState?.question ?? '', // Mapped from the 'question' field\n topic: formDataState?.topic.value ?? '',\n variant: formDataState?.howToRespond ?? '', // Mapped from the 'howToRespond' field\n whenToApply: whenToApplyConditions,\n whenNotToApply: whenNotToApplyConditions,\n scope :scopeName,\n scope_id: scopeId,\n categories: formDataState?.categories ?? [],\n validation: validationWtaResponse ?? null,\n conflicting_learnings: learningWtaResponse?.conflicting_learnings ?? \"\",\n similar_learnings: learningWtaResponse?.similar_learnings ?? \"\",\n // NOTE: The 'recommended_' fields are mapped from the current form state.\n // If you have a separate state for AI-only suggestions, you can map it here instead.\n ...(validationRecommendations?.wta && { recommended_whentoapply: validationRecommendations.wta }),\n ...(validationRecommendations?.wnta && { recommended_whennottoapply: validationRecommendations.wnta }),\n in_review : {'delete' : deletionsForThisStream,\n 'edit' : editsForThisStream,\n 'add': addInReview || [],\n },\n \n isFirstQuestion: messages.length === 0,\n };\n \n// Here @ ToDo\n // As requested, log the metadata object every time a message is sent\n console.log('🚀 Sending Custom MetaData to Chat Backend:', customMetaData);\n \n \n \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: userInputParam?.trim() || userInput?.trim() || '',\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData: customMetaData, // Use the newly created metadata object\n customMetaDataDebug: {\n conflicting_learnings_keys: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings) : [],\n similar_learnings_keys: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings) : [],\n conflicting_count: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings).length : 0,\n similar_count: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings).length : 0\n },\n aiModel: '',\n onStreamEvent: (data: any) => handleMessages(data, explainabilityMap, accordianMessageArray, userQuestionTime, finalInput, isFirstQuestionSent),\n onStreamEnd: (data: any) => { setIsStreaming(false); },\n onError: (error: any) => console.error('Stream error:', error)\n };\n\n if (userInput?.trim() !== '' || userInputParam?.trim()) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom()\n const loadingMessage = `Thanks for sharing your thoughts. I'm putting together the most helpful suggestions now, so we can make sure this really fits your needs.`;\n const loadingMessageWords = loadingMessage.split(' ');\n let concatStr = '';\n\n for (let index = 0; index < loadingMessageWords.length; index++) {\n setTimeout(() => {\n concatStr += loadingMessageWords[index] + ' ';\n setInitialLoadingMessage(concatStr.trim());\n }, 25 * index);\n }\n startChatStream(params);\n }\n }\n\n // Handle merge learning trigger - send message to chat when triggered\n const processedMergeTriggers = useRef<Set<string>>(new Set());\n\n useEffect(() => {\n if (mergeLearningTrigger && !isStreaming) {\n // Prevent duplicate processing of the same trigger\n if (processedMergeTriggers.current.has(mergeLearningTrigger)) {\n console.log('[ChatComponent] ⚠️ Duplicate merge trigger ignored:', mergeLearningTrigger);\n return;\n }\n\n console.log('[ChatComponent] 🔴 MERGE TRIGGER RECEIVED:', mergeLearningTrigger);\n processedMergeTriggers.current.add(mergeLearningTrigger);\n\n // Find the learning data to generate the merge message\n // Look in learningWtaResponse for the learning with this ID\n let learningToMerge = null;\n let sequentialLabel = 'A'; // default fallback\n\n if (learningWtaResponse?.similar_learnings) {\n const similarLearnings = Object.values(learningWtaResponse.similar_learnings);\n const learningIndex = similarLearnings.findIndex((learning: any) => learning?.id === mergeLearningTrigger);\n\n if (learningIndex !== -1) {\n learningToMerge = similarLearnings[learningIndex];\n sequentialLabel = String.fromCharCode(65 + learningIndex); // A, B, C, etc.\n }\n }\n\n if (learningToMerge) {\n // Generate the merge message\n const mergeMessage = `Merge Similar Learning ${sequentialLabel} with current learning`;\n console.log('[ChatComponent] ✅ Sending merge message to chat:', mergeMessage);\n\n // Send the merge message using handleStream\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, mergeMessage);\n console.log('[ChatComponent] Message sent successfully');\n } else {\n console.log('[ChatComponent] ❌ Learning not found for ID:', mergeLearningTrigger);\n }\n\n // Clear the trigger after processing\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null);\n console.log('[ChatComponent] Trigger cleared');\n }\n } else if (mergeLearningTrigger && isStreaming) {\n console.log('[ChatComponent] ⚠️ Merge trigger received but streaming in progress:', mergeLearningTrigger);\n }\n }, [mergeLearningTrigger, isStreaming, setMergeLearningTrigger]);\n\n const markdownComponents = useMemo(() => ({\n img: ({ node, ...props }: any) => (\n <img\n {...props}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'contain', // To handle aspect ratio\n }}\n alt={props?.alt || ''}\n className=\"w-full sm:max-w-lg md:max-w-2xl lg:max-w-4xl mx-auto\"\n />\n ), p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'block', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n marginBottom: '1rem', // Equivalent to Tailwind 'mb-4'\n marginTop: '10px',\n }}\n >\n {props?.children}\n </p>\n );\n },\n code: ({ node, ...props }: any) => {\n return (\n <span\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'inline-flex', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n }}\n >\n {props?.children}\n </span>\n );\n },\n ol: ({ node, ...props }: any) => {\n return (\n <ol\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ol>\n );\n },\n ul: ({ node, ...props }: any) => {\n return (\n <ul\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ul>\n );\n },\n wta: ({ node, ...props }: any) => {\n const key = props.key || props['data-key']; // fallback\n const label = props.label || props.children || 'Unknown label';\n\n const addWhenToApplyCondition = (text: string, isToggleOn: boolean) => {\n const cleanText = Array.isArray(text) ? text[0] : text;\n\n if (selectedWTA?.length) {\n setShowSelectedWTA(true)\n } else {\n setShowSelectedWTA(true)\n }\n\n setSelectedWTA((prev: string[]) => {\n if (isToggleOn) {\n // Add only if not already present\n if (!prev.includes(cleanText)) {\n return [...prev, cleanText];\n }\n return prev;\n } else {\n // Remove if present\n return prev.filter((item) => item !== cleanText);\n }\n });\n }\n\n return (\n <ToggleSelector label={label} onToggle={(text: string, isToggleOn: any) => { addWhenToApplyCondition(text, isToggleOn) }} />\n );\n }\n\n }), []);\n\n\n return (\n <div className={defaultStyles.customFont} style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', fontFamily: 'Plus Jakarta Sans, sans-serif', backgroundColor: '#fbfaff', border: '1px solid #d1d5db', overflow: 'hidden' }}>\n <div style={{ width: '100%', height: '100%', backgroundColor: '#fbfaff', maxWidth: '100%', overflow: 'hidden' }}>\n <div ref={chatHeaderRef}>\n <ChatHeader resetChatHistory={resetChatHistory} isStreamEnd={isStreamEnd} />\n </div>\n\n <div style={{ width: '100%', height: availableHeight, maxHeight: availableHeight, overflowY: 'auto', backgroundColor: '#fbfaff' }} ref={scrollContainerRef}>\n <div\n className='welcome-message'\n style={{\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '0.5rem', // Adds breathing space on all sides\n paddingTop: '1rem',\n maxWidth: '70%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n fontWeight: '700',\n textAlign: 'left'\n }}\n >\n <span>I'm here to help fine-tune your learning so it works as accurately as it should.</span>\n </div>\n\n {/* { //@ts-ignore\n <ReactMarkdown components={markdownComponents} rehypePlugins={[rehypeRaw]}>{markdown4}</ReactMarkdown>\n } */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n fontFamily: 'inherit',\n padding: '16px 10px 0px 16px',\n maxWidth: '80%'\n }}\n >\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.3rem' }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', fontWeight: 400, color: '#000' }}>\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n }}\n >\n <span><ReactMarkdown components={{\n p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n margin: 0\n }}\n >\n {props?.children}\n </p>\n );\n }\n }}>{welcomeMessage}</ReactMarkdown></span>\n </div>\n </div>\n </div>\n {messages.length\n ? messages.map((message: any, index) => (\n <div style={{ display: 'flex', padding: '0.5rem 1rem', maxWidth: '100%' }}>\n {message?.role == 'assistant' && (<div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.5rem', marginRight: '1rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>)}\n <div style={{ width: '100%' }}>\n {message.role === 'assistant' && message.orchestratorAndAgentsMessages && message.orchestratorAndAgentsMessages.length > 0 &&\n (<MinimizedThinkingSteps orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} isStreamEnd={isStreamEnd} isCurrentMessage={index === messages.length - 1} ThinkingBulbIconComponent={ThinkingBulbIconComponent} />)}\n {/* <div style={{border:'1px solid red'}}> */}\n\n {//@ts-ignore\n message?.role === 'assistant' ? <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} /> : <span></span>}\n\n <div style={{\n display: 'flex', justifyContent: 'flex-end',\n // backgroundColor: '#8694A10D', padding: \"1rem\"\n }}>\n {(message.role === 'user') ?\n <div style={{ backgroundColor: '#8694A10D', padding: \"0 1rem\", borderRadius: '8px', maxWidth: '80%' }}>\n <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} scrollToBottom={scrollToBottom} />\n </div> : <span></span>}\n </div>\n {/* </div> */}\n </div>\n\n </div>\n )) : showWelcomeMessage && (\n <></>\n )\n }\n\n {messageLoading && (\n <div style={{ display: \"flex\", padding: '16px 16px 0px 16px' }}>\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.2rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n paddingBottom: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n // fontWeight: 500\n }}\n >\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n style={{\n width: '95%',\n height: 'content-fit',\n backgroundColor: '#fbfaff',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'end',\n position: 'relative',\n }}\n >\n {/* Floating Down Button */}\n <div\n style={{\n visibility: isVisible ? 'visible' : 'hidden',\n position: 'absolute',\n top: '-3rem',\n zIndex: 0,\n pointerEvents: 'none', // allows clicks to pass through\n }}\n >\n <button\n onClick={scrollToBottom}\n style={{\n borderRadius: '9999px',\n padding: 0,\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n border: '1px solid #d1d5db',\n pointerEvents: 'auto',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1,\n height: '2.25rem',\n width: '2.25rem',\n margin: '0.3rem'\n }}\n >\n <svg\n fill=\"#000000\"\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n id=\"down\"\n data-name=\"Flat Color\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n id=\"primary\"\n d=\"M19.71,13.29a1,1,0,0,0-1.42,0L13,18.59V3a1,1,0,0,0-2,0V18.59l-5.29-5.3a1,1,0,0,0-1.42,1.42l7,7a1,1,0,0,0,1.42,0l7-7A1,1,0,0,0,19.71,13.29Z\"\n ></path>\n </svg>\n </button>\n </div>\n\n {/* Textarea and Send Button */}\n <div\n style={{\n width: '100%',\n backgroundColor: '#fff',\n display: 'flex',\n alignItems: 'end',\n gap: '0.5rem',\n border: '1px solid #E5E7EB',\n borderRadius: '8px',\n }}\n >\n\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder=\"Tell me more about this learning...\"\n value={userInput || ''}\n onChange={(e) => setUserInput(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n style={{\n flexGrow: 1,\n padding: '0.5rem',\n borderRadius: '0.5rem',\n border: 'none',\n fontSize: '1rem',\n lineHeight: '1.5rem',\n resize: 'none',\n backgroundColor: '#fff',\n color: 'inherit',\n // cursor: 'text',\n minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n overflowY: 'auto',\n fontFamily: 'inherit',\n outline: 'none',\n transition: 'min-height 0.3s ease, background-color 0.3s ease',\n boxSizing: 'border-box',\n }}\n />\n <span style={{ display: 'flex', flexDirection: 'column', justifyContent: 'end', alignItems: 'end' }}> {/* span wrapper is required because Tooltip doesn't work on disabled buttons directly */}\n <button\n onClick={(e) => { handleStream(new KeyboardEvent('keydown', { key: 'Enter' })) }}\n disabled={isInputEmpty} //!areAllrequiredFieldsFilled\n style={{\n padding: '0.5rem 0.75rem',\n borderRadius: '0.375rem',\n border: 'none',\n backgroundColor: 'white',\n color: isInputEmpty ? '#d1d5db' : '#5928ed',\n fontWeight: 'bold',\n fontSize: '1rem',\n cursor: isInputEmpty ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.3s, color 0.3s',\n height: '50px',\n }}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </div>\n <div style={{ width: '95%', display: 'flex', gap: '0.25rem', flexDirection: 'row' }}>\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 style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\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 style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n </div>\n </div >\n )\n}\n\nexport default ChatComponent\n"],"names":["defaultStyles","uuidv4","scrollContainer","messages","_a","_b","setSuggestedWta","parsedSave"],"mappings":"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"}
1
+ {"version":3,"file":"ContextualChatComponent.js","sources":["../../../../src/features/InstantLearning/_components/ContextualChatComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { startChatStream } from '@e-llm-studio/streaming-response';\nimport { v4 as uuidv4 } from 'uuid';\nimport { http } from '../../../api/transport';\nimport ReactMarkdown from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport MinimizedThinkingSteps from './MinimizedThinkingSteps';\nimport NewChatIcon from './_svg/NewChatIcon';\nimport defaultStyles from '../InstantLearning.module.css';\nimport Tooltip from '@mui/material/Tooltip';\nimport JSON5 from 'json5';\nimport AudioWaveform from './AudioWaveform';\nimport './ChatComponent.css'\nimport MessageRendering from './MessageRendering';\nimport { sanitizePythonDictToJSON, sanitizePythonDictToJSON2 } from '../../../utils/instantLearning.utils';\nimport { parseValidationRecommendations, FormattedValidationRecommendation } from '../../../utils/recommendationParser';\nimport { ContextualLearningData } from \"../InstantLearning\";\nimport { publishAgenticFeedbackForVariantIngestion } from '../../../service/InstantLearningService';\n\ninterface IntermediateStep {\n responseFrom: string;\n responseMessage: string;\n \n}\n\n// Define a specific type for parsed suggestions\ninterface ParsedSuggestion {\n conditions_whentoapply?: any[];\n conditions_whennottoapply?: any[];\n _isContextual?: boolean;\n}\n\ninterface Message {\n requestId?: string;\n role: string;\n content: string;\n time: any;\n id?: string;\n reply?: string;\n citations?: Array<any>\n resourceId?: string;\n citationDisplayType?: string;\n orchestratorAndAgentsMessages?: any[];\n intermediateSteps?: IntermediateStep[];\n isFirstQuestionSent?: boolean;\n}\n\ninterface ChatComponentProps {\n chatAssistantLogoUrl: string\n chatAssistantName: string\n authToken?: string\n organizationName: string\n baseUrl: string\n setInstantLearningSuggestions: any\n formDataState: any,\n setFormDataState: any,\n hasUserFilledForm: boolean\n setHasUserFilledForm: React.Dispatch<React.SetStateAction<boolean>>\n baseWebsocketUrl: string\n setIsNewChatClicked: React.Dispatch<React.SetStateAction<boolean>>\n selectedText: string\n ChatIconComponent: React.ReactNode\n ggcAssistantName: string\n ThinkingBulbIconComponent: React.ReactNode\n hasUserWrittenModification: boolean\n setExtractedModification: React.Dispatch<React.SetStateAction<string>> | React.Dispatch<React.SetStateAction<null>>\n setSave: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedTooltip: React.Dispatch<React.SetStateAction<string>>\n setIsSaveLoading: React.Dispatch<React.SetStateAction<boolean>>\n isSaveLoading: boolean\n save: boolean\n instantLearningSuggestions: any\n template?: string\n setShouldTriggerSave: React.Dispatch<React.SetStateAction<boolean>>,\n isFormSaveClicked: boolean,\n setIsFormSavedClicked: React.Dispatch<React.SetStateAction<boolean>>,\n validationWtaResponse?: any,\n setValidationWtaResponse?: any,\n learningWtaResponse?: any,\n setLearningWtaResponse?: any,\n onDeleteLearning?: (label: string) => void,\n deleteLearningTrigger?: string | null,\n setDeleteLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onMergeLearning?: (learningId: string) => void,\n mergeLearningTrigger?: string | null,\n setMergeLearningTrigger?: React.Dispatch<React.SetStateAction<string | null>>,\n onResetLearningData?: () => void,\n setEditConflictingLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n setEditSimilarLearningTrigger: React.Dispatch<React.SetStateAction<string | null>>,\n sendMessageInChat: string\n setSendMessageInChat: React.Dispatch<React.SetStateAction<string>>\n setIsMergeLoading: React.Dispatch<React.SetStateAction<boolean>>\n setExtractedHowToRespond: React.Dispatch<React.SetStateAction<string>>;\n setExtractedTopic: React.Dispatch<React.SetStateAction<string>>;\n setExtractedCategories: React.Dispatch<React.SetStateAction<string[]>>;\n setValidationRecommendations: (recommendations: FormattedValidationRecommendation | null) => void; \n validationRecommendations: FormattedValidationRecommendation | null; \n addInReview? : any[];\n editInReview? : any[];\n deleteInReview? : { question_id: string; variant_id: string }[];\n assistantId?: string | null;\n isFromDashboard?: boolean;\n\n}\n \n\n\ninterface Config {\n GGCLLMASSISTANTNAME: string;\n ORGANIZATION_NAME: string;\n API_KEY?: string;\n}\n\ninterface LLMRequestParams {\n config: Config;\n user_prompt: string;\n check_similarity: boolean;\n system_prompt: string;\n primary_type: string;\n fallback_type: string;\n primary_model: string;\n fallback_model: string;\n region: string;\n temperature: number;\n max_tokens: number;\n primary_retries: number;\n}\n\nconst SendButton = () => {\n return (\n <svg\n width=\"20px\"\n height=\"20px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.91158 12H7.45579H4L2.02268 4.13539C2.0111 4.0893 2.00193 4.04246 2.00046 3.99497C1.97811 3.27397 2.77209 2.77366 3.46029 3.10388L22 12L3.46029 20.8961C2.77983 21.2226 1.99597 20.7372 2.00002 20.0293C2.00038 19.9658 2.01455 19.9032 2.03296 19.8425L3.5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst ChatHeader = ({ resetChatHistory, isStreamEnd }: { resetChatHistory: () => void; isStreamEnd: boolean }) => {\n return (\n <div\n className={defaultStyles.customFont}\n style={{\n width: '100%',\n padding: '0.75rem 0rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#fff',\n borderBottom: '1px solid #e5e7eb',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)'\n }}\n >\n <span\n style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: '#1f2937',\n flex: 1,\n marginLeft: '0.5rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n <span style={{ color: '#5928ED' }}>InstantLearning.AI</span> Contextual Chat\n {/* Tell me more about this learning */}\n </span>\n\n <Tooltip\n title={'New chat'}\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 <div\n onClick={() => {\n console.log(NewChatIcon, 'hello')\n if (isStreamEnd) resetChatHistory(); // Prevent click if disabled\n }}\n style={{\n height: '1.8rem',\n width: '1.8rem',\n marginLeft: '1rem',\n marginRight: '0.5rem',\n cursor: !isStreamEnd ? 'not-allowed' : 'pointer',\n backgroundColor: 'transparent',\n transition: 'transform 0.2s ease-in-out, opacity 0.2s',\n opacity: !isStreamEnd ? 0.4 : 0.8,\n pointerEvents: !isStreamEnd ? 'none' : 'auto', // prevents any interaction\n }}\n onMouseOver={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1.1)';\n e.currentTarget.style.opacity = '1';\n }\n }}\n onMouseOut={(e) => {\n if (isStreamEnd) {\n // e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n >\n <NewChatIcon />\n </div>\n </Tooltip>\n </div>\n );\n};\n\nconst constructUserQuery = (formDataState: any) => {\n return `Hey generate wta and wnta based on: \\n The issue user is facing is: ${formDataState.issue_with_response}. The user feedback is: Replace ${formDataState.original} with ${formDataState.modification}${formDataState.tooltip}`\n}\n\n\ntype WhenToApplyCondition = {\n when_to_apply: string;\n};\n\ntype InstantLearningSuggestion = {\n conditions_whentoapply: WhenToApplyCondition[];\n conditions_whennottoapply: WhenToApplyCondition[];\n};\n\nconst ToggleSelector = ({ label, onToggle }: any) => {\n const [selected, setSelected] = useState(false);\n const spanRef = useRef<HTMLSpanElement>(null);\n\n const handleChange = () => {\n const newState = !selected;\n setSelected(newState);\n onToggle(label, newState);\n };\n\n useEffect(() => {\n const el = spanRef.current;\n if (el && selected) {\n el.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n el.style.transform = 'scale(1)';\n el.style.backgroundColor = '#E8F5E9'; // selected bg\n el.style.color = '#2E7D32'; // selected text\n }\n }, [selected]);\n\n return (\n <span ref={spanRef} onClick={handleChange}\n style={{\n cursor: 'pointer',\n backgroundColor: selected ? '#E8F5E9' : '#fbfaff',\n color: selected ? '#2E7D32' : '#000000de',\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.2)', // default shadow\n transform: 'scale(1)', // make sure it resets after hover\n }}\n\n onMouseEnter={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(30, 136, 229, 0.3)';\n e.currentTarget.style.transform = 'scale(1.02)';\n e.currentTarget.style.backgroundColor = '#f0f7ff'; // light blue hover\n e.currentTarget.style.color = '#1E88E5'; // primary blue text\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.2)';\n e.currentTarget.style.transform = 'scale(1)';\n e.currentTarget.style.backgroundColor = '#fbfaff';\n e.currentTarget.style.color = '#000000de';\n }\n }}>\n <span\n style={{\n fontWeight: 'bold',\n fontSize: '16px',\n // color: selected ? '#2E7D32' : '#888',\n transition: 'all 0.3s ease',\n transform: selected ? 'scale(1.2)' : 'scale(1)',\n opacity: selected ? 1 : 0.9,\n paddingLeft: '0.25rem',\n paddingRight: '0.25rem',\n }}\n >\n {selected ? '✓' : '+'}\n </span>\n <span>{label}</span>\n </span>\n );\n};\n\nfunction SuggestionChips({ onSelect, original, modification, tooltip }: any) {\n const themeColor = '#5928ed';\n const hoverBg = '#eae4fd';\n const suggestions = [`I want to modify \"${original}\" ${modification !== '' ? `to ${modification}` : ''}`, `I want to add a tooltip ${tooltip !== '' ? `which says ${tooltip}` : ''} to \"${original}\"`]; //\"I want to modify this and add a tooltip\"\n\n return (\n <div style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n marginTop: '8px',\n // paddingLeft: '1rem',\n }}>\n {suggestions.map((text, index) => (\n <div\n key={index}\n onClick={() => onSelect(text)}\n style={{\n padding: '6px 12px',\n borderRadius: '16px',\n backgroundColor: '#f9f9ff',\n border: `1px solid ${themeColor}`,\n cursor: 'pointer',\n fontSize: '14px',\n color: themeColor,\n fontWeight: 500,\n transition: 'background-color 0.2s ease, color 0.2s ease',\n userSelect: 'none'\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hoverBg;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9f9ff';\n }}\n >\n {text}\n </div>\n ))}\n </div>\n );\n}\n\nconst SuggestionArea = ({ formDataState, handleStream }: any) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <span\n style={{\n // paddingLeft: '1rem',\n fontSize: '1rem',\n color: '#1f2937',\n lineHeight: '1.75rem',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n display: 'inline'\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexWrap: 'wrap' }}>\n <span style={{ fontSize: '1rem' }}>\n You can also try some options from the\n </span>\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n aria-expanded={isExpanded}\n style={{\n backgroundColor: '#f3f0ff',\n color: '#5928ed',\n padding: '4px 12px',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '0.9rem',\n fontWeight: 500,\n transition: 'all 0.2s ease-in-out',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontFamily: 'Plus Jakarta Sans, sans-serif',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#ebe4ff')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#f3f0ff')}\n >\n suggestions\n <span style={{ fontSize: '0.7rem' }}>{isExpanded ? <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 10L7.5 3L14 10\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg> : <svg width=\"12px\" height=\"12px\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5L7.5 12L1 5\" stroke=\"#5928ed\" stroke-linecap=\"square\" />\n </svg>}</span>\n </button>\n </div>\n\n {isExpanded && (\n <div\n style={{\n // marginTop: '0.75rem',\n // padding: '0.75rem',\n backgroundColor: '#f9fafb',\n // border: '1px solid #e5e7eb',\n borderRadius: '0.75rem',\n display: 'flex',\n justifyContent: 'start',\n // boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n animation: 'fadeIn 0.3s ease-in-out',\n transition: 'opacity 0.4s ease',\n opacity: 1,\n }}\n >\n\n <SuggestionChips\n onSelect={(text: string) => {\n handleStream(\n new KeyboardEvent('keydown', { key: 'Enter' }),\n false,\n `${text}`\n );\n }}\n original={formDataState?.original}\n tooltip={formDataState?.tooltip}\n modification={formDataState?.modification}\n />\n </div>\n )}\n </span>\n );\n};\n\n\nconst ChatComponent: React.FC<ChatComponentProps> = ({ chatAssistantLogoUrl, chatAssistantName, authToken, organizationName, baseUrl, setInstantLearningSuggestions, formDataState, setFormDataState, hasUserFilledForm, setHasUserFilledForm, baseWebsocketUrl, setIsNewChatClicked, selectedText, ChatIconComponent, ggcAssistantName, ThinkingBulbIconComponent, hasUserWrittenModification, setExtractedModification, setSave, setExtractedTooltip, setIsSaveLoading, isSaveLoading, save, instantLearningSuggestions, template = '', setShouldTriggerSave, validationWtaResponse, setValidationWtaResponse, learningWtaResponse, setLearningWtaResponse, isFormSaveClicked,\n setIsFormSavedClicked, onDeleteLearning, deleteLearningTrigger, setDeleteLearningTrigger, onMergeLearning, mergeLearningTrigger, setMergeLearningTrigger, onResetLearningData, setEditConflictingLearningTrigger, setEditSimilarLearningTrigger\n\n , sendMessageInChat,\n setSendMessageInChat,\n setIsMergeLoading,\n //contextual props \n setExtractedHowToRespond,\n setExtractedTopic,\n setExtractedCategories,\n setValidationRecommendations, \n validationRecommendations, \n addInReview,\n editInReview,\n deleteInReview,\n assistantId,\n isFromDashboard = false,\n\n}) => {\n const chatAssistant = chatAssistantName;\n const guestSessionIdRef = useRef(`${chatAssistant}-${organizationName}-${uuidv4()}`);\n const chatPreviewIdRef = useRef(`${uuidv4()}`);\n const url = baseUrl\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [selectedWTA, setSelectedWTA] = useState<string[]>([]);\n const [showSelectedWTA, setShowSelectedWTA] = useState(false);\n // const isFirstQuestionSent = useRef<boolean>(false)\n const [userInput, setUserInput] = useState<null | string>('');\n const [welcomeMessage, setWelcomeMessage] = useState('');\n const [messages, setMessages] = useState<any[]>([]);\n const [messageLoading, setMessageLoading] = useState(false);\n const [waitMessageLoading, setWaitMessageLoading] = useState(false);\n const [isStreamEnd, setIsStreamEnd] = useState(true);\n const [showWelcomeMessage, setShowWelcomeMessage] = useState(true);\n const [chatInitialMessage, setChatInitialMessage] = useState('');\n const [initialLoadingMessage, setInitialLoadingMessage] = useState('');\n const [isStreaming, setIsStreaming] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const [suggestedWta, setSuggestedWta] = useState<string[]>([]);\n const [deletedLearningIds, setDeletedLearningIds] = useState<Set<string>>(new Set());\n const [mergedLearningIds, setMergedLearningIds] = useState<Set<string>>(new Set());\n const lastProcessedResponseRef = useRef<string>('');\n const lastProcessedMergeResponseRef = useRef<string>('');\n const processedDeleteToolsRef = useRef<Set<string>>(new Set());\n const isInputEmpty = useMemo(() => { return userInput?.trim() === '' || isStreaming }, [userInput, isStreaming]);\n const [deletionsInReviewState, setDeletionsInReviewState] = useState<{ question_id: string; variant_id: string }[]>(deleteInReview || []);\n const [editsInReviewState, setEditsInReviewState] = useState<any[]>(editInReview || []);\n const chatHeaderRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState('100%');\n const learningWtaResponseRef = useRef(learningWtaResponse);\n const formDataStateRef = useRef(formDataState);\n \n useEffect(() => {\n learningWtaResponseRef.current = learningWtaResponse;\n }, [learningWtaResponse]);\n \n useEffect(() => {\n formDataStateRef.current = formDataState;\n }, [formDataState]);\n\n const areAllrequiredFieldsFilled = useMemo(() => {\n return formDataState?.original?.trim() !== \"\" &&\n (!formDataState?.isTooltipEnabled || formDataState?.tooltip?.trim() !== \"\") &&\n (!formDataState?.isModificationEnabled ||\n formDataState?.modification?.trim() !== \"\");\n }, [formDataState])\n\n // const makeLLMRequest = async ({\n // config,\n // user_prompt,\n // check_similarity,\n // system_prompt,\n // primary_type,\n // fallback_type,\n // primary_model,\n // fallback_model,\n // region,\n // temperature,\n // max_tokens,\n // primary_retries\n // }: LLMRequestParams): Promise<any> => {\n // const payload = {\n // name: ggcAssistantName,\n // organizationName: organizationName,\n // prompt: user_prompt,\n // overrideAgentConfig: {\n // GGCLLMAgent: {\n // properties: {\n // check_similarity: { value: check_similarity }\n // },\n // tools: {\n // LLMConfigurationTool: {\n // properties: {\n // context: { value: system_prompt },\n // llm_provider: { value: primary_type },\n // fallback1_provider: { value: fallback_type },\n // add_citations_in_response: { value: false }\n // },\n // integrations: {\n // VertexAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_output_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // AnthropicIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // region: { value: region },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model },\n // fallback1_region: { value: region }\n // }\n // },\n // OpenAIIntegration: {\n // properties: {\n // llm_model: { value: primary_model },\n // temperature: { value: temperature },\n // max_tokens: { value: max_tokens },\n // retries: { value: primary_retries },\n // chat_history: { value: [] },\n // fallback1_model_name: { value: fallback_model }\n // }\n // }\n // }\n // }\n // }\n // }\n // }\n // };\n\n // try {\n // const response = await http.post(`${baseUrl}/api/chat/chatResponse`, payload, {\n // headers: {\n // 'Content-Type': 'application/json',\n // ...(config.API_KEY && { Authorization: `Bearer ${config.API_KEY}` })\n // }\n // });\n\n // const message = response?.data?.result?.Answer + '\\n Tell me more about this learning.';\n // const messageSplit = message.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < messageSplit.length; index++) {\n // setTimeout(() => {\n // concatStr += messageSplit[index] + ' ';\n // setChatInitialMessage(concatStr.trim());\n // }, 25 * index);\n // }\n\n // // setChatInitialMessage(concatStr)\n // return response.data;\n // } catch (error: any) {\n // console.error('Error making LLM request:', error.response?.data || error.message);\n // }\n // };\n\n // useEffect(() => {\n // // const staticWelcomeMessage = `👋 Welcome! I'm here to help suggest when to apply and when not to apply for your learning. Looks like you want to teach some learning about \"${selectedText}\"... \\n\\nCould you share in which scenarios you would like this learning to be applied?`\n // const staticWelcomeMessage = `Please tell me how I should correct \"${selectedText}\"? `\n\n // const welcomeMessageWords = staticWelcomeMessage.split(' ');\n // let concatStr = '';\n\n // for (let index = 0; index < welcomeMessageWords.length; index++) {\n // setTimeout(() => {\n // concatStr += welcomeMessageWords[index] + ' ';\n // setWelcomeMessage(concatStr.trim());\n // }, 45 * index);\n // }\n // }, [])\n\n useEffect(() => {\n // if from dashboard ask user to enter questioin\n if (isFromDashboard){\n let staticWelcomeMessage = `Please enter the question you want to provide the learning for. `\n setWelcomeMessage(staticWelcomeMessage)\n }\n else {\n let staticWelcomeMessage = `Please tell me how I should respond to \"${selectedText}\"? `\n setWelcomeMessage(staticWelcomeMessage)\n } \n\n }, [formDataState])\n\n // const promptToTest = `You're a warm, conversational assistant helping someone explore when to apply and when not to apply a learning.\n\n // The user has just shared something they're thinking about—this could be a word, a phrase, or a full sentence:\n // \"{original}\"\n\n // At this stage, we don't know what this learning means to them or how they're thinking about using it.\n\n // Write one friendly message using the CARE framework, with a tone that blends curiosity, empathy, and acknowledgment:\n\n // Curiosity: Gently ask what prompted them to explore this learning—what made it stand out?\n\n // Acknowledge: Let them know it's thoughtful of them to reflect before jumping into action.\n\n // Respond with Empathy: Reassure them it's completely natural to pause and check if something fits before applying it.\n\n // Keep the tone warm, conversational, and supportive.\n // Don't suggest when to apply it yet—just invite them to share more.`\n\n\n // useEffect(() => {\n // if (!messages?.length) {\n // makeLLMRequest({\n // config: {\n // GGCLLMASSISTANTNAME: ggcAssistantName,\n // ORGANIZATION_NAME: organizationName\n // },\n // user_prompt: `Original Word: ${selectedText}`,\n // check_similarity: false,\n // system_prompt: promptToTest,\n // primary_type: 'Google VertexAI',\n // fallback_type: 'Azure OpenAI',\n // primary_model: 'gemini-2.0-flash',\n // fallback_model: 'gpt-4o',\n // region: 'us-central1',\n // temperature: 0,\n // max_tokens: 8192,\n // primary_retries: 3\n // })\n // }\n // }, [messages])\n\n useEffect(() => {\n const scrollContainer = scrollContainerRef.current;\n\n const handleScroll = () => {\n const scrollContainer = scrollContainerRef.current;\n if (!scrollContainer) return;\n\n const scrollTop = scrollContainer.scrollTop; // Distance scrolled\n const scrollHeight = scrollContainer.scrollHeight; // Total height of content\n const clientHeight = scrollContainer.clientHeight; // Visible height\n\n // Calculate if the user is at the bottom\n const isAtBottom = scrollHeight - (scrollTop + clientHeight) <= 35; // 0px threshold\n setIsVisible(!isAtBottom);\n };\n\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', handleScroll);\n }\n };\n }, [isVisible, isStreamEnd, messages]);\n\n // useEffect(() => {\n // if (hasUserFilledForm) {\n // isFirstQuestionSent.current = true;\n // // const constructedUserQuery = constructUserQuery(formDataState);\n // // // setUserInput(constructUserQuery(formDataState))\n // // setTimeout(() => {\n // // const keyBoardEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n // // handleStream(keyBoardEvent, true, constructedUserQuery)\n // // }, 200)\n // }\n // }, [hasUserFilledForm])\n\n\n // const useParsedHeaderSuggestions = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // // Regex to extract code block that starts with ```json and ends with ```\n // const codeBlockRegex = /```json\\s*([\\s\\S]*?)\\s*```/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(codeBlockRegex);\n // if (match) {\n // try {\n // const parsed = JSON.parse(match[1]); // match[1] contains the inner JSON block\n // results.push(parsed);\n // } catch (e) {\n // console.error(\"Failed to parse JSON inside code block:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSuggestions = (messages: any[],onRecommendationFound: (recommendations: FormattedValidationRecommendation | null) => void, onDeleteToolCall?: (deleteToolData: any) => void, onMergeToolCall?: (mergeToolData: any) => void,\n onEditToolCall?: (editToolData: any) => void) => {\n return useMemo(() => {\n const results: object[] = [];\n\n // const pattern = /\"conditions_whentoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*\"conditions_whennottoapply\"\\s*:\\s*\\[\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*\"when_not_to_apply\"\\s*:\\s*\"[^\"]*\"\\s*,\\s*\"confidence_score\"\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]/;\n // const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\1).)*\\1\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\]\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\4).)*\\4\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n \n //suggestion tool\n const pattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n\n const contextualPattern = /['\"]conditions_whentoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\2).)*\\2\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\3).)*\\3\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])\\s*,\\s*['\"]conditions_whennottoapply['\"]\\s*:\\s*(\\[\\s*\\]|\\[\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\5).)*\\5\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\}(?:\\s*,\\s*\\{\\s*['\"]when_not_to_apply['\"]\\s*:\\s*(['\"])(?:\\\\.|(?!\\6).)*\\6\\s*,\\s*['\"]confidence_score['\"]\\s*:\\s*\\d+\\s*\\})*\\s*\\])/;\n // const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[(\\s*\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?)*\\s*\\]/i;\n \n // validation tool \n const validationPattern = /['\"]is_valid['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflictingConditions['\"]\\s*:\\s*\\[\\s*(?:\\{[\\s\\S]*?['\"]conflictType['\"]\\s*:\\s*['\"][^'\"]+['\"][\\s\\S]*?\\}\\s*,?\\s*)*\\]\\s*,\\s*['\"]save['\"]\\s*:\\s*(true|false|True|False)/;\n\n // retrieval tool regex\nconst dbValidationPattern = /['\"]is_valid_db['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]conflicting_learnings['\"]\\s*:\\s*([\\s\\S]*?)\\s*,\\s*['\"]similar_learnings['\"]\\s*:\\s*([\\s\\S]*)(?:\\s*,\\s*[\"']save[\"']\\s*:\\s*(true|false|True|False))?(?=\\s*})/;\n\n // Delete tool pattern to match delete tool JSON structure\n const deleteToolPattern = /['\"]delete_current_learning['\"]\\s*:\\s*(true|false|True|False)\\s*,\\s*['\"]deleted_similar_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]\\s*,\\s*['\"]deleted_conflicting_learning_ids['\"]\\s*:\\s*\\[[\\s\\S]*?\\]/;\n\n // Robust merge tool pattern that handles Python dictionary format with single quotes and True\n const mergeToolPattern = /{\\s*['\"]merge_learnings['\"]\\s*:\\s*(?:True|true)[\\s\\S]+?}/;\n\n\n //Edit tool pattern \n // REGEX FOR MATCHING: (NOTE: DO INCLUDE A string check for edit_actions)\n\n // const regex = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n // const match = text.match(regex);\n // let jsonLike = match[1];\n // const jsonStr = jsonLike.replace(/'/g, '\"');\n\n const editToolPattern = /({[\\s\\S]*}|\\[[\\s\\S]*\\])/;\n const jsonFinderPattern = /({[\\s\\S]*})/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n console.log('🔍 RESPONSE DATA:', String(responseData));\n \n // Check if response contains merge_learnings\n if (String(responseData).includes('merge_learnings')) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n \n // Check if response contains merge_learnings\n if (String(responseData).includes(\"'merge_learnings'\")) {\n console.log('🔍 FOUND merge_learnings in response!');\n console.log('🔍 Full response:', String(responseData));\n }\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n const contextualMatch = responseData.match(contextualPattern);\n if (contextualMatch) {\n try {\n let cleanedContextual = sanitizePythonDictToJSON(contextualMatch[0] || '');\n const contextualObj = JSON5.parse(`{${cleanedContextual}}`);\n \n console.log('Contextual conditions detected:', contextualObj);\n \n // Store in results with a flag to differentiate\n results.push({\n ...contextualObj,\n _isContextual: true // Flag to identify contextual data\n });\n } catch (e) {\n console.error(\"Failed to parse contextual JSON:\", e);\n }\n }\n\n const validationMatch = responseData.match(validationPattern);\n console.log('validationObj before cond ', validationMatch);\n if (validationMatch) {\n try {\n //will get stored in validation match only if validation fails.\n\n let cleanedValidation = sanitizePythonDictToJSON(responseData || '')\n let parsedData = JSON5.parse(cleanedValidation);\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid' in parsedData &&\n 'conflictingConditions' in parsedData) {\n console.log('Found validation data in response:', parsedData);\n setValidationWtaResponse(parsedData);\n console.log('dbVal after set in chat', validationWtaResponse);\n }\n } catch (e) {\n console.error(\"Failed to parse validation JSON:\", e);\n }\n }\n // Try to parse the entire responseData as JSON to handle nested objects properly\n try {\n let cleanedResponse = sanitizePythonDictToJSON(responseData || '')\n\n // Try to parse as a complete JSON object first\n let parsedData = JSON5.parse(cleanedResponse);\n\n // Check if this contains our expected validation structure\n if (parsedData && typeof parsedData === 'object' &&\n 'is_valid_db' in parsedData &&\n 'conflicting_learnings' in parsedData &&\n 'similar_learnings' in parsedData) {\n\n console.log('Found validation data in response:', parsedData);\n setLearningWtaResponse(parsedData);\n console.log('dbVal after set in chat', learningWtaResponse);\n } else {\n // Fallback to regex if JSON parsing doesn't find the expected structure\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n let cleanedDBValidation = sanitizePythonDictToJSON2(dbValidationMatch[0] || '')\n const dbValidationObj = JSON5.parse(`{${cleanedDBValidation}}`);\n setLearningWtaResponse(dbValidationObj);\n console.log('dbVal after set in chat (regex fallback)', learningWtaResponse);\n }\n }\n } catch (e) {\n // If JSON parsing fails, fallback to the original regex approach\n console.log('JSON parsing failed, trying regex fallback for validation data');\n const dbValidationMatch = responseData.match(dbValidationPattern);\n if (dbValidationMatch) {\n try {\n let cleanedDBValidation = sanitizePythonDictToJSON2(dbValidationMatch[0] || '')\n const dbValidationObj = JSON5.parse(`{${cleanedDBValidation}}`);\n setLearningWtaResponse(dbValidationObj);\n console.log('dbVal after set in chat (regex fallback)', learningWtaResponse);\n } catch (regexError) {\n console.error(\"Failed to parse validation JSON with regex fallback:\", regexError);\n }\n }\n }\n const deleteToolMatch = responseData.match(deleteToolPattern);\n if (deleteToolMatch) {\n try {\n let cleanedDeleteTool = sanitizePythonDictToJSON(deleteToolMatch[0] || '')\n\n const deleteToolObj = JSON5.parse(`{${cleanedDeleteTool}}`);\n\n console.log('Delete tool detected:', deleteToolObj);\n\n // Call the callback with the delete tool data (deduplication happens in the callback)\n if (onDeleteToolCall) {\n onDeleteToolCall(deleteToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse delete tool JSON:\", e);\n }\n }\n\n\n console.log('🔍 Testing merge tool regex on response data...');\n \n const mergeToolMatch = responseData.match(mergeToolPattern);\n console.log('🔍 Merge tool regex match result:', mergeToolMatch);\n \n if (mergeToolMatch) {\n console.log('🔍 MERGE TOOL REGEX MATCHED!');\n try {\n // get python-like dictionary string.\n const pythonLikeString = mergeToolMatch[0];\n\n // sanitize the string into valid JSON format.\n const jsonString = sanitizePythonDictToJSON(pythonLikeString);\n\n // parse the sanitized JSON string into an object.\n const mergeToolObj = JSON5.parse(jsonString);\n\n console.log('✅ Correctly parsed merge tool object:', mergeToolObj);\n\n //pass the complete, correctly parsed object to the callback.\n // The arrays inside mergeToolObj are now perfect and require no splitting.\n if (onMergeToolCall) {\n onMergeToolCall(mergeToolObj);\n }\n } catch (e) {\n console.error(\"Failed to parse merge tool JSON:\", e);\n }\n }\n //edit tool \n const editToolMatch = responseData.match(editToolPattern);\n if (editToolMatch && responseData.includes('edit_actions')) {\n try {\n console.log('Edit tool match found:', editToolMatch[0]);\n const jsonString = sanitizePythonDictToJSON(editToolMatch[0]);\n const editToolObj = JSON5.parse(jsonString);\n console.log('Edit tool detected and parsed successfully:', editToolObj);\n\n // Existing logic for form triggers (keep for non-dashboard or hybrid flows)\n if (editToolObj.conflicting_learnings) {\n setEditConflictingLearningTrigger(editToolObj.conflicting_learnings);\n }\n if (editToolObj.similar_learnings) {\n setEditSimilarLearningTrigger(editToolObj.similar_learnings);\n }\n \n // Call the new callback\n if (onEditToolCall) {\n onEditToolCall(editToolObj);\n }\n \n } catch (e) {\n console.error(\"Failed to parse edit tool JSON:\", e);\n }\n }\n const jsonMatch = responseData.match(jsonFinderPattern);\n if (jsonMatch) {\n try {\n const jsonString = sanitizePythonDictToJSON(jsonMatch[0]);\n const parsedObject = JSON5.parse(jsonString);\n\n // Check if it's the recommendation object\n if (parsedObject.recommended_whentoapply || parsedObject.recommended_whennottoapply) {\n console.log(\"Found recommendation data:\", parsedObject);\n // Use the parser function\n const recommendations = parseValidationRecommendations(parsedObject);\n console.log(\"Parsed recommendations:\", recommendations);\n onRecommendationFound(recommendations); // <-- Call the callback\n }\n } catch (e) {\n // It's okay if parsing fails, might not be the recommendation JSON\n // console.error(\"Attempted to parse recommendations, but failed (might be other JSON):\", e);\n }\n }\n }\n\n return results;\n }, [messages, onDeleteToolCall]);\n};\n\n //edit tool for dashboard behavior.\n\n const processedEditToolsRef = useRef<Set<string>>(new Set());\n\n // Callback function to handle edit tool calls\n const handleEditToolCallback = useCallback(async (editToolData: any) => {\n // Create a unique identifier for this edit operation to prevent duplicates\n const editOperationId = JSON.stringify({\n conflicting: Object.keys(editToolData.conflicting_learnings || {}).sort(),\n similar: Object.keys(editToolData.similar_learnings || {}).sort(),\n variant: Object.values(editToolData.similar_learnings || {})[0] // Simple check on content\n });\n\n if (processedEditToolsRef.current.has(editOperationId)) {\n return;\n }\n processedEditToolsRef.current.add(editOperationId);\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n console.log(\"[Dashboard Mode] Processing Edit Tool:\", editToolData);\n\n const processEdits = async (learningsDict: any) => {\n if (!learningsDict) return;\n\n for (const [id, data] of Object.entries(learningsDict)) {\n const editData = data as any;\n \n // 1. Helper to find the original learning object to get variant_id\n const getLearningDetails = (searchId: string) => {\n const conflicting = learningWtaResponseRef.current?.conflicting_learnings || {};\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n \n // Search by ID in values (since keys might be \"A\", \"B\", etc.)\n let found = Object.values(conflicting).find((l: any) => l.id === searchId);\n if (found) return found;\n \n found = Object.values(similar).find((l: any) => l.id === searchId);\n return found;\n };\n\n const itemDetails: any = getLearningDetails(id);\n\n if (!itemDetails) {\n console.warn(`[Dashboard Mode] Could not find original learning for edit ID: ${id}`);\n continue;\n }\n\n // 2. Prepare Payload\n const variantId = itemDetails.variant_id; // \"id\" in payload\n const parentId = itemDetails.id; // \"parentId\" in payload\n\n // Join arrays to strings for the API\n const wta = Array.isArray(editData.conditions_whentoapply) \n ? editData.conditions_whentoapply.join(' OR ') \n : (editData.conditions_whentoapply || \"\");\n \n const wnta = Array.isArray(editData.conditions_whennottoapply) \n ? editData.conditions_whennottoapply.join(' OR ') \n : (editData.conditions_whennottoapply || \"\");\n \n const currentFormScope = formDataStateRef.current?.scope;\n \n // Default to Global if user hasn't selected anything, otherwise use form data\n let scopePayload = { name: \"Global\", value: null as any };\n\n if (currentFormScope && currentFormScope.name) {\n if (currentFormScope.name === 'Global') {\n scopePayload = { name: \"Global\", value: null };\n } else {\n // For User, Custom, and Assistant, the value in formDataState\n // matches the required API structure (Array for User, Object for others)\n scopePayload = {\n name: currentFormScope.name,\n value: currentFormScope.value\n };\n }\n }\n\n const editPayload = {\n status: \"approved\",\n metadata: {\n userName: \"M Kathyayani\",\n userEmailId: \"madumbu.kathyayani@techolution.com\",\n llm: \"claude-3.5-sonnet\",\n isVariantFlow: true,\n isUpdateAction: true, // Edit Action\n isAgentsFeedback: true,\n variant: {\n id: variantId, // The variant_id\n variant: editData.variant,\n conditions_whentoapply: wta,\n conditions_whennottoapply: wnta,\n scope: scopePayload,\n topic: {\n id: null,\n value: itemDetails.feedback?.topic?.value,\n },\n categories: [],\n originalQuestion: \"\",\n parameterizedQuestion: itemDetails.feedback.question,\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n created_by: null,\n updated_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }),\n updated_by: \"madumbu.kathyayani@techolution.com\",\n instantLearningType: \"iL\",\n appliedTagsIL: [],\n tagMappingInfoIL: {}, \n }\n }\n };\n \n \n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: editPayload\n });\n\n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully Edited ID: ${id}`);\n \n // 3. Update UI only on success (Update local state to reflect changes)\n setLearningWtaResponse((prev: any) => {\n if (!prev) return prev;\n const newResp = { ...prev };\n \n const updateList = (listName: string) => {\n const list = newResp[listName];\n if (!list) return;\n // Iterate keys (A, B, etc.) to find the item with matching ID\n Object.keys(list).forEach(key => {\n if (list[key].id === id) {\n list[key] = {\n ...list[key],\n feedback: {\n ...list[key].feedback,\n variant: editData.variant,\n when_to_apply: editData.conditions_whentoapply, // Keep array for UI\n when_not_to_apply: editData.conditions_whennottoapply // Keep array for UI\n }\n };\n }\n });\n };\n \n updateList('conflicting_learnings');\n updateList('similar_learnings');\n return newResp;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to edit ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling edit API for ID: ${id}`, error);\n }\n }\n };\n\n await processEdits(editToolData.conflicting_learnings);\n await processEdits(editToolData.similar_learnings);\n }\n }, [isFromDashboard, baseUrl, organizationName, setLearningWtaResponse]);\n\n\n// Callback function to handle delete tool calls\n const handleDeleteToolCallback = useCallback(async (deleteToolData: any) => {\n // Create a unique identifier for this delete operation\n const deleteOperationId = JSON.stringify({\n deleted_similar_learning_ids: deleteToolData.deleted_similar_learning_ids || [],\n deleted_conflicting_learning_ids: deleteToolData.deleted_conflicting_learning_ids || [],\n delete_current_learning: deleteToolData.delete_current_learning || false\n });\n\n // Check if we've already processed this exact delete operation\n if (processedDeleteToolsRef.current.has(deleteOperationId)) {\n return; \n }\n processedDeleteToolsRef.current.add(deleteOperationId);\n\n // Collect all IDs to delete\n const allDeletedIds = [\n ...(deleteToolData.deleted_similar_learning_ids || []),\n ...(deleteToolData.deleted_conflicting_learning_ids || [])\n ];\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n if (allDeletedIds.length > 0) {\n console.log(\"[Dashboard Mode] Executing Delete APIs for IDs:\", allDeletedIds);\n\n // Helper function to find the learning object by ID from the REF\n const getLearningDetails = (id: string) => {\n // --- CHANGED: Use Ref.current here ---\n const conflicting = learningWtaResponseRef.current?.conflicting_learnings || {};\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n \n let found = Object.values(conflicting).find((l: any) => l.id === id);\n if (found) return found;\n \n found = Object.values(similar).find((l: any) => l.id === id);\n return found;\n };\n\n for (const id of allDeletedIds) {\n // 1. Get the details of the item being deleted\n const itemDetails: any = getLearningDetails(id);\n \n // 2. Extract specific fields\n \n const payloadId = itemDetails?.variant_id; \n \n const variantText = itemDetails?.feedback?.variant || \"\";\n const wtaRaw = itemDetails?.feedback?.when_to_apply;\n const wtaString = Array.isArray(wtaRaw) ? wtaRaw.join(' OR ') : (wtaRaw || \"\");\n const wntaRaw = itemDetails?.feedback?.when_not_to_apply;\n const wntaString = Array.isArray(wntaRaw) ? wntaRaw.join(' OR ') : (wntaRaw || \"\");\n\n // 3. Construct the detailed payload\n const payload = {\n \"status\": \"approved\",\n \"metadata\": {\n \"userName\": \"M Kathyayani\",\n \"userEmailId\": \"madumbu.kathyayani@techolution.com\",\n \"llm\": \"claude-3.5-sonnet\",\n \"isVariantFlow\": true,\n \"isDeleteAction\": true,\n \"isAgentsFeedback\": true,\n \"variant\": {\n \"id\": payloadId, \n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n \"variant\": variantText, \n \"conditions_whentoapply\": wtaString,\n \"conditions_whennottoapply\": wntaString,\n \"question\": \"\",\n \"categories\": [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }), \n \"originalQuestion\": \"\",\n \"parameterizedQuestion\": \"\",\n \"parentId\": itemDetails?.id \n },\n \n }\n };\n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: payload\n });\n \n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully deleted ID: ${id}`);\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(id);\n return newSet;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to delete ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling delete API for ID: ${id}`, error);\n }\n }\n }\n return; \n }\n // -------------------------------\n\n // Standard Mode Logic (Non-Dashboard)\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n allDeletedIds.forEach(id => newSet.add(id));\n return newSet;\n });\n\n }, [setDeletedLearningIds, baseUrl, organizationName, isFromDashboard]); // REMOVED learningWtaResponse from here\n\n \n// Callback function to handle merge tool calls\n const handleMergeToolCallback = useCallback(async (mergeToolData: any) => {\n setIsMergeLoading(true);\n console.log('🔴 MERGE CALLBACK - Processing merge tool call');\n \n const { merge_learnings, similar_learnings, conditions_whentoapply, conditions_whennottoapply } = mergeToolData;\n\n if (!merge_learnings || !similar_learnings || !Array.isArray(similar_learnings)) {\n console.log('Invalid merge tool data, skipping');\n setIsMergeLoading(false);\n return;\n }\n\n // 1. Update the Current Form with new conditions (Common for both modes)\n if (conditions_whentoapply && Array.isArray(conditions_whentoapply)) {\n console.log(' MERGE CALLBACK - Replacing whenToApply conditions:', conditions_whentoapply);\n const whenToApplyString = conditions_whentoapply.join(' OR ');\n \n setFormDataState((prev: any) => ({\n ...prev,\n whenToApply: whenToApplyString,\n _mergeUpdate: true, \n _mergeWTA: conditions_whentoapply \n }));\n }\n\n if (conditions_whennottoapply && Array.isArray(conditions_whennottoapply)) {\n console.log(' MERGE CALLBACK - Replacing whenNotToApply conditions:', conditions_whennottoapply);\n const whenNotToApplyString = conditions_whennottoapply.join(' OR ');\n \n setFormDataState((prev: any) => ({\n ...prev,\n whenNotToApply: whenNotToApplyString,\n _mergeUpdate: true, \n _mergeWNTA: conditions_whennottoapply \n }));\n }\n\n // --- DASHBOARD MODE API LOGIC ---\n if (isFromDashboard) {\n console.log(\"[Dashboard Mode] Executing Merge-Delete APIs for IDs:\", similar_learnings);\n\n // Helper to look up variant_id\n const getLearningDetails = (id: string) => {\n // Use Ref.current to avoid dependency recursion\n const similar = learningWtaResponseRef.current?.similar_learnings || {};\n return Object.values(similar).find((l: any) => l.id === id);\n };\n\n for (const id of similar_learnings) {\n // Get details to find the correct variant_id\n const itemDetails: any = getLearningDetails(id);\n // Use variant_id if available, fallback to id\n const payloadId = itemDetails?.variant_id;\n\n // For a merge, we essentially \"Delete\" the old one because its conditions \n // have been moved to the current form state (handled above).\n const payload = {\n \"status\": \"approved\",\n \"metadata\": {\n \"userName\": \"M Kathyayani\",\n \"userEmailId\": \"madumbu.kathyayani@techolution.com\",\n \"llm\": \"claude-3.5-sonnet\",\n \"isVariantFlow\": true,\n \"isDeleteAction\": true,\n \"isAgentsFeedback\": true,\n \"variant\": {\n \"id\": payloadId, \n scope: {\n name: \"User\",\n value: [{\n name: \"M Kathyayani\",\n email: \"madumbu.kathyayani@techolution.com\",\n userId: \"8059658c-a65c-4e14-89aa-a5195f5d09f5\"\n }]\n },\n topic: {\n id: null,\n value: \"default\"\n },\n \"variant\": \"\", \n \"conditions_whentoapply\": \"\",\n \"conditions_whennottoapply\": \"\",\n \"question\": \"\",\n \"categories\": [],\n created_at: new Date().toLocaleString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true\n }), \n \"originalQuestion\": \"\",\n \"parameterizedQuestion\": \"\",\n \"parentId\": itemDetails?.id \n },\n \n }\n };\n\n try {\n const response = await publishAgenticFeedbackForVariantIngestion({\n baseUrl: baseUrl,\n organizationName: organizationName,\n payload: payload\n });\n\n if (response && response.ok) {\n console.log(`[Dashboard Mode] Successfully Merged (Deleted) ID: ${id}`);\n // Update UI only on success\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(id);\n return newSet;\n });\n } else {\n console.error(`[Dashboard Mode] Failed to merge-delete ID: ${id}. Status: ${response?.status}`);\n }\n } catch (error) {\n console.error(`[Dashboard Mode] Error calling merge-delete API for ID: ${id}`, error);\n }\n }\n \n setIsMergeLoading(false);\n return; // Exit function for dashboard mode\n }\n // -------------------------------\n\n // Standard Mode (Non-Dashboard): Optimistic Update\n setMergedLearningIds(prev => {\n const newSet = new Set(prev);\n similar_learnings.forEach((id: string) => newSet.add(id));\n return newSet;\n });\n \n setIsMergeLoading(false);\n \n }, [setMergedLearningIds, setFormDataState, setIsMergeLoading, baseUrl, organizationName, isFromDashboard]);\n\n const parsedSuggestions = useParsedHeaderSuggestions(messages, setValidationRecommendations,handleDeleteToolCallback, handleMergeToolCallback, handleEditToolCallback);\n\n // Replace the logic inside the useEffect for parsedSuggestions\n \n useEffect(() => {\n const latestSuggestions: ParsedSuggestion | null = parsedSuggestions?.[parsedSuggestions?.length - 1] || null;\n if (latestSuggestions) {\n \n if (latestSuggestions._isContextual) {\n console.log(\"Processing contextual suggestions:\", latestSuggestions);\n\n // Filter out empty strings immediately\n const whenToApplyStrings = latestSuggestions.conditions_whentoapply?.map(\n (item: any) => item.when_to_apply\n ).filter((str: string) => str && str.trim() !== '') || [];\n\n const whenNotToApplyStrings = latestSuggestions.conditions_whennottoapply?.map(\n (item: any) => item.when_not_to_apply \n ).filter((str: string) => str && str.trim() !== '') || [];\n\n // Update formDataState with the CLEANED arrays\n // If the result is [], the form will show \"No suggestions found\" instead of \"1.\"\n setFormDataState((prev: any) => ({\n ...prev,\n whenToApply: whenToApplyStrings,\n whenNotToApply: whenNotToApplyStrings,\n _contextualUpdate: true \n }));\n }\n else {\n // Handle find/replace suggestions (existing logic)\n setInstantLearningSuggestions(latestSuggestions);\n }\n console.log(\"Parsed suggestions:\", parsedSuggestions);\n }\n }, [parsedSuggestions]);\n\n\n\n // Filter learningWtaResponse when deletedLearningIds changes (similar to LearningDetailsForm logic)\n useEffect(() => {\n if (!learningWtaResponse || deletedLearningIds.size === 0) return;\n\n // Check if we have any learnings that need to be filtered out\n const hasConflictingToFilter = learningWtaResponse.conflicting_learnings &&\n Object.values(learningWtaResponse.conflicting_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n deletedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasConflictingToFilter && !hasSimilarToFilter) return;\n\n // Create a unique identifier for the current response to prevent infinite loops\n const currentResponseId = JSON.stringify({\n deletedIds: Array.from(deletedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of deleted IDs\n if (lastProcessedResponseRef.current === currentResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out deleted learnings from conflicting learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.conflicting_learnings) {\n const remainingConflicting = Object.values(filteredResponse.conflicting_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying conflicting learnings:', {\n originalKeys: Object.keys(filteredResponse.conflicting_learnings),\n remainingCount: remainingConflicting.length,\n remainingLearnings: remainingConflicting.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedConflicting: any = {};\n remainingConflicting.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedConflicting[key] = learning;\n console.log(`[ChatComponent] Conflicting learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.conflicting_learnings = rekeyedConflicting;\n console.log('[ChatComponent] Final conflicting learnings keys:', Object.keys(rekeyedConflicting));\n }\n\n // Filter out deleted learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !deletedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of deleted IDs as processed\n lastProcessedResponseRef.current = currentResponseId;\n\n console.log('Filtered learningWtaResponse after deletion:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [deletedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // Filter learningWtaResponse when mergedLearningIds changes (similar to delete logic)\n useEffect(() => {\n if (!learningWtaResponse || mergedLearningIds.size === 0) return;\n\n // Check if we have any similar learnings that need to be filtered out (merge only affects similar learnings)\n const hasSimilarToFilter = learningWtaResponse.similar_learnings &&\n Object.values(learningWtaResponse.similar_learnings).some((learning: any) =>\n mergedLearningIds.has(learning.id)\n );\n\n // Only proceed if there are actually learnings to filter\n if (!hasSimilarToFilter) return;\n\n // Create a unique identifier for the current merge response to prevent infinite loops\n const currentMergeResponseId = JSON.stringify({\n mergedIds: Array.from(mergedLearningIds).sort()\n });\n\n // Skip if we've already processed this set of merged IDs\n if (lastProcessedMergeResponseRef.current === currentMergeResponseId) {\n return;\n }\n\n const filteredResponse = { ...learningWtaResponse };\n\n // Filter out merged learnings from similar learnings and re-key using index (0th = A, 1st = B, etc.)\n if (filteredResponse.similar_learnings) {\n const remainingSimilar = Object.values(filteredResponse.similar_learnings)\n .filter((learning: any) => !mergedLearningIds.has(learning.id));\n\n console.log('[ChatComponent] Re-keying similar learnings after merge:', {\n originalKeys: Object.keys(filteredResponse.similar_learnings),\n remainingCount: remainingSimilar.length,\n remainingLearnings: remainingSimilar.map((l: any) => ({ id: l.id, variant: l.feedback.variant }))\n });\n\n const rekeyedSimilar: any = {};\n remainingSimilar.forEach((learning: any, index: number) => {\n const key = String.fromCharCode(65 + index); // 65 is ASCII for 'A'\n rekeyedSimilar[key] = learning;\n console.log(`[ChatComponent] Similar learning ${index} gets key '${key}':`, learning.feedback.variant);\n });\n filteredResponse.similar_learnings = rekeyedSimilar;\n console.log('[ChatComponent] Final similar learnings keys after merge:', Object.keys(rekeyedSimilar));\n }\n\n // Update the ref to mark this set of merged IDs as processed\n lastProcessedMergeResponseRef.current = currentMergeResponseId;\n\n console.log('Filtered learningWtaResponse after merge:', filteredResponse);\n setLearningWtaResponse(filteredResponse);\n }, [mergedLearningIds, learningWtaResponse, setLearningWtaResponse]);\n\n // ContextualChatComponent.tsx\n\nconst useParsedHeaderHowToRespond = (messages: any[]) => {\n return useMemo(() => {\n \n const results: object[] = [];\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n \n \n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n \n const extractedData: { question? : string , howtorespond?: string, topic?: string, categories?: string[], scope?: string, } = {};\n\n // Check if response contains any of our fields\n const hasRelevantFields = responseData.includes('howtorespond') || \n responseData.includes('topic') || \n responseData.includes('categories') || \n responseData.includes('scope') ||\n responseData.includes('question');\n \n if (hasRelevantFields) { \n try {\n console.log('checking question response data:', responseData);\n // Clean and parse the Python dict\n const cleanedData = sanitizePythonDictToJSON(responseData);\n \n const parsed = JSON5.parse(cleanedData);\n \n if ('howtorespond' in parsed) {\n extractedData.howtorespond = parsed.howtorespond;\n }\n \n if ('topic' in parsed) {\n extractedData.topic = parsed.topic;\n }\n \n if ('categories' in parsed) {\n extractedData.categories = Array.isArray(parsed.categories) \n ? parsed.categories \n : [];\n }\n if ('scope' in parsed) {\n extractedData.scope = parsed.scope;\n }\n // for dashboard\n if ('question' in parsed) {\n extractedData.question = parsed.question;\n }\n } catch (e) {\n console.error(\"❌ Failed to parse response data:\", e);\n \n const questionMatch = responseData.match(/['\"]question['\"]\\s*:\\s*['\"]([\\s\\S]*?)['\"](?=\\s*[,}])/);\n if (questionMatch) {\n extractedData.question = questionMatch[1];\n }\n // Manual extraction as fallback\n const howtoMatch = responseData.match(/['\"]howtorespond['\"]\\s*:\\s*['\"](.*?)['\"](?=\\s*[,}])/);\n if (howtoMatch) {\n console.log('🔧 MANUAL EXTRACTION succeeded:', howtoMatch[1]);\n extractedData.howtorespond = howtoMatch[1];\n } else {\n console.error('🔧 MANUAL EXTRACTION also failed');\n console.error('🔧 Trying alternative pattern...');\n \n // Even simpler pattern - just get everything between the quotes\n const simpleMatch = responseData.match(/howtorespond['\"]\\s*:\\s*['\"]([\\s\\S]*?)['\"](?:\\s*[,}]|$)/);\n if (simpleMatch) {\n console.log('🔧 ALTERNATIVE EXTRACTION succeeded:', simpleMatch[1]);\n extractedData.howtorespond = simpleMatch[1];\n }\n }\n }\n } else {\n console.log('⏭️ Skipping message - no relevant fields');\n }\n \n if (Object.keys(extractedData).length > 0) {\n console.log('📦 FINAL EXTRACTED DATA:', extractedData);\n results.push(extractedData);\n } else {\n console.log('⚠️ No data extracted from this message');\n }\n }\n \n console.log('🏁 useParsedHeaderHowToRespond COMPLETE. Results count:', results.length);\n return results;\n }, [messages]);\n};\n\n const parsedHowToRespond = useParsedHeaderHowToRespond(messages);\n \n useEffect(() => {\n\n const latestData: any = parsedHowToRespond?.[parsedHowToRespond?.length - 1] || null;\n \n if (!latestData) {\n return;\n }\n \n if ('howtorespond' in latestData) {\n setExtractedHowToRespond(latestData.howtorespond);\n }\n \n if ('topic' in latestData) {\n setExtractedTopic(latestData.topic);\n }\n\n if ('question' in latestData) {\n console.log(\"✅ Question Extracted:\", latestData.question);\n setFormDataState((prev: any) => {\n // Prevent unnecessary updates if it's the same\n if (prev.question === latestData.question) return prev;\n return {\n ...prev,\n question: latestData.question\n };\n });\n }\n if ('categories' in latestData && Array.isArray(latestData.categories)) {\n setExtractedCategories(latestData.categories);\n }\n \n if ('scope' in latestData) {\n console.log(\"✅ Setting scope:\", latestData.scope);\n \n setFormDataState((prev: any) => {\n // CASE 1: Empty scope (reset)\n if (latestData.scope === '') {\n return {\n ...prev,\n scope: {\n name: '', // This triggers the placeholder \"Select scope\"\n value: null\n }\n };\n }\n\n if (prev.scope?.name === latestData.scope) {\n return prev;\n }\n\n // CASE 3: New valid scope selection\n let newScopeValue: any = null;\n \n if (latestData.scope === 'User') {\n newScopeValue = []; \n } else if (latestData.scope === 'Assistant') {\n newScopeValue = { assistantName: chatAssistantName || '', conciergeId: assistantId || '' };\n }\n console.log('📌 Scope Set from Chat:', latestData.scope, 'Value:', newScopeValue);\n return {\n ...prev,\n scope: {\n name: latestData.scope,\n value: newScopeValue\n }\n };\n });\n }\n }, [parsedHowToRespond, setExtractedHowToRespond, setExtractedTopic, setExtractedCategories, setFormDataState, chatAssistantName]);\n\n\n\n const useParsedHeaderModification = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /['\"](\\w+)['\"]\\s*:\\s*['\"](.*?)['\"]/g;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n if (match) {\n try {\n const extracted = JSON5.parse(`{${match[0]}}`);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON for header message:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parsedModification = useParsedHeaderModification(messages);\n\n useEffect(() => {\n const latestModification: any = parsedModification?.[parsedModification?.length - 1] || null;\n if (latestModification) {\n setExtractedModification(latestModification.modification)\n }\n\n }, [parsedModification]);\n\n const useParsedWtaSuggestions = (\n messages: any[],\n setSuggestedWta: (wta: string[]) => void\n ) => {\n useEffect(() => {\n const orchestratorAndAgentsMessages =\n messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const regex = /<wta>([\\s\\S]*?)<\\/wta>/gi;\n const matches: string[] = [];\n let match;\n while ((match = regex.exec(responseData)) !== null) {\n console.log('match wta suggestion', match)\n matches.push(match[1]);\n }\n\n if (matches.length) {\n setSuggestedWta(matches);\n }\n }\n }, [messages, setSuggestedWta]);\n };\n\n useParsedWtaSuggestions(messages, setSuggestedWta);\n\n const useParsedHeaderTooltip = (messages: any[]) => {\n return useMemo(() => {\n const results: object[] = [];\n\n const pattern = /^\\{\\s*(['\"])(\\w+)\\1\\s*:\\s*(['\"])(.*?)\\3\\s*\\}$/;\n\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match: string[] = responseData.match(pattern);\n if (match) {\n console.log('match: ', match[0])\n try {\n const extracted = JSON5.parse(match[0]);\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n return results;\n }, [messages]);\n };\n\n const parseTooltip = useParsedHeaderTooltip(messages);\n\n useEffect(() => {\n const latestParseTooltip: any = parseTooltip?.[parseTooltip?.length - 1] || null;\n if (latestParseTooltip) {\n console.log('latestParseTooltip: ', latestParseTooltip)\n setExtractedTooltip(latestParseTooltip?.tooltip)\n }\n\n }, [parseTooltip]);\n\n // const useParsedHeaderSave = (messages: any[]) => {\n // return useMemo(() => {\n // const results: object[] = [];\n\n // const pattern = /\\{\\s*'save'\\s*:\\s*(True|False|true|false)\\s*\\}/;\n\n // const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n // for (const msg of orchestratorAndAgentsMessages) {\n // const responseData = msg?.responsedata || '';\n // const match = responseData.match(pattern);\n // if (match) {\n // try {\n // // Transform and store the fixed version\n // const fixed = match[0]\n // .replace(/\\bTrue\\b/, 'true')\n // .replace(/\\bFalse\\b/, 'false')\n // .replace(/'/g, '\"'); // single to double quotes\n\n // console.log('corrected: ', fixed);\n\n // const extracted = JSON5.parse(fixed);\n // results.push(extracted);\n // } catch (e) {\n // console.error(\"Failed to parse JSON:\", e);\n // }\n // }\n // }\n\n // return results;\n // }, [messages]);\n // };\n\n const useParsedHeaderSave = (messages: any[]) => {\n const [parsedSave, setParsedSave] = useState<object[]>([]);\n\n useEffect(() => {\n const results: object[] = [];\n const pattern = /\\{\\s*['\"]save['\"]\\s*:\\s*(True|False|true|false)\\s*\\}/;\n const orchestratorAndAgentsMessages = messages[messages.length - 1]?.orchestratorAndAgentsMessages || [];\n\n for (const msg of orchestratorAndAgentsMessages) {\n const responseData = msg?.responsedata || '';\n const match = responseData.match(pattern);\n\n if (match) {\n try {\n const fixed = match[0]\n .replace(/\\bTrue\\b/, 'true')\n .replace(/\\bFalse\\b/, 'false')\n .replace(/'/g, '\"');\n\n console.log('corrected:', fixed);\n\n const extracted = JSON5.parse(fixed);\n if (extracted.save === true) {\n setShouldTriggerSave(true);\n }\n results.push(extracted);\n } catch (e) {\n console.error(\"Failed to parse JSON:\", e);\n }\n }\n }\n\n setParsedSave(results);\n }, [messages]);\n\n return parsedSave;\n };\n\n const parsedSave = useParsedHeaderSave(messages);\n\n // useEffect(() => {\n // const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n\n // let timeoutId: NodeJS.Timeout;\n\n // if (latestParsedSave && latestParsedSave?.save && !isSaveLoading) {\n // setIsSaveLoading(true)\n // timeoutId = setTimeout(() => {\n // setIsSaveLoading(false)\n // setSave(latestParsedSave.save);\n // }, 200); // delay in milliseconds\n // }\n\n // return () => {\n // clearTimeout(timeoutId);\n // };\n // }, [parsedSave]);\n useEffect(() => {\n const latestParsedSave: any = parsedSave?.[parsedSave?.length - 1] || null;\n // Guard: ensure it's a boolean value\n if (!latestParsedSave || typeof latestParsedSave.save !== 'boolean') return;\n\n setIsSaveLoading(true);\n\n const timeoutId = setTimeout(() => {\n setIsSaveLoading(false);\n setSave(latestParsedSave.save);\n }, 200);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [parsedSave]);\n\n useEffect(() => {\n if (isFormSaveClicked) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, 'Save it')\n setIsFormSavedClicked(false)\n }\n }, [isFormSaveClicked])\n\n useEffect(() => {\n if (deleteLearningTrigger && onDeleteLearning) {\n const deleteMessage = `Delete learning ${deleteLearningTrigger}`;\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, deleteMessage)\n if (setDeleteLearningTrigger) {\n setDeleteLearningTrigger(null);\n }\n }\n }, [deleteLearningTrigger, onDeleteLearning, setDeleteLearningTrigger])\n\n useEffect(() => {\n if(sendMessageInChat) {\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, sendMessageInChat)\n setSendMessageInChat('');\n }\n }, [sendMessageInChat])\n\n useEffect(() => {\n getChatSettings();\n getChatHistory()\n\n const updateHeight = () => {\n const headerHeight = chatHeaderRef?.current?.clientHeight || 0;\n\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\n const scrollToBottom = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n setTimeout(() => {\n scrollContainer.scrollTo({\n top: scrollContainer.scrollHeight,\n behavior: \"smooth\",\n });\n setIsVisible(false)\n }, 100);\n }\n }, []);\n\n useEffect(() => {\n if (selectedWTA?.length > 0) {\n scrollToBottom()\n }\n }, [selectedWTA]);\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: authToken ? { Authorization: `Bearer ${authToken}` } : {},\n };\n\n http\n .request(config)\n .then((response) => {\n if (response?.data?.chatSettings) {\n // setChatInitialMessage(\n // response?.data?.chatSettings?.chatInitialMessage\n // );\n\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: authToken ? { Authorization: `Bearer ${authToken}` } : {},\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(getHistoryURL, requestOptions)\n .then((response) => {\n const data = response.data;\n\n if (data.length > 0) {\n setMessages(data)\n // addDateDividerToMessages(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 setValidationWtaResponse(null)\n setLearningWtaResponse(null)\n try {\n const requestOptions = {\n method: 'GET',\n params: { guestSessionId: guestSessionIdRef.current },\n withCredentials: true, // Send cookies along with the request\n };\n http\n .get(resetChatHistoryURL, requestOptions)\n .then(() => {\n setExtractedHowToRespond('');\n setExtractedTopic('');\n setExtractedCategories([]);\n setEditsInReviewState([]);\n\n setIsNewChatClicked(true)\n setShowSelectedWTA(false)\n setSelectedWTA([])\n setChatInitialMessage('');\n setDeletedLearningIds(new Set()); // Clear deleted learning IDs for new chat\n setDeletionsInReviewState([]);\n lastProcessedResponseRef.current = ''; // Reset processing ref for new chat\n processedDeleteToolsRef.current.clear(); // Clear processed delete tools for new chat\n processedMergeTriggers.current.clear(); // Clear processed merge triggers for new chat\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null); // Clear any pending merge triggers\n }\n chatPreviewIdRef.current = `${uuidv4()}`;\n setHasUserFilledForm(false)\n setMessages([]);\n setShowWelcomeMessage(true);\n\n // Reset learning data in LearningDetailsForm\n if (onResetLearningData) {\n console.log('[ChatComponent] 🔄 Calling onResetLearningData callback');\n onResetLearningData();\n } else {\n console.log('[ChatComponent] ❌ onResetLearningData callback not available');\n }\n processedEditToolsRef.current.clear(); // Clear processed edit tools for new chat\n // --- FIX: REMOVED incorrect setFormDataState block ---\n // This was resetting the wrong data structure and is\n // redundant because onResetLearningData() handles it.\n })\n .catch((error) => {\n console.error(error);\n });\n } catch (error) {\n setMessageLoading(false);\n console.error(error);\n }\n };\n\n function replaceAsteriskInAnchor(inputString: string): string {\n // Regular expression to match an anchor tag with asterisk inside\n const regex = /<a [^>]*>.*?<\\/a>/g;\n // Check if the inputString contains an anchor tag with asterisk and replace it\n const replacedString = inputString?.replace(regex, (match) => {\n // Replace asterisk inside the anchor tag with &ast;\n return match?.replace(/\\*/g, '&ast;');\n });\n return replacedString;\n }\n\n const getAssistantObj = (event: any, accordianMessageArray: any, explainabilityMap: any) => {\n console.log('event', event, Object.keys(event));\n console.log('content: ', event?.data)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n //orchestrator is sending message, we initially set it as normal message\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n //orchestrator is sending message and thinking break is there, we add it to accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n //check for wait message deletion\n streamedresponse.content = \"\";\n accordianMessageArray.push(\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n\n }\n //orchestrator replied with the final message, this is the final response, no need for accordian\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === true &&\n event?.data?.chatStream?.continueChatResult?.isEnd === true) {\n streamedresponse.content = replaceAsteriskInAnchor(\n event?.data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n }\n\n //agent responded it will directly be shown in collapsed form\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === false &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray = [\n ...accordianMessageArray,\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: true,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n ]\n }\n }\n\n //final response from agent\n if (event?.data?.chatStream?.continueChatResult?.thinking_break === true &&\n event?.data?.chatStream?.continueChatResult?.is_orchestrator === false &&\n event?.data?.chatStream?.continueChatResult?.isEnd === false\n ) {\n const continueChatResult = event?.data?.chatStream?.continueChatResult;\n // Check for explainability_id and responded_by, and update the map\n if (continueChatResult.explainability_id && continueChatResult.responded_by) {\n const explainabilityId = continueChatResult.explainability_id;\n const respondedBy = continueChatResult.responded_by;\n // Only set the value if the map does not already contain the explainabilityId\n if (!explainabilityMap.has(explainabilityId)) {\n explainabilityMap.set(explainabilityId, { responded_by: respondedBy, index: accordianMessageArray.length });\n }\n }\n\n if (explainabilityMap.has(event?.data?.chatStream?.continueChatResult?.explainability_id)) {\n const targetedIndexId = explainabilityMap.get(event?.data?.chatStream?.continueChatResult?.explainability_id)\n const index = targetedIndexId?.index;\n //@ts-ignore\n accordianMessageArray[index] =\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: true\n }\n\n } else {\n accordianMessageArray.push(\n\n {\n responsedata: event?.data?.chatStream?.continueChatResult?.message?.content,\n responseFrom: event?.data?.chatStream?.continueChatResult?.responded_by,\n header_message: event?.data?.chatStream?.continueChatResult?.header_message,\n finalResponseStatus: false,\n explainability_id: event?.data?.chatStream?.continueChatResult?.explainability_id ?? '',\n isParallelToolResponse: false\n }\n );\n }\n\n }\n\n const annotations = event?.data?.chatStream?.continueChatResult?.message?.annotations;\n const userFeedbackId = event?.data?.chatStream?.continueChatResult?.message?.userFeedbackId || ''\n let assistantObj = {\n role: 'assistant',\n content: streamedresponse.content,\n orchestratorAndAgentsMessages: accordianMessageArray,\n time: new Date(),\n requestId: event?.data?.chatStream?.continueChatResult?.requestId ?? '',\n citations: event?.data?.chatStream?.continueChatResult?.message?.citations,\n guides_utilized: event?.data?.chatStream?.continueChatResult?.message?.guides_utilized ?? [],\n annotations: annotations,\n resourceId: event?.data?.chatStream?.continueChatResult?.resourceId,\n userFeedbackId,\n citationDisplayType: event?.data?.chatStream?.continueChatResult?.message?.citationDisplayType ?? \"\"\n }\n\n if (annotations) {\n for (let index = 0; index < annotations?.length; index++) {\n const annotation = annotations[index];\n assistantObj = { ...assistantObj, content: assistantObj?.content?.replace(annotation?.text, annotation?.text + `<sup>${index}</sup>`) }\n }\n }\n return assistantObj;\n }\n\n function extractWaitMessage(inputString: string) {\n const prefix = 'WaitMessage: ';\n const startIndex = inputString.indexOf(prefix);\n\n if (startIndex !== -1) {\n const extractedString = inputString.substring(\n startIndex + prefix.length\n );\n return extractedString?.replaceAll('WaitMessage: ', '');\n } else {\n return '';\n }\n }\n\n const handleMessages = (data: any, explainabilityMap: any, accordianMessageArray: any, userQuestionTime: any, userInputParam: string, isFirstQuestionSent?: boolean) => {\n console.log('userInput: ', userInputParam)\n let streamedresponse = { role: 'assistant', content: '', id: uuidv4() };\n if (data?.chatStream?.continueChatResult?.message?.content?.includes('WaitMessage: ')) {\n setMessageLoading(false);\n setWaitMessageLoading(true);\n streamedresponse.content = extractWaitMessage(\n data?.chatStream?.continueChatResult?.message?.content + '\\n\\n'\n );\n //@ts-ignore\n setMessages([...messages, { role: 'user', content: userInputParam, time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, id: data?.chatStream?.continueChatResult?.requestId || '', reply: '' }, streamedresponse\n ]);\n } else {\n setMessageLoading(false);\n setWaitMessageLoading(false);\n streamedresponse.content = replaceAsteriskInAnchor(\n data?.chatStream?.continueChatResult?.message?.content\n )?.replaceAll('WaitMessage: ', '');\n\n const assistantObject = getAssistantObj({ data }, accordianMessageArray, explainabilityMap);\n console.log('assistantObject', assistantObject);\n setMessages([\n ...messages,\n { role: 'user', content: userInputParam || '', time: userQuestionTime, isFirstQuestionSent: isFirstQuestionSent || false, requestId: data?.chatStream?.continueChatResult?.requestId ?? '' },\n assistantObject,\n ]);\n setIsStreamEnd(data?.chatStream?.continueChatResult?.isEnd);\n }\n }\n\n const handleStream = (event?: any, isFirstQuestionSent?: boolean, userInputParam?: string) => {\n \n const finalInput = userInputParam?.trim() || userInput?.trim() || '';\n \n const processConditions = (conditions: string | string[] | undefined): string[] => {\n if (Array.isArray(conditions)) {\n // If it's an array, filter out any empty strings\n return conditions.filter(c => c.trim() !== '');\n }\n if (typeof conditions === 'string') {\n // If it's a string, split it and filter\n return conditions.split(' OR ').filter(c => c.trim() !== '');\n }\n return [];\n };\n const whenToApplyConditions = processConditions(formDataState?.whenToApply);\n const whenNotToApplyConditions = processConditions(formDataState?.whenNotToApply);\n\n const scopeName = formDataState?.scope?.name \n \n // Change type to allow string array\n let scopeId: string | string[] | null = null; \n\n if (formDataState?.scope?.value) {\n try {\n switch (scopeName) {\n case \"Assistant\":\n // Value is AssistantScopeValue: { assistantName: string, conciergeId: string }\n // We send the conciergeId as the string ID\n scopeId = (formDataState.scope.value as any).conciergeId || null;\n break;\n case \"User\":\n // Value is UserScopeItem[]: [{ email, userId, name }]\n // We send the first user's userId as the string ID\n const userArray = (formDataState.scope.value as any[]);\n if (userArray.length > 0) {\n scopeId = userArray[0].userId || null;\n }\n break;\n case \"Custom\":\n // Value is CustomScopeValue: { scopeName: string, scopeId: string }\n // Per your request, backend expects an array of strings for \"Custom\"\n \n const customScopeId = (formDataState.scope.value as any).scopeId;\n if (customScopeId) {\n // Wrap the single string ID in an array\n scopeId = [customScopeId]; \n } else {\n // Send empty array if no ID is set\n scopeId = []; \n }\n break;\n case \"Global\":\n default:\n // Value is null\n scopeId = null;\n break;\n }\n } catch (e) {\n console.error(\"Error parsing scope_id:\", e, formDataState.scope);\n scopeId = null; // Default to null on error\n }\n }\n\n if (event.key !== 'Enter' || event.shiftKey || (userInputParam?.trim() === '' && userInput?.trim() === '') || isStreaming) {\n return;\n }\n setIsStreaming(true)\n const userQuestionTime = new Date();\n setMessages([\n ...messages.map((m, index) => ({\n ...m,\n content: replaceAsteriskInAnchor(m.content)?.replace(\n 'WaitMessage: ',\n ''\n ),\n })),\n { role: 'user', content: finalInput, time: userQuestionTime, isFirstQuestionSent: false },\n ]);\n\n\n const finalInputLower = finalInput.toLowerCase();\n const isDeleteMessage = finalInputLower.startsWith('delete ');\n const isEditMessage = finalInputLower.startsWith('edit '); \n const isMergeMessage = finalInputLower.startsWith('merge ');\n\n let deletionsForThisStream: { question_id: string; variant_id: string }[] = deletionsInReviewState;\n // 'edit' state will just pass through without modification\n let editsForThisStream: any[] = editsInReviewState; \n\n if (isDeleteMessage) {\n console.log(\"Delete message detected, parsing for specific label...\");\n \n const deleteRegex = /^Delete (?:conflict|similar) learning ([A-Z])/i;\n const match = finalInput.match(deleteRegex);\n\n if (match) {\n const sequentialLabel = match[1]; // e.g., \"A\"\n console.log(`Found label \"${sequentialLabel}\" in delete message.`);\n \n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n // Combine both lists to find the learning by its label \"A\", \"B\", etc.\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n \n // Check if this item is *already* in the state to avoid duplicates\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n // Append this new, specific deletion to our persistent state\n const newDeletionsState = [...deletionsInReviewState, newDeletion];\n setDeletionsInReviewState(newDeletionsState); // Persist for next message\n deletionsForThisStream = newDeletionsState; // Use for this stream\n console.log(\"Appended new deletion to in_review state:\", newDeletion);\n } else {\n console.log(\"Item already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n // Only hide card optimistically if NOT in dashboard mode.\n if (!isFromDashboard && !deletedLearningIds.has(learning.id)) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(learning.id);\n return newSet;\n });\n }\n } else {\n console.warn(\"Delete message parsed, but could not find learning for label:\", sequentialLabel);\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n } else { \n console.warn(\"Could not parse label. Checking for generic delete (e.g., 'Delete similar learning').\");\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n \n // Get the learnings as arrays\n const conflictingLearnings = Object.values(conflicting) as any[];\n const similarLearnings = Object.values(similar) as any[];\n\n let learningsToAutoDelete: any[] = [];\n\n if (finalInputLower.includes('similar learnings') && similarLearnings.length > 1) { \n console.log(`Found ${similarLearnings.length} similar learnings. Auto-selecting ALL for deletion.`);\n learningsToAutoDelete = similarLearnings; \n \n // Check for \"Delete conflicting learnings\" (PLURAL)\n } else if (finalInputLower.includes('conflicting learnings') && conflictingLearnings.length > 1) { \n console.log(`Found ${conflictingLearnings.length} conflicting learnings. Auto-selecting ALL for deletion.`);\n learningsToAutoDelete = conflictingLearnings; \n\n // Check for \"Delete similar learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('similar learning') && similarLearnings.length === 1) {\n console.log(\"Found 1 similar learning. Auto-selecting for deletion.\");\n learningsToAutoDelete = [similarLearnings[0]]; \n \n // Check for \"Delete conflicting learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('conflicting learning') && conflictingLearnings.length === 1) {\n console.log(\"Found 1 conflicting learning. Auto-selecting for deletion.\");\n learningsToAutoDelete = [conflictingLearnings[0]]; \n \n } else {\n console.log(\"Generic delete message, but conditions not met (e.g., used 'learnings' for 1 item). No action taken.\");\n }\n\n if (learningsToAutoDelete.length > 0) {\n \n const newDeletions: { question_id: string; variant_id: string }[] = [];\n let itemsAddedCount = 0;\n\n for (const learning of learningsToAutoDelete) {\n if (learning && learning.id && learning.variant_id) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n newDeletions.push(newDeletion);\n itemsAddedCount++;\n }\n } else {\n console.warn(\"Skipping invalid learning object during auto-delete:\", learning);\n }\n }\n\n if (itemsAddedCount > 0) {\n const newDeletionsState = [...deletionsInReviewState, ...newDeletions];\n setDeletionsInReviewState(newDeletionsState); \n deletionsForThisStream = newDeletionsState; \n console.log(`Appended ${itemsAddedCount} new generic deletion(s) to in_review state:`, newDeletions);\n \n if (!isFromDashboard) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newDeletions.forEach(item => newSet.add(item.question_id));\n console.log('Added generic deleted learning IDs to LOCAL UI tracking set');\n return newSet;\n });\n }\n } else {\n console.log(\"Item(s) already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState;\n }\n } else {\n // No auto-delete found, just use the existing state\n deletionsForThisStream = deletionsInReviewState;\n }\n \n \n \n }\n \n } else if (isEditMessage) {\n console.log(\"Edit message detected, parsing and persisting 'in_review.edit' state.\");\n \n const editRegex = /^Edit (?:conflict|similar) learning ([A-Z]) to respond with \"([\\s\\S]*?)\" with WTA: ([\\s\\S]*?) (?:and WNTA: ([\\s\\S]*)|and remove the WNTA conditions)$/i;\n const match = finalInput.match(editRegex);\n\n if (match) {\n const [_, sequentialLabel, howToRespond, whenToApply, whenNotToApplyText] = match;\n \n console.log(`Found label \"${sequentialLabel}\" in edit message.`);\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n // Build the new edit object according to your schema\n const newEdit = {\n \"id\": learning.id, \n \"feedback\": {\n \"variant\": howToRespond.trim(),\n \"when_to_apply\": whenToApply.trim(),\n \"when_not_to_apply\": (whenNotToApplyText || \"\").trim() // Use empty string if \"remove\" was matched\n },\n \"variant_id\": learning.variant_id\n };\n \n console.log(\"Constructed new edit object:\", newEdit);\n\n const otherEdits = editsInReviewState.filter(\n (item: any) => item.id !== learning.id\n );\n \n const newEditsState = [...otherEdits, newEdit];\n \n setEditsInReviewState(newEditsState); // Persist for next message\n editsForThisStream = newEditsState; // Use for this stream\n\n } else {\n console.warn(\"Edit message parsed, but could not find learning for label:\", sequentialLabel);\n editsForThisStream = editsInReviewState; // Use existing state\n }\n } else {\n console.warn(\"Could not parse edit message:\", finalInput);\n editsForThisStream = editsInReviewState; // Use existing state\n }\n } else if (isMergeMessage) {\n console.log(\"Merge message detected, parsing and persisting as 'in_review.delete' state.\");\n \n // Regex to find the label (e.g., \"A\") in \"Merge Similar Learning A...\"\n const mergeRegex = /^Merge (?:Similar|Conflicting) Learning ([A-Z])/i;\n const match = finalInput.match(mergeRegex); \n\n if (match) {\n const sequentialLabel = match[1].toUpperCase(); // e.g., \"A\"\n console.log(`Found label \"${sequentialLabel}\" in merge message.`);\n \n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n // Combine both lists to find the learning by its label \"A\", \"B\", etc.\n const allLearnings = { ...conflicting, ...similar };\n \n const learning = allLearnings[sequentialLabel]; // Find learning \"A\"\n\n if (learning) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n \n // Check if this item is *already* in the state to avoid duplicates\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n // Append this new, specific deletion to our persistent state\n const newDeletionsState = [...deletionsInReviewState, newDeletion];\n setDeletionsInReviewState(newDeletionsState); // Persist for next message\n deletionsForThisStream = newDeletionsState; // Use for this stream\n console.log(\"Appended new MERGE-AS-DELETE to in_review state:\", newDeletion);\n } else {\n console.log(\"Item (from merge) already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n if (!isFromDashboard && !deletedLearningIds.has(learning.id)) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newSet.add(learning.id);\n console.log('Added MERGED learning ID to LOCAL UI tracking set:');\n return newSet;\n });\n }\n } else {\n console.warn(\"Merge message parsed, but could not find learning for label:\", sequentialLabel);\n deletionsForThisStream = deletionsInReviewState; // Use existing state\n }\n } else { \n // --- START: Added generic fallback logic ---\n console.warn(\"Could not parse label for merge. Checking for generic merge (e.g., 'Merge similar learning').\");\n\n const conflicting = learningWtaResponse?.conflicting_learnings || {};\n const similar = learningWtaResponse?.similar_learnings || {};\n \n // Get the learnings as arrays\n const conflictingLearnings = Object.values(conflicting) as any[];\n const similarLearnings = Object.values(similar) as any[];\n\n let learningsToAutoMerge: any[] = []; // Renamed variable for clarity\n\n // Check for \"Merge similar learnings\" (PLURAL)\n if (finalInputLower.includes('similar learnings') && similarLearnings.length > 1) { \n console.log(`Found ${similarLearnings.length} similar learnings. Auto-selecting ALL for MERGE.`);\n learningsToAutoMerge = similarLearnings; \n \n // Check for \"Merge conflicting learnings\" (PLURAL)\n } else if (finalInputLower.includes('conflicting learnings') && conflictingLearnings.length > 1) { \n console.log(`Found ${conflictingLearnings.length} conflicting learnings. Auto-selecting ALL for MERGE.`);\n learningsToAutoMerge = conflictingLearnings; \n\n // Check for \"Merge similar learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('similar learning') && similarLearnings.length === 1) {\n console.log(\"Found 1 similar learning. Auto-selecting for MERGE.\");\n learningsToAutoMerge = [similarLearnings[0]]; \n \n // Check for \"Merge conflicting learning\" (SINGULAR, and only one exists)\n } else if (finalInputLower.includes('conflicting learning') && conflictingLearnings.length === 1) {\n console.log(\"Found 1 conflicting learning. Auto-selecting for MERGE.\");\n learningsToAutoMerge = [conflictingLearnings[0]]; \n \n } else {\n console.log(\"Generic merge message, but conditions not met (e.g., used 'learnings' for 1 item). No action taken.\");\n }\n\n if (learningsToAutoMerge.length > 0) {\n \n const newDeletions: { question_id: string; variant_id: string }[] = [];\n let itemsAddedCount = 0;\n\n for (const learning of learningsToAutoMerge) {\n if (learning && learning.id && learning.variant_id) {\n const newDeletion = {\n \"question_id\": learning.id,\n \"variant_id\": learning.variant_id\n };\n\n const isAlreadyAdded = deletionsInReviewState.some(\n item => item.question_id === newDeletion.question_id\n );\n\n if (!isAlreadyAdded) {\n newDeletions.push(newDeletion);\n itemsAddedCount++;\n }\n } else {\n console.warn(\"Skipping invalid learning object during auto-merge:\", learning);\n }\n }\n\n if (itemsAddedCount > 0) {\n const newDeletionsState = [...deletionsInReviewState, ...newDeletions];\n setDeletionsInReviewState(newDeletionsState); \n deletionsForThisStream = newDeletionsState; \n console.log(`Appended ${itemsAddedCount} new generic MERGE-AS-DELETE(s) to in_review state:`, newDeletions);\n if (!isFromDashboard) {\n setDeletedLearningIds(prev => {\n const newSet = new Set(prev);\n newDeletions.forEach(item => newSet.add(item.question_id));\n console.log('Added generic MERGED learning IDs to LOCAL UI tracking set');\n return newSet;\n });\n }\n } else {\n console.log(\"Item(s) from generic merge already in delete state, not adding again.\");\n deletionsForThisStream = deletionsInReviewState;\n }\n } else {\n // No auto-merge found, just use the existing state\n deletionsForThisStream = deletionsInReviewState;\n }\n // --- END: Added generic fallback logic ---\n }\n }\n \n \n\n const explainabilityMap = new Map<string, { responded_by: string; index: number }>();\n let accordianMessageArray: any[] = [];\n setShowSelectedWTA(false);\n\n // Create the new customMetaData object based on ContextualLearningForm state\n const customMetaData:any = {\n userQuery: formDataState?.question ?? '', // Mapped from the 'question' field\n topic: formDataState?.topic.value ?? '',\n variant: formDataState?.howToRespond ?? '', // Mapped from the 'howToRespond' field\n whenToApply: whenToApplyConditions,\n whenNotToApply: whenNotToApplyConditions,\n scope :scopeName,\n scope_id: scopeId,\n categories: formDataState?.categories ?? [],\n validation: validationWtaResponse ?? null,\n conflicting_learnings: learningWtaResponse?.conflicting_learnings ?? \"\",\n similar_learnings: learningWtaResponse?.similar_learnings ?? \"\",\n // NOTE: The 'recommended_' fields are mapped from the current form state.\n // If you have a separate state for AI-only suggestions, you can map it here instead.\n ...(validationRecommendations?.wta && { recommended_whentoapply: validationRecommendations.wta }),\n ...(validationRecommendations?.wnta && { recommended_whennottoapply: validationRecommendations.wnta }),\n in_review : {'delete' : deletionsForThisStream,\n 'edit' : editsForThisStream,\n 'add': addInReview || [],\n },\n \n isFirstQuestion: messages.length === 0,\n };\n \n// Here @ ToDo\n // As requested, log the metadata object every time a message is sent\n console.log('🚀 Sending Custom MetaData to Chat Backend:', customMetaData);\n \n \n \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: userInputParam?.trim() || userInput?.trim() || '',\n requestId: `requestId-${uuidv4()}`,\n customPrompt: '',\n enableForBackend: false,\n guestSessionId: guestSessionIdRef.current,\n chatPreviewId: chatPreviewIdRef.current,\n customMetaData: customMetaData, // Use the newly created metadata object\n customMetaDataDebug: {\n conflicting_learnings_keys: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings) : [],\n similar_learnings_keys: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings) : [],\n conflicting_count: learningWtaResponse?.conflicting_learnings ? Object.keys(learningWtaResponse.conflicting_learnings).length : 0,\n similar_count: learningWtaResponse?.similar_learnings ? Object.keys(learningWtaResponse.similar_learnings).length : 0\n },\n aiModel: '',\n onStreamEvent: (data: any) => handleMessages(data, explainabilityMap, accordianMessageArray, userQuestionTime, finalInput, isFirstQuestionSent),\n onStreamEnd: (data: any) => { setIsStreaming(false); },\n onError: (error: any) => console.error('Stream error:', error)\n };\n\n if (userInput?.trim() !== '' || userInputParam?.trim()) {\n setMessageLoading(true);\n textAreaRef.current?.blur();\n setUserInput('');\n scrollToBottom()\n const loadingMessage = `Thanks for sharing your thoughts. I'm putting together the most helpful suggestions now, so we can make sure this really fits your needs.`;\n const loadingMessageWords = loadingMessage.split(' ');\n let concatStr = '';\n\n for (let index = 0; index < loadingMessageWords.length; index++) {\n setTimeout(() => {\n concatStr += loadingMessageWords[index] + ' ';\n setInitialLoadingMessage(concatStr.trim());\n }, 25 * index);\n }\n startChatStream(params);\n }\n }\n\n // Handle merge learning trigger - send message to chat when triggered\n const processedMergeTriggers = useRef<Set<string>>(new Set());\n\n useEffect(() => {\n if (mergeLearningTrigger && !isStreaming) {\n // Prevent duplicate processing of the same trigger\n if (processedMergeTriggers.current.has(mergeLearningTrigger)) {\n console.log('[ChatComponent] ⚠️ Duplicate merge trigger ignored:', mergeLearningTrigger);\n return;\n }\n\n console.log('[ChatComponent] 🔴 MERGE TRIGGER RECEIVED:', mergeLearningTrigger);\n processedMergeTriggers.current.add(mergeLearningTrigger);\n\n // Find the learning data to generate the merge message\n // Look in learningWtaResponse for the learning with this ID\n let learningToMerge = null;\n let sequentialLabel = 'A'; // default fallback\n\n if (learningWtaResponse?.similar_learnings) {\n const similarLearnings = Object.values(learningWtaResponse.similar_learnings);\n const learningIndex = similarLearnings.findIndex((learning: any) => learning?.id === mergeLearningTrigger);\n\n if (learningIndex !== -1) {\n learningToMerge = similarLearnings[learningIndex];\n sequentialLabel = String.fromCharCode(65 + learningIndex); // A, B, C, etc.\n }\n }\n\n if (learningToMerge) {\n // Generate the merge message\n const mergeMessage = `Merge Similar Learning ${sequentialLabel} with current learning`;\n console.log('[ChatComponent] ✅ Sending merge message to chat:', mergeMessage);\n\n // Send the merge message using handleStream\n handleStream(new KeyboardEvent('keydown', { key: 'Enter' }), false, mergeMessage);\n console.log('[ChatComponent] Message sent successfully');\n } else {\n console.log('[ChatComponent] ❌ Learning not found for ID:', mergeLearningTrigger);\n }\n\n // Clear the trigger after processing\n if (setMergeLearningTrigger) {\n setMergeLearningTrigger(null);\n console.log('[ChatComponent] Trigger cleared');\n }\n } else if (mergeLearningTrigger && isStreaming) {\n console.log('[ChatComponent] ⚠️ Merge trigger received but streaming in progress:', mergeLearningTrigger);\n }\n }, [mergeLearningTrigger, isStreaming, setMergeLearningTrigger]);\n\n const markdownComponents = useMemo(() => ({\n img: ({ node, ...props }: any) => (\n <img\n {...props}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'contain', // To handle aspect ratio\n }}\n alt={props?.alt || ''}\n className=\"w-full sm:max-w-lg md:max-w-2xl lg:max-w-4xl mx-auto\"\n />\n ), p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'block', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n marginBottom: '1rem', // Equivalent to Tailwind 'mb-4'\n marginTop: '10px',\n }}\n >\n {props?.children}\n </p>\n );\n },\n code: ({ node, ...props }: any) => {\n return (\n <span\n {...props}\n style={{\n maxWidth: '100%',\n wordWrap: 'break-word', // Ensures long words wrap\n overflowWrap: 'break-word', // Alternative for word wrapping\n wordBreak: 'break-word', // Force breaking long unbreakable strings\n whiteSpace: 'normal', // Default wrapping behavior\n overflow: 'hidden', // Hides any unexpected overflow\n display: 'inline-flex', // Ensures proper behavior of p tags\n fontSize: '1rem', // Equivalent to Tailwind 'text-base'\n lineHeight: '1.625rem', // Equivalent to Tailwind 'leading-relaxed'\n }}\n >\n {props?.children}\n </span>\n );\n },\n ol: ({ node, ...props }: any) => {\n return (\n <ol\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ol>\n );\n },\n ul: ({ node, ...props }: any) => {\n return (\n <ul\n {...props}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '1rem',\n listStyle: 'decimal',\n paddingLeft: '2.5rem'\n }}\n >\n {props?.children}\n </ul>\n );\n },\n wta: ({ node, ...props }: any) => {\n const key = props.key || props['data-key']; // fallback\n const label = props.label || props.children || 'Unknown label';\n\n const addWhenToApplyCondition = (text: string, isToggleOn: boolean) => {\n const cleanText = Array.isArray(text) ? text[0] : text;\n\n if (selectedWTA?.length) {\n setShowSelectedWTA(true)\n } else {\n setShowSelectedWTA(true)\n }\n\n setSelectedWTA((prev: string[]) => {\n if (isToggleOn) {\n // Add only if not already present\n if (!prev.includes(cleanText)) {\n return [...prev, cleanText];\n }\n return prev;\n } else {\n // Remove if present\n return prev.filter((item) => item !== cleanText);\n }\n });\n }\n\n return (\n <ToggleSelector label={label} onToggle={(text: string, isToggleOn: any) => { addWhenToApplyCondition(text, isToggleOn) }} />\n );\n }\n\n }), []);\n\n\n return (\n <div className={defaultStyles.customFont} style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', fontFamily: 'Plus Jakarta Sans, sans-serif', backgroundColor: '#fbfaff', border: '1px solid #d1d5db', overflow: 'hidden' }}>\n <div style={{ width: '100%', height: '100%', backgroundColor: '#fbfaff', maxWidth: '100%', overflow: 'hidden' }}>\n <div ref={chatHeaderRef}>\n <ChatHeader resetChatHistory={resetChatHistory} isStreamEnd={isStreamEnd} />\n </div>\n\n <div style={{ width: '100%', height: availableHeight, maxHeight: availableHeight, overflowY: 'auto', backgroundColor: '#fbfaff' }} ref={scrollContainerRef}>\n <div\n className='welcome-message'\n style={{\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '0.5rem', // Adds breathing space on all sides\n paddingTop: '1rem',\n maxWidth: '70%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n fontWeight: '700',\n textAlign: 'left'\n }}\n >\n <span>I'm here to help fine-tune your learning so it works as accurately as it should.</span>\n </div>\n\n {/* { //@ts-ignore\n <ReactMarkdown components={markdownComponents} rehypePlugins={[rehypeRaw]}>{markdown4}</ReactMarkdown>\n } */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n fontFamily: 'inherit',\n padding: '16px 10px 0px 16px',\n maxWidth: '80%'\n }}\n >\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.3rem' }}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', fontWeight: 400, color: '#000' }}>\n <div\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n }}\n >\n <span><ReactMarkdown components={{\n p: ({ node, ...props }: any) => {\n return (\n <p\n {...props}\n style={{\n margin: 0\n }}\n >\n {props?.children}\n </p>\n );\n }\n }}>{welcomeMessage}</ReactMarkdown></span>\n </div>\n </div>\n </div>\n {messages.length\n ? messages.map((message: any, index) => (\n <div style={{ display: 'flex', padding: '0.5rem 1rem', maxWidth: '100%' }}>\n {message?.role == 'assistant' && (<div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.5rem', marginRight: '1rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>)}\n <div style={{ width: '100%' }}>\n {message.role === 'assistant' && message.orchestratorAndAgentsMessages && message.orchestratorAndAgentsMessages.length > 0 &&\n (<MinimizedThinkingSteps orchestratorAndAgentsMessages={message?.orchestratorAndAgentsMessages} isStreamEnd={isStreamEnd} isCurrentMessage={index === messages.length - 1} ThinkingBulbIconComponent={ThinkingBulbIconComponent} />)}\n {/* <div style={{border:'1px solid red'}}> */}\n\n {//@ts-ignore\n message?.role === 'assistant' ? <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} /> : <span></span>}\n\n <div style={{\n display: 'flex', justifyContent: 'flex-end',\n // backgroundColor: '#8694A10D', padding: \"1rem\"\n }}>\n {(message.role === 'user') ?\n <div style={{ backgroundColor: '#8694A10D', padding: \"0 1rem\", borderRadius: '8px', maxWidth: '80%' }}>\n <MessageRendering index={index} content={message?.content} messages={messages} handleStream={handleStream} scrollToBottom={scrollToBottom} />\n </div> : <span></span>}\n </div>\n {/* </div> */}\n </div>\n\n </div>\n )) : showWelcomeMessage && (\n <></>\n )\n }\n\n {messageLoading && (\n <div style={{ display: \"flex\", padding: '16px 16px 0px 16px' }}>\n <div style={{ maxHeight: `32px`, maxWidth: `32px`, marginTop: '0.2rem' }}>\n {/* {ChatIconComponent ? ChatIconComponent : <img\n src={chatAssistantLogoUrl}\n alt=\"Assistant Logo\"\n width=\"32px\"\n height=\"32px\"\n />} */}\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"bi:stars\" clip-path=\"url(#clip0_6004_60631)\">\n <path id=\"Vector\" d=\"M11.4867 9.37021C11.6517 8.87521 12.3507 8.87521 12.5157 9.37021L13.4832 12.2757C13.6961 12.9144 14.0549 13.4947 14.5311 13.9707C15.0073 14.4466 15.5879 14.8051 16.2267 15.0177L19.1307 15.9852C19.6257 16.1502 19.6257 16.8492 19.1307 17.0142L16.2252 17.9817C15.5865 18.1947 15.0062 18.5535 14.5302 19.0297C14.0543 19.5059 13.6958 20.0864 13.4832 20.7252L12.5157 23.6292C12.4801 23.7376 12.4112 23.832 12.3188 23.8989C12.2264 23.9658 12.1153 24.0019 12.0012 24.0019C11.8871 24.0019 11.7759 23.9658 11.6835 23.8989C11.5912 23.832 11.5223 23.7376 11.4867 23.6292L10.5192 20.7237C10.3064 20.0852 9.9478 19.505 9.47187 19.029C8.99594 18.5531 8.41572 18.1945 7.77718 17.9817L4.87168 17.0142C4.76329 16.9786 4.6689 16.9097 4.60198 16.8173C4.53506 16.725 4.49904 16.6138 4.49904 16.4997C4.49904 16.3856 4.53506 16.2745 4.60198 16.1821C4.6689 16.0897 4.76329 16.0208 4.87168 15.9852L7.77718 15.0177C8.41572 14.8049 8.99594 14.4463 9.47187 13.9704C9.9478 13.4945 10.3064 12.9142 10.5192 12.2757L11.4867 9.37021ZM5.69218 1.72171C5.71369 1.65675 5.75512 1.60022 5.8106 1.56016C5.86607 1.52009 5.93275 1.49853 6.00118 1.49853C6.06961 1.49853 6.13629 1.52009 6.19176 1.56016C6.24724 1.60022 6.28867 1.65675 6.31018 1.72171L6.89068 3.46471C7.15018 4.24171 7.75918 4.85071 8.53618 5.11021L10.2792 5.69071C10.3441 5.71222 10.4007 5.75365 10.4407 5.80912C10.4808 5.86459 10.5024 5.93128 10.5024 5.99971C10.5024 6.06813 10.4808 6.13482 10.4407 6.19029C10.4007 6.24576 10.3441 6.2872 10.2792 6.30871L8.53618 6.88921C8.15274 7.01647 7.80431 7.23149 7.51864 7.51717C7.23296 7.80284 7.01794 8.15127 6.89068 8.53471L6.31018 10.2777C6.28867 10.3427 6.24724 10.3992 6.19176 10.4393C6.13629 10.4793 6.06961 10.5009 6.00118 10.5009C5.93275 10.5009 5.86607 10.4793 5.8106 10.4393C5.75512 10.3992 5.71369 10.3427 5.69218 10.2777L5.11168 8.53471C4.98442 8.15127 4.7694 7.80284 4.48372 7.51717C4.19805 7.23149 3.84962 7.01647 3.46618 6.88921L1.72318 6.30871C1.65822 6.2872 1.60169 6.24576 1.56163 6.19029C1.52156 6.13482 1.5 6.06813 1.5 5.99971C1.5 5.93128 1.52156 5.86459 1.56163 5.80912C1.60169 5.75365 1.65822 5.71222 1.72318 5.69071L3.46618 5.11021C3.84962 4.98295 4.19805 4.76792 4.48372 4.48225C4.7694 4.19657 4.98442 3.84815 5.11168 3.46471L5.69218 1.72171ZM16.2957 0.148207C16.3105 0.105497 16.3382 0.068461 16.3751 0.0422495C16.4119 0.016038 16.456 0.00195312 16.5012 0.00195312C16.5464 0.00195313 16.5905 0.016038 16.6273 0.0422495C16.6641 0.068461 16.6919 0.105497 16.7067 0.148207L17.0937 1.30921C17.2662 1.82821 17.6727 2.23471 18.1917 2.40721L19.3527 2.79421C19.3954 2.80901 19.4324 2.83676 19.4586 2.87359C19.4848 2.91042 19.4989 2.9545 19.4989 2.99971C19.4989 3.04491 19.4848 3.08899 19.4586 3.12582C19.4324 3.16265 19.3954 3.1904 19.3527 3.20521L18.1917 3.59221C17.9361 3.67771 17.7039 3.82139 17.5134 4.01193C17.3229 4.20247 17.1792 4.43467 17.0937 4.69021L16.7067 5.85121C16.6919 5.89392 16.6641 5.93095 16.6273 5.95717C16.5905 5.98338 16.5464 5.99746 16.5012 5.99746C16.456 5.99746 16.4119 5.98338 16.3751 5.95717C16.3382 5.93095 16.3105 5.89392 16.2957 5.85121L15.9087 4.69021C15.8232 4.43467 15.6795 4.20247 15.489 4.01193C15.2984 3.82139 15.0662 3.67771 14.8107 3.59221L13.6512 3.20521C13.6085 3.1904 13.5714 3.16265 13.5452 3.12582C13.519 3.08899 13.5049 3.04491 13.5049 2.99971C13.5049 2.9545 13.519 2.91042 13.5452 2.87359C13.5714 2.83676 13.6085 2.80901 13.6512 2.79421L14.8122 2.40721C15.3312 2.23471 15.7377 1.82821 15.9102 1.30921L16.2957 0.148207Z\" fill=\"#5928ed\" />\n </g>\n <defs>\n <clipPath id=\"clip0_6004_60631\">\n <rect width=\"24\" height=\"24\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </div>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start', // Align text to the top for better multi-line flow\n paddingLeft: '1rem', // Adds breathing space on all sides\n paddingRight: '1rem',\n paddingBottom: '1rem',\n width: '100%',\n maxWidth: '100%',\n fontSize: '1rem', // Base readable font\n lineHeight: '1.75rem', // Slightly more relaxed line height\n marginBottom: '1rem',\n borderRadius: '0.5rem', // Subtle rounding for readability\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap', // Preserves newlines while allowing wrap\n color: '#333', // Softer text color for contrast\n // fontWeight: 500\n }}\n >\n <span>{initialLoadingMessage}</span>\n </div>\n </div>\n )}\n </div>\n </div>\n <div\n style={{\n width: '95%',\n height: 'content-fit',\n backgroundColor: '#fbfaff',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'end',\n position: 'relative',\n }}\n >\n {/* Floating Down Button */}\n <div\n style={{\n visibility: isVisible ? 'visible' : 'hidden',\n position: 'absolute',\n top: '-3rem',\n zIndex: 0,\n pointerEvents: 'none', // allows clicks to pass through\n }}\n >\n <button\n onClick={scrollToBottom}\n style={{\n borderRadius: '9999px',\n padding: 0,\n backgroundColor: '#fff',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n border: '1px solid #d1d5db',\n pointerEvents: 'auto',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1,\n height: '2.25rem',\n width: '2.25rem',\n margin: '0.3rem'\n }}\n >\n <svg\n fill=\"#000000\"\n width=\"16px\"\n height=\"16px\"\n viewBox=\"0 0 24 24\"\n id=\"down\"\n data-name=\"Flat Color\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n id=\"primary\"\n d=\"M19.71,13.29a1,1,0,0,0-1.42,0L13,18.59V3a1,1,0,0,0-2,0V18.59l-5.29-5.3a1,1,0,0,0-1.42,1.42l7,7a1,1,0,0,0,1.42,0l7-7A1,1,0,0,0,19.71,13.29Z\"\n ></path>\n </svg>\n </button>\n </div>\n\n {/* Textarea and Send Button */}\n <div\n style={{\n width: '100%',\n backgroundColor: '#fff',\n display: 'flex',\n alignItems: 'end',\n gap: '0.5rem',\n border: '1px solid #E5E7EB',\n borderRadius: '8px',\n }}\n >\n\n <div style={{ width: '100%', display: 'flex' }}>\n <textarea\n ref={textAreaRef}\n placeholder=\"Tell me more about this learning...\"\n value={userInput || ''}\n onChange={(e) => setUserInput(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={(e) => handleStream(e)}\n style={{\n flexGrow: 1,\n padding: '0.5rem',\n borderRadius: '0.5rem',\n border: 'none',\n fontSize: '1rem',\n lineHeight: '1.5rem',\n resize: 'none',\n backgroundColor: '#fff',\n color: 'inherit',\n // cursor: 'text',\n minHeight: isFocused ? '120px' : '50px',\n height: isFocused ? '120px' : '50px',\n maxHeight: '120px',\n overflowY: 'auto',\n fontFamily: 'inherit',\n outline: 'none',\n transition: 'min-height 0.3s ease, background-color 0.3s ease',\n boxSizing: 'border-box',\n }}\n />\n <span style={{ display: 'flex', flexDirection: 'column', justifyContent: 'end', alignItems: 'end' }}> {/* span wrapper is required because Tooltip doesn't work on disabled buttons directly */}\n <button\n onClick={(e) => { handleStream(new KeyboardEvent('keydown', { key: 'Enter' })) }}\n disabled={isInputEmpty} //!areAllrequiredFieldsFilled\n style={{\n padding: '0.5rem 0.75rem',\n borderRadius: '0.375rem',\n border: 'none',\n backgroundColor: 'white',\n color: isInputEmpty ? '#d1d5db' : '#5928ed',\n fontWeight: 'bold',\n fontSize: '1rem',\n cursor: isInputEmpty ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.3s, color 0.3s',\n height: '50px',\n }}\n >\n <SendButton />\n </button>\n </span>\n </div>\n </div>\n </div>\n <div style={{ width: '95%', display: 'flex', gap: '0.25rem', flexDirection: 'row' }}>\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 style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"speaker\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\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 style={{ width: '50%' }}>\n <AudioWaveform amplitude={1}\n variant=\"microphone\"\n isActive={false}\n onClick={() => null}\n disabled={false} />\n </span>\n </Tooltip>\n </div>\n </div >\n )\n}\n\nexport default ChatComponent\n"],"names":["defaultStyles","uuidv4","scrollContainer","messages","_a","_b","setSuggestedWta","parsedSave"],"mappings":"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"}