AGENTIC_InsurTech / GradioInterface.tsx
designfailure's picture
Upload 22 files
eb9b2b9 verified
import React, { useState } from 'react';
import { Upload, MessageSquare } from 'lucide-react';
import { AgentCard } from '../components/AgentCard';
import { ChatMessage } from '../components/ChatMessage';
import { processFile } from '../utils/fileProcessing';
interface Message {
content: string;
sender: 'user' | 'agent';
timestamp: Date;
}
export default function GradioInterface() {
const [messages, setMessages] = useState<Message[]>([]);
const [inputText, setInputText] = useState('');
const [agents] = useState([
{
config: {
name: 'MGA Analyst',
goal: 'Analyze insurance queries and delegate tasks',
backstory: 'Expert executive-director agent'
},
status: 'idle' as const
},
{
config: {
name: 'Underwriter',
goal: 'Evaluate risks and recommend policies',
backstory: 'Expert risk assessor'
},
status: 'idle' as const
}
]);
const handleFileUpload = async (event: React.ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0];
if (file) {
const processedFile = await processFile(file);
setMessages(prev => [...prev, {
content: `File uploaded: ${file.name}`,
sender: 'user',
timestamp: new Date()
}]);
}
};
const handleSendMessage = () => {
if (inputText.trim()) {
setMessages(prev => [...prev, {
content: inputText,
sender: 'user',
timestamp: new Date()
}]);
setInputText('');
}
};
return (
<div className="min-h-screen bg-gray-50">
<div className="container mx-auto px-4 py-8">
<div className="grid grid-cols-12 gap-6">
<div className="col-span-8 bg-white rounded-lg shadow-lg p-6">
<div className="flex flex-col h-[600px]">
<div className="flex-1 overflow-y-auto mb-4">
{messages.map((msg, idx) => (
<ChatMessage key={idx} {...msg} />
))}
</div>
<div className="flex gap-4">
<label className="flex items-center px-4 py-2 bg-blue-600 text-white rounded-lg cursor-pointer">
<Upload className="w-5 h-5 mr-2" />
Upload File
<input
type="file"
className="hidden"
onChange={handleFileUpload}
accept=".csv,.xls,.doc,.pdf"
/>
</label>
<input
type="text"
value={inputText}
onChange={(e) => setInputText(e.target.value)}
className="flex-1 px-4 py-2 border rounded-lg"
placeholder="Type your message..."
onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()}
/>
<button
onClick={handleSendMessage}
className="flex items-center px-4 py-2 bg-blue-600 text-white rounded-lg"
>
<MessageSquare className="w-5 h-5 mr-2" />
Send
</button>
</div>
</div>
</div>
<div className="col-span-4 bg-white rounded-lg shadow-lg p-6">
<h2 className="text-xl font-bold mb-4">Agent Status</h2>
{agents.map((agent, idx) => (
<AgentCard key={idx} {...agent} />
))}
</div>
</div>
</div>
</div>
);
}