Shreyas094's picture
Upload 528 files
372531f verified
import React, { useState, useEffect } from 'react';
import ResearchForm from '../Task/ResearchForm';
import Report from '../Task/Report';
import AgentLogs from '../Task/AgentLogs';
import AccessReport from '../ResearchBlocks/AccessReport';
interface ChatBoxSettings {
report_source: string;
report_type: string;
tone: string;
}
interface ChatBoxProps {
chatBoxSettings: ChatBoxSettings;
setChatBoxSettings: React.Dispatch<React.SetStateAction<ChatBoxSettings>>;
}
interface OutputData {
pdf?: string;
docx?: string;
json?: string;
}
interface WebSocketMessage {
type: 'logs' | 'report' | 'path';
output: string | OutputData;
}
export default function ChatBox({ chatBoxSettings, setChatBoxSettings }: ChatBoxProps) {
const [agentLogs, setAgentLogs] = useState<any[]>([]);
const [report, setReport] = useState("");
const [accessData, setAccessData] = useState({});
const [socket, setSocket] = useState<WebSocket | null>(null);
useEffect(() => {
if (typeof window !== 'undefined') {
const { protocol, pathname } = window.location;
let { host } = window.location;
host = host.includes('localhost') ? 'localhost:8000' : host;
const ws_uri = `${protocol === 'https:' ? 'wss:' : 'ws:'}//${host}${pathname}ws`;
const newSocket = new WebSocket(ws_uri);
setSocket(newSocket);
newSocket.onmessage = (event) => {
const data = JSON.parse(event.data) as WebSocketMessage;
if (data.type === 'logs') {
setAgentLogs((prevLogs: any[]) => [...prevLogs, data]);
} else if (data.type === 'report') {
setReport((prevReport: string) => prevReport + (data.output as string));
} else if (data.type === 'path') {
const output = data.output as OutputData;
setAccessData({
...(output.pdf && { pdf: `outputs/${output.pdf}` }),
...(output.docx && { docx: `outputs/${output.docx}` }),
...(output.json && { json: `outputs/${output.json}` })
});
}
};
return () => {
newSocket.close();
};
}
}, []);
return (
<div>
<main className="container" id="form">
<ResearchForm
chatBoxSettings={chatBoxSettings}
setChatBoxSettings={setChatBoxSettings}
/>
{agentLogs?.length > 0 ? <AgentLogs agentLogs={agentLogs} /> : ''}
<div className="margin-div">
{report ? <Report report={report} /> : ''}
{Object.keys(accessData).length > 0 &&
<AccessReport
accessData={accessData}
chatBoxSettings={chatBoxSettings}
report={report}
/>
}
</div>
</main>
</div>
);
}