import React, { useState, useEffect } from 'react'; import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from './ui/card'; import { Button } from './ui/button'; import { Badge } from './ui/badge'; import { Input } from './ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; import { Alert, AlertDescription, AlertTitle } from './ui/alert'; import { Progress } from './ui/progress'; import { Separator } from './ui/separator'; import { Users, Play, Pause, Square, Settings, Clock, TrendingUp, Activity, CheckCircle, AlertTriangle, XCircle, RefreshCw, Eye, Cpu, Zap, Target, BarChart3, Timer, DollarSign, Shield, Network, Layers } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; import { useWallet } from '@/hooks/use-wallet'; interface AgentCapability { agentId: string; supportedTaskTypes: string[]; gpuTier: string; maxConcurrentTasks: number; currentLoad: number; performanceScore: number; costPerHour: number; reliabilityScore: number; status: 'available' | 'busy' | 'offline' | 'maintenance'; lastUpdated: string; } interface OrchestrationPlan { taskId: string; subTasks: Array<{ subTaskId: string; name: string; status: string; assignedAgent?: string; requirements: { taskType: string; estimatedDuration: number; gpuTier: string; memoryRequirement: number; computeIntensity: number; }; }>; agentAssignments: Array<{ subTaskId: string; agentId: string; status: string; assignedAt: string; startedAt?: string; completedAt?: string; }>; executionTimeline: Record; resourceRequirements: Record; estimatedCost: number; confidenceScore: number; createdAt: string; } interface OrchestrationMetrics { orchestratorStatus: string; activePlans: number; completedPlans: number; failedPlans: number; registeredAgents: number; availableAgents: number; metrics: { totalTasks: number; successfulTasks: number; failedTasks: number; averageExecutionTime: number; averageCost: number; agentUtilization: number; }; resourceUtilization: Record; } const AgentOrchestration: React.FC = () => { const { toast } = useToast(); const { isConnected, address } = useWallet(); const [agents, setAgents] = useState([]); const [orchestrationPlans, setOrchestrationPlans] = useState([]); const [selectedPlan, setSelectedPlan] = useState(null); const [metrics, setMetrics] = useState(null); const [activeTab, setActiveTab] = useState('overview'); const [loading, setLoading] = useState(true); const [orchestrating, setOrchestrating] = useState(false); // Form states const [taskDescription, setTaskDescription] = useState(''); const [taskType, setTaskType] = useState('mixed_modal'); const [priority, setPriority] = useState('medium'); const [maxBudget, setMaxBudget] = useState('0.5'); const [deadline, setDeadline] = useState(''); // Mock data for demonstration const mockAgents: AgentCapability[] = [ { agentId: 'agent_001', supportedTaskTypes: ['text_processing', 'data_analysis'], gpuTier: 'mid_range_gpu', maxConcurrentTasks: 3, currentLoad: 1, performanceScore: 0.85, costPerHour: 0.05, reliabilityScore: 0.92, status: 'available', lastUpdated: '2024-01-26T16:45:00Z' }, { agentId: 'agent_002', supportedTaskTypes: ['image_processing', 'model_inference'], gpuTier: 'high_end_gpu', maxConcurrentTasks: 2, currentLoad: 2, performanceScore: 0.92, costPerHour: 0.09, reliabilityScore: 0.88, status: 'busy', lastUpdated: '2024-01-26T16:50:00Z' }, { agentId: 'agent_003', supportedTaskTypes: ['compute_intensive', 'model_training'], gpuTier: 'premium_gpu', maxConcurrentTasks: 1, currentLoad: 0, performanceScore: 0.96, costPerHour: 0.15, reliabilityScore: 0.95, status: 'available', lastUpdated: '2024-01-26T16:40:00Z' }, { agentId: 'agent_004', supportedTaskTypes: ['audio_processing', 'video_processing'], gpuTier: 'high_end_gpu', maxConcurrentTasks: 2, currentLoad: 0, performanceScore: 0.78, costPerHour: 0.08, reliabilityScore: 0.85, status: 'available', lastUpdated: '2024-01-26T16:35:00Z' }, { agentId: 'agent_005', supportedTaskTypes: ['io_bound', 'data_processing'], gpuTier: 'cpu_only', maxConcurrentTasks: 5, currentLoad: 3, performanceScore: 0.72, costPerHour: 0.02, reliabilityScore: 0.90, status: 'busy', lastUpdated: '2024-01-26T16:55:00Z' } ]; const mockPlans: OrchestrationPlan[] = [ { taskId: 'task_001', subTasks: [ { subTaskId: 'subtask_001', name: 'Data Preprocessing', status: 'completed', assignedAgent: 'agent_001', requirements: { taskType: 'data_analysis', estimatedDuration: 0.5, gpuTier: 'mid_range_gpu', memoryRequirement: 4, computeIntensity: 0.3 } }, { subTaskId: 'subtask_002', name: 'Model Inference', status: 'in_progress', assignedAgent: 'agent_002', requirements: { taskType: 'model_inference', estimatedDuration: 1.5, gpuTier: 'high_end_gpu', memoryRequirement: 8, computeIntensity: 0.8 } }, { subTaskId: 'subtask_003', name: 'Result Aggregation', status: 'pending', requirements: { taskType: 'data_analysis', estimatedDuration: 0.3, gpuTier: 'cpu_only', memoryRequirement: 2, computeIntensity: 0.2 } } ], agentAssignments: [ { subTaskId: 'subtask_001', agentId: 'agent_001', status: 'completed', assignedAt: '2024-01-26T14:00:00Z', startedAt: '2024-01-26T14:00:00Z', completedAt: '2024-01-26T14:30:00Z' }, { subTaskId: 'subtask_002', agentId: 'agent_002', status: 'in_progress', assignedAt: '2024-01-26T14:30:00Z', startedAt: '2024-01-26T14:35:00Z' } ], executionTimeline: { 'subtask_001': '2024-01-26T14:00:00Z', 'subtask_002': '2024-01-26T14:30:00Z', 'subtask_003': '2024-01-26T16:00:00Z' }, resourceRequirements: { GPU: 2, MEMORY: 14 }, estimatedCost: 0.21, confidenceScore: 0.88, createdAt: '2024-01-26T13:45:00Z' }, { taskId: 'task_002', subTasks: [ { subTaskId: 'subtask_004', name: 'Image Processing', status: 'completed', assignedAgent: 'agent_004', requirements: { taskType: 'image_processing', estimatedDuration: 2.0, gpuTier: 'high_end_gpu', memoryRequirement: 6, computeIntensity: 0.7 } }, { subTaskId: 'subtask_005', name: 'Feature Extraction', status: 'completed', assignedAgent: 'agent_001', requirements: { taskType: 'data_analysis', estimatedDuration: 1.0, gpuTier: 'mid_range_gpu', memoryRequirement: 4, computeIntensity: 0.5 } } ], agentAssignments: [ { subTaskId: 'subtask_004', agentId: 'agent_004', status: 'completed', assignedAt: '2024-01-26T12:00:00Z', startedAt: '2024-01-26T12:05:00Z', completedAt: '2024-01-26T14:05:00Z' }, { subTaskId: 'subtask_005', agentId: 'agent_001', status: 'completed', assignedAt: '2024-01-26T14:05:00Z', startedAt: '2024-01-26T14:10:00Z', completedAt: '2024-01-26T15:10:00Z' } ], executionTimeline: { 'subtask_004': '2024-01-26T12:00:00Z', 'subtask_005': '2024-01-26T14:05:00Z' }, resourceRequirements: { GPU: 2, MEMORY: 10 }, estimatedCost: 0.17, confidenceScore: 0.92, createdAt: '2024-01-26T11:50:00Z' } ]; const mockMetrics: OrchestrationMetrics = { orchestratorStatus: 'monitoring', activePlans: 2, completedPlans: 15, failedPlans: 3, registeredAgents: 5, availableAgents: 3, metrics: { totalTasks: 20, successfulTasks: 17, failedTasks: 3, averageExecutionTime: 2.5, averageCost: 0.18, agentUtilization: 0.65 }, resourceUtilization: { GPU: 0.75, MEMORY: 0.60, CPU: 0.45 } }; useEffect(() => { // Load mock data setTimeout(() => { setAgents(mockAgents); setOrchestrationPlans(mockPlans); setMetrics(mockMetrics); if (mockPlans.length > 0) { setSelectedPlan(mockPlans[0]); } setLoading(false); }, 1000); }, []); const handleOrchestrateTask = async () => { if (!isConnected) { toast({ title: "Wallet Not Connected", description: "Please connect your wallet to orchestrate tasks", variant: "destructive" }); return; } if (!taskDescription || !taskType || !maxBudget) { toast({ title: "Missing Information", description: "Please fill in all task details", variant: "destructive" }); return; } try { setOrchestrating(true); toast({ title: "Orchestrating Task", description: "Decomposing task and assigning agents...", variant: "default" }); // Simulate orchestration await new Promise(resolve => setTimeout(resolve, 3000)); // Create new plan const newPlan: OrchestrationPlan = { taskId: `task_${Date.now()}`, subTasks: [ { subTaskId: `subtask_${Date.now()}_1`, name: 'Initial Processing', status: 'pending', requirements: { taskType: taskType, estimatedDuration: 1.0, gpuTier: 'mid_range_gpu', memoryRequirement: 4, computeIntensity: 0.5 } }, { subTaskId: `subtask_${Date.now()}_2`, name: 'Main Computation', status: 'pending', requirements: { taskType: taskType, estimatedDuration: 2.0, gpuTier: 'high_end_gpu', memoryRequirement: 8, computeIntensity: 0.8 } } ], agentAssignments: [], executionTimeline: {}, resourceRequirements: { GPU: 2, MEMORY: 12 }, estimatedCost: parseFloat(maxBudget) * 0.8, confidenceScore: 0.85, createdAt: new Date().toISOString() }; setOrchestrationPlans([newPlan, ...orchestrationPlans]); setSelectedPlan(newPlan); setActiveTab('plans'); // Reset form setTaskDescription(''); setTaskType('mixed_modal'); setPriority('medium'); setMaxBudget('0.5'); setDeadline(''); toast({ title: "Task Orchestrated", description: "Task has been decomposed and agents assigned", variant: "default" }); } catch (error) { toast({ title: "Orchestration Failed", description: "There was an error orchestrating the task", variant: "destructive" }); } finally { setOrchestrating(false); } }; const handleCancelPlan = async (taskId: string) => { try { toast({ title: "Cancelling Plan", description: "Cancelling orchestration plan...", variant: "default" }); // Remove plan setOrchestrationPlans(orchestrationPlans.filter(plan => plan.taskId !== taskId)); if (selectedPlan?.taskId === taskId) { setSelectedPlan(null); } toast({ title: "Plan Cancelled", description: "Orchestration plan has been cancelled", variant: "default" }); } catch (error) { toast({ title: "Cancellation Failed", description: "There was an error cancelling the plan", variant: "destructive" }); } }; const getStatusColor = (status: string) => { switch (status) { case 'completed': return 'bg-green-500'; case 'in_progress': return 'bg-blue-500'; case 'pending': return 'bg-yellow-500'; case 'failed': return 'bg-red-500'; case 'cancelled': return 'bg-gray-500'; default: return 'bg-gray-400'; } }; const getAgentStatusColor = (status: string) => { switch (status) { case 'available': return 'bg-green-500'; case 'busy': return 'bg-blue-500'; case 'offline': return 'bg-red-500'; case 'maintenance': return 'bg-yellow-500'; default: return 'bg-gray-400'; } }; const getOverallPlanStatus = (plan: OrchestrationPlan) => { const completedCount = plan.subTasks.filter(st => st.status === 'completed').length; const failedCount = plan.subTasks.filter(st => st.status === 'failed').length; const totalCount = plan.subTasks.length; if (completedCount === totalCount) return 'completed'; if (failedCount > 0) return 'failed'; if (completedCount > 0) return 'in_progress'; return 'pending'; }; if (loading) { return (

Loading orchestration system...

); } return (

Agent Orchestration

Multi-agent coordination and task orchestration system

{metrics?.registeredAgents} Agents {metrics?.activePlans} Active Plans {metrics?.availableAgents} Available
Overview Agents Plans Orchestrate Metrics {/* System Status */}
Total Agents
{metrics?.registeredAgents}

{metrics?.availableAgents} available

Active Plans
{metrics?.activePlans}

{metrics?.completedPlans} completed

Avg Execution
{metrics?.metrics.averageExecutionTime}h

Per task

Avg Cost
{metrics?.metrics.averageCost} AITBC

Per task

{/* Resource Utilization */} Resource Utilization Current system resource usage
{Object.entries(metrics?.resourceUtilization || {}).map(([resource, utilization]) => (

{resource}

{(utilization * 100).toFixed(0)}%
))}
{/* Recent Plans */} Recent Orchestration Plans Latest task orchestration activities
{orchestrationPlans.slice(0, 3).map((plan) => (

{plan.taskId}

{plan.subTasks.length} sub-tasks • {plan.estimatedCost} AITBC

{getOverallPlanStatus(plan)}

{new Date(plan.createdAt).toLocaleDateString()}

))}
{/* Agent Registry */}
{agents.map((agent) => (
{agent.agentId} {agent.supportedTaskTypes.join(', ')}
GPU Tier:

{agent.gpuTier.replace('_', ' ')}

Load:

{agent.currentLoad}/{agent.maxConcurrentTasks}

Performance:

{(agent.performanceScore * 100).toFixed(0)}%

Cost:

{agent.costPerHour} AITBC/h

Reliability: {(agent.reliabilityScore * 100).toFixed(0)}%
{agent.status}

{new Date(agent.lastUpdated).toLocaleTimeString()}

))}
{/* Plan Selection */}
{/* Plans List */} Orchestration Plans Active and recent orchestration plans
{orchestrationPlans.map((plan) => (
setSelectedPlan(plan)} >

{plan.taskId}

Sub-tasks: {plan.subTasks.length}
Est. Cost: {plan.estimatedCost} AITBC
Created: {new Date(plan.createdAt).toLocaleDateString()}
{getOverallPlanStatus(plan)} {(plan.confidenceScore * 100).toFixed(0)}% confidence
))}
{/* Plan Details */} {selectedPlan && ( {selectedPlan.taskId} Detailed orchestration plan information {/* Plan Overview */}

Total Sub-tasks

{selectedPlan.subTasks.length}

Estimated Cost

{selectedPlan.estimatedCost} AITBC

Confidence Score

{(selectedPlan.confidenceScore * 100).toFixed(1)}%

Created

{new Date(selectedPlan.createdAt).toLocaleDateString()}

{/* Sub-tasks */}

Sub-tasks

{selectedPlan.subTasks.map((subTask) => (
{subTask.name}
Type:

{subTask.requirements.taskType}

Duration:

{subTask.requirements.estimatedDuration}h

GPU:

{subTask.requirements.gpuTier.replace('_', ' ')}

Memory:

{subTask.requirements.memoryRequirement}GB

{subTask.assignedAgent && (
Assigned to:

{subTask.assignedAgent}

)}
))}
{/* Actions */}
)}
{/* Task Orchestration Form */} Orchestrate New Task Create a new orchestration plan for complex task execution