Spaces:
Paused
Paused
| import { Data } from '../types/data'; | |
| import { consolidateSourceAndImageBlocks } from './consolidateBlocks'; | |
| export const preprocessOrderedData = (data: Data[]) => { | |
| let groupedData: any[] = []; | |
| let currentAccordionGroup: any = null; | |
| let currentSourceGroup: any = null; | |
| let currentReportGroup: any = null; | |
| let finalReportGroup: any = null; | |
| let sourceBlockEncountered = false; | |
| let lastSubqueriesIndex = -1; | |
| const seenUrls = new Set<string>(); | |
| console.log('websocket data before its processed',data) | |
| data.forEach((item: any) => { | |
| const { type, content, metadata, output, link } = item; | |
| if (type === 'question') { | |
| groupedData.push({ type: 'question', content }); | |
| } else if (type === 'report') { | |
| // Start a new report group if we don't have one | |
| if (!currentReportGroup) { | |
| currentReportGroup = { type: 'reportBlock', content: '' }; | |
| groupedData.push(currentReportGroup); | |
| } | |
| currentReportGroup.content += output; | |
| } else if (content === 'selected_images') { | |
| groupedData.push({ type: 'imagesBlock', metadata }); | |
| } else if (type === 'logs' && content === 'research_report') { | |
| if (!finalReportGroup) { | |
| finalReportGroup = { type: 'reportBlock', content: '' }; | |
| groupedData.push(finalReportGroup); | |
| } | |
| finalReportGroup.content += output.report; | |
| } else if (type === 'langgraphButton') { | |
| groupedData.push({ type: 'langgraphButton', link }); | |
| } else if (type === 'chat') { | |
| groupedData.push({ type: 'chat', content: content }); | |
| } else { | |
| if (currentReportGroup) { | |
| currentReportGroup = null; | |
| } | |
| if (content === 'subqueries') { | |
| if (currentAccordionGroup) { | |
| currentAccordionGroup = null; | |
| } | |
| if (currentSourceGroup) { | |
| groupedData.push(currentSourceGroup); | |
| currentSourceGroup = null; | |
| } | |
| groupedData.push(item); | |
| lastSubqueriesIndex = groupedData.length - 1; | |
| } else if (type === 'sourceBlock') { | |
| currentSourceGroup = item; | |
| if (lastSubqueriesIndex !== -1) { | |
| groupedData.splice(lastSubqueriesIndex + 1, 0, currentSourceGroup); | |
| lastSubqueriesIndex = -1; | |
| } else { | |
| groupedData.push(currentSourceGroup); | |
| } | |
| sourceBlockEncountered = true; | |
| currentSourceGroup = null; | |
| } else if (content === 'added_source_url') { | |
| if (!currentSourceGroup) { | |
| currentSourceGroup = { type: 'sourceBlock', items: [] }; | |
| } | |
| if (!seenUrls.has(metadata)) { | |
| seenUrls.add(metadata); | |
| let hostname = ""; | |
| try { | |
| if (typeof metadata === 'string') { | |
| hostname = new URL(metadata).hostname.replace('www.', ''); | |
| } | |
| } catch (e) { | |
| hostname = "unknown"; | |
| } | |
| currentSourceGroup.items.push({ name: hostname, url: metadata }); | |
| } | |
| // Add this block to ensure the source group is added to groupedData | |
| if (currentSourceGroup.items.length > 0 && !groupedData.includes(currentSourceGroup)) { | |
| groupedData.push(currentSourceGroup); | |
| sourceBlockEncountered = true; | |
| } | |
| } else if (type !== 'path' && content !== '') { | |
| if (sourceBlockEncountered) { | |
| if (!currentAccordionGroup) { | |
| currentAccordionGroup = { type: 'accordionBlock', items: [] }; | |
| groupedData.push(currentAccordionGroup); | |
| } | |
| currentAccordionGroup.items.push(item); | |
| } else { | |
| groupedData.push(item); | |
| } | |
| } else { | |
| if (currentAccordionGroup) { | |
| currentAccordionGroup = null; | |
| } | |
| if (currentSourceGroup) { | |
| currentSourceGroup = null; | |
| } | |
| if (currentReportGroup) { | |
| // Find and remove the previous reportBlock | |
| const reportBlockIndex = groupedData.findIndex( | |
| item => item === currentReportGroup | |
| ); | |
| if (reportBlockIndex !== -1) { | |
| groupedData.splice(reportBlockIndex, 1); | |
| } | |
| currentReportGroup = null; // Reset the current report group | |
| } | |
| groupedData.push(item); | |
| } | |
| } | |
| }); | |
| groupedData = consolidateSourceAndImageBlocks(groupedData); | |
| return groupedData; | |
| }; |