-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimplementation_templates.json
More file actions
6 lines (6 loc) · 19.9 KB
/
Copy pathimplementation_templates.json
File metadata and controls
6 lines (6 loc) · 19.9 KB
1
2
3
4
5
6
{
"orchestrator_example": "\n# Multi-Agent Orchestrator Implementation\nimport asyncio\nfrom typing import Dict, List, Any, Optional\nfrom dataclasses import dataclass\nfrom enum import Enum\nimport json\nimport logging\n\nclass AgentType(Enum):\n GPT5 = \"gpt5\"\n CLAUDE_SONNET = \"claude_sonnet\"\n GEMINI_2_5_PRO = \"gemini_2_5_pro\"\n GROK_4 = \"grok_4\"\n\n@dataclass\nclass AgentResult:\n agent_type: AgentType\n result: Any\n confidence: float\n execution_time: float\n metadata: Dict[str, Any]\n\nclass MultiAgentOrchestrator:\n def __init__(self, config: Dict[str, Any]):\n self.config = config\n self.agents = self._initialize_agents()\n self.logger = logging.getLogger(__name__)\n\n def _initialize_agents(self) -> Dict[AgentType, Any]:\n \"\"\"Initialize all agent instances based on configuration\"\"\"\n agents = {}\n for model_key, model_config in self.config[\"models\"].items():\n agent_type = AgentType(model_key)\n agents[agent_type] = self._create_agent(agent_type, model_config)\n return agents\n\n async def execute_parallel(self, task: Dict[str, Any]) -> List[AgentResult]:\n \"\"\"Execute task across multiple agents in parallel\"\"\"\n selected_agents = self._select_agents_for_task(task)\n\n # Create async tasks for each agent\n tasks = []\n for agent_type in selected_agents:\n agent_task = self._create_agent_task(agent_type, task)\n tasks.append(agent_task)\n\n # Execute in parallel with timeout\n try:\n results = await asyncio.wait_for(\n asyncio.gather(*tasks, return_exceptions=True),\n timeout=task.get(\"timeout\", 300)\n )\n return self._process_results(results)\n except asyncio.TimeoutError:\n self.logger.error(\"Task execution timed out\")\n return []\n\n async def consensus_building(self, results: List[AgentResult]) -> AgentResult:\n \"\"\"Build consensus from multiple agent results\"\"\"\n if not results:\n raise ValueError(\"No results to build consensus from\")\n\n # Weighted voting based on confidence scores\n weighted_results = []\n total_weight = 0\n\n for result in results:\n weight = result.confidence\n weighted_results.append((result, weight))\n total_weight += weight\n\n # Select highest confidence result or create synthesis\n if len(results) == 1:\n return results[0]\n\n return self._synthesize_results(weighted_results, total_weight)\n\n def _select_agents_for_task(self, task: Dict[str, Any]) -> List[AgentType]:\n \"\"\"Select appropriate agents based on task requirements\"\"\"\n task_type = task.get(\"type\", \"general\")\n\n # Default selection logic - customize based on needs\n agent_mapping = {\n \"planning\": [AgentType.GPT5],\n \"analysis\": [AgentType.CLAUDE_SONNET, AgentType.GEMINI_2_5_PRO],\n \"research\": [AgentType.GEMINI_2_5_PRO, AgentType.GROK_4],\n \"coding\": [AgentType.CLAUDE_SONNET, AgentType.GPT5],\n \"general\": list(AgentType)\n }\n\n return agent_mapping.get(task_type, [AgentType.GPT5])\n\n# Usage Example\nasync def main():\n # Load configuration\n with open(\"multi_agent_labs_strategy.json\", \"r\") as f:\n config = json.load(f)\n\n # Initialize orchestrator\n orchestrator = MultiAgentOrchestrator(config)\n\n # Example task\n task = {\n \"type\": \"coding\",\n \"description\": \"Create a REST API for user management\",\n \"requirements\": [\"authentication\", \"CRUD operations\", \"validation\"],\n \"timeout\": 300\n }\n\n # Execute parallel processing\n results = await orchestrator.execute_parallel(task)\n\n # Build consensus\n final_result = await orchestrator.consensus_building(results)\n\n print(f\"Final result: {final_result}\")\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n",
"fastapi_backend": "\n# FastAPI Backend for Multi-Agent System\nfrom fastapi import FastAPI, WebSocket, HTTPException, BackgroundTasks\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom pydantic import BaseModel\nfrom typing import Dict, List, Any, Optional\nimport asyncio\nimport json\nimport uuid\nfrom datetime import datetime\n\napp = FastAPI(title=\"Multi-Agent Labs API\", version=\"1.0.0\")\n\n# Add CORS middleware\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"http://localhost:3000\"], # Next.js dev server\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n\n# Pydantic models\nclass TaskRequest(BaseModel):\n type: str\n description: str\n requirements: List[str] = []\n agents: Optional[List[str]] = None\n parallel: bool = True\n timeout: int = 300\n\nclass TaskResponse(BaseModel):\n task_id: str\n status: str\n results: List[Dict[str, Any]] = []\n consensus: Optional[Dict[str, Any]] = None\n created_at: datetime\n completed_at: Optional[datetime] = None\n\n# In-memory storage (use Redis/DB in production)\nactive_tasks: Dict[str, TaskResponse] = {}\ntask_results: Dict[str, List[Dict[str, Any]]] = {}\n\n@app.post(\"/api/tasks\", response_model=TaskResponse)\nasync def create_task(task: TaskRequest, background_tasks: BackgroundTasks):\n \"\"\"Create and execute a new multi-agent task\"\"\"\n task_id = str(uuid.uuid4())\n\n # Create task response\n task_response = TaskResponse(\n task_id=task_id,\n status=\"running\",\n created_at=datetime.now()\n )\n\n active_tasks[task_id] = task_response\n\n # Execute task in background\n background_tasks.add_task(execute_multi_agent_task, task_id, task)\n\n return task_response\n\n@app.get(\"/api/tasks/{task_id}\", response_model=TaskResponse)\nasync def get_task_status(task_id: str):\n \"\"\"Get status of a specific task\"\"\"\n if task_id not in active_tasks:\n raise HTTPException(status_code=404, detail=\"Task not found\")\n\n return active_tasks[task_id]\n\n@app.get(\"/api/tasks\", response_model=List[TaskResponse])\nasync def list_tasks():\n \"\"\"List all tasks\"\"\"\n return list(active_tasks.values())\n\n@app.websocket(\"/ws/{task_id}\")\nasync def websocket_endpoint(websocket: WebSocket, task_id: str):\n \"\"\"WebSocket for real-time task updates\"\"\"\n await websocket.accept()\n\n try:\n while True:\n if task_id in active_tasks:\n task_status = active_tasks[task_id]\n await websocket.send_json({\n \"task_id\": task_id,\n \"status\": task_status.status,\n \"timestamp\": datetime.now().isoformat()\n })\n\n await asyncio.sleep(1) # Send updates every second\n\n except Exception as e:\n print(f\"WebSocket error: {e}\")\n finally:\n await websocket.close()\n\nasync def execute_multi_agent_task(task_id: str, task: TaskRequest):\n \"\"\"Execute multi-agent task (placeholder implementation)\"\"\"\n try:\n # Simulate agent processing\n await asyncio.sleep(2) # Simulate processing time\n\n # Update task status\n active_tasks[task_id].status = \"completed\"\n active_tasks[task_id].completed_at = datetime.now()\n active_tasks[task_id].results = [\n {\"agent\": \"gpt5\", \"result\": \"Planning completed\", \"confidence\": 0.9},\n {\"agent\": \"claude_sonnet\", \"result\": \"Code analysis done\", \"confidence\": 0.85},\n ]\n active_tasks[task_id].consensus = {\n \"final_result\": \"Task completed successfully\",\n \"confidence\": 0.87\n }\n\n except Exception as e:\n active_tasks[task_id].status = \"failed\"\n print(f\"Task {task_id} failed: {e}\")\n\nif __name__ == \"__main__\":\n import uvicorn\n uvicorn.run(app, host=\"0.0.0.0\", port=8000)\n",
"nextjs_frontend": "\n// Next.js Frontend Component for Multi-Agent Dashboard\n// pages/dashboard.tsx\nimport React, { useState, useEffect } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Badge } from '@/components/ui/badge';\nimport { Loader2, Play, Eye, CheckCircle, XCircle } from 'lucide-react';\n\ninterface Task {\n task_id: string;\n status: string;\n type: string;\n description: string;\n created_at: string;\n completed_at?: string;\n results: Array<{\n agent: string;\n result: string;\n confidence: number;\n }>;\n consensus?: {\n final_result: string;\n confidence: number;\n };\n}\n\ninterface AgentStatus {\n name: string;\n status: 'active' | 'idle' | 'error';\n current_task?: string;\n performance: number;\n}\n\nexport default function MultiAgentDashboard() {\n const [tasks, setTasks] = useState<Task[]>([]);\n const [agents, setAgents] = useState<AgentStatus[]>([\n { name: 'GPT-5', status: 'idle', performance: 0.92 },\n { name: 'Claude Sonnet', status: 'idle', performance: 0.88 },\n { name: 'Gemini 2.5 Pro', status: 'idle', performance: 0.85 },\n { name: 'Grok 4', status: 'idle', performance: 0.81 }\n ]);\n\n const [newTask, setNewTask] = useState({\n type: 'general',\n description: '',\n requirements: ''\n });\n\n const [isLoading, setIsLoading] = useState(false);\n\n // Fetch tasks from API\n useEffect(() => {\n fetchTasks();\n const interval = setInterval(fetchTasks, 5000); // Poll every 5 seconds\n return () => clearInterval(interval);\n }, []);\n\n const fetchTasks = async () => {\n try {\n const response = await fetch('/api/tasks');\n const data = await response.json();\n setTasks(data);\n } catch (error) {\n console.error('Failed to fetch tasks:', error);\n }\n };\n\n const createTask = async () => {\n if (!newTask.description.trim()) return;\n\n setIsLoading(true);\n try {\n const response = await fetch('/api/tasks', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...newTask,\n requirements: newTask.requirements.split(',').map(r => r.trim()).filter(Boolean)\n })\n });\n\n if (response.ok) {\n setNewTask({ type: 'general', description: '', requirements: '' });\n fetchTasks();\n }\n } catch (error) {\n console.error('Failed to create task:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const getStatusColor = (status: string) => {\n switch (status) {\n case 'completed': return 'bg-green-500';\n case 'running': return 'bg-blue-500';\n case 'failed': return 'bg-red-500';\n default: return 'bg-gray-500';\n }\n };\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case 'completed': return <CheckCircle className=\"h-4 w-4\" />;\n case 'running': return <Loader2 className=\"h-4 w-4 animate-spin\" />;\n case 'failed': return <XCircle className=\"h-4 w-4\" />;\n default: return <Eye className=\"h-4 w-4\" />;\n }\n };\n\n return (\n <div className=\"min-h-screen bg-gray-50 p-6\">\n <div className=\"max-w-7xl mx-auto space-y-6\">\n\n {/* Header */}\n <div className=\"text-center\">\n <h1 className=\"text-3xl font-bold text-gray-900\">Multi-Agent Labs Dashboard</h1>\n <p className=\"text-gray-600 mt-2\">Orchestrate AI agents across multiple models</p>\n </div>\n\n {/* Agent Status Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n {agents.map((agent) => (\n <Card key={agent.name}>\n <CardContent className=\"p-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"font-semibold\">{agent.name}</h3>\n <Badge variant={agent.status === 'active' ? 'default' : 'secondary'}>\n {agent.status}\n </Badge>\n </div>\n <div className=\"text-right\">\n <div className=\"text-sm text-gray-500\">Performance</div>\n <div className=\"font-bold\">{(agent.performance * 100).toFixed(1)}%</div>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Create New Task */}\n <Card>\n <CardHeader>\n <CardTitle>Create New Task</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium mb-2\">Task Type</label>\n <select \n className=\"w-full p-2 border rounded-md\"\n value={newTask.type}\n onChange={(e) => setNewTask({...newTask, type: e.target.value})}\n >\n <option value=\"general\">General</option>\n <option value=\"planning\">Planning</option>\n <option value=\"analysis\">Analysis</option>\n <option value=\"coding\">Coding</option>\n <option value=\"research\">Research</option>\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium mb-2\">Requirements (comma-separated)</label>\n <Input\n placeholder=\"authentication, validation, testing\"\n value={newTask.requirements}\n onChange={(e) => setNewTask({...newTask, requirements: e.target.value})}\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium mb-2\">Task Description</label>\n <Input\n placeholder=\"Describe what you want the agents to accomplish...\"\n value={newTask.description}\n onChange={(e) => setNewTask({...newTask, description: e.target.value})}\n />\n </div>\n\n <Button \n onClick={createTask} \n disabled={isLoading || !newTask.description.trim()}\n className=\"w-full md:w-auto\"\n >\n {isLoading ? <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> : <Play className=\"mr-2 h-4 w-4\" />}\n Execute Task\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Tasks List */}\n <Card>\n <CardHeader>\n <CardTitle>Recent Tasks</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {tasks.length === 0 ? (\n <div className=\"text-center text-gray-500 py-8\">\n No tasks yet. Create your first task above.\n </div>\n ) : (\n tasks.map((task) => (\n <div key={task.task_id} className=\"border rounded-lg p-4 hover:bg-gray-50 transition-colors\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2 mb-2\">\n {getStatusIcon(task.status)}\n <Badge className={getStatusColor(task.status)}>{task.status}</Badge>\n <Badge variant=\"outline\">{task.type}</Badge>\n </div>\n\n <h4 className=\"font-medium mb-1\">{task.description}</h4>\n <p className=\"text-sm text-gray-500\">\n Created: {new Date(task.created_at).toLocaleString()}\n </p>\n\n {task.results && task.results.length > 0 && (\n <div className=\"mt-3\">\n <div className=\"text-sm font-medium mb-2\">Agent Results:</div>\n <div className=\"space-y-1\">\n {task.results.map((result, index) => (\n <div key={index} className=\"text-sm bg-gray-100 rounded p-2\">\n <span className=\"font-medium\">{result.agent}:</span> {result.result}\n <span className=\"float-right text-gray-500\">\n {(result.confidence * 100).toFixed(1)}% confidence\n </span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {task.consensus && (\n <div className=\"mt-3 p-3 bg-blue-50 rounded-lg\">\n <div className=\"text-sm font-medium text-blue-800 mb-1\">Consensus Result:</div>\n <div className=\"text-sm text-blue-700\">{task.consensus.final_result}</div>\n <div className=\"text-xs text-blue-600 mt-1\">\n Confidence: {(task.consensus.confidence * 100).toFixed(1)}%\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n",
"docker_compose": "\n# docker-compose.yml for Multi-Agent System\nversion: '3.8'\n\nservices:\n # FastAPI Backend\n backend:\n build: \n context: ./backend\n dockerfile: Dockerfile\n ports:\n - \"8000:8000\"\n environment:\n - OPENAI_API_KEY=${OPENAI_API_KEY}\n - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}\n - GOOGLE_API_KEY=${GOOGLE_API_KEY}\n - GROK_API_KEY=${GROK_API_KEY}\n - REDIS_URL=redis://redis:6379\n - DATABASE_URL=postgresql://user:password@postgres:5432/multiagent\n depends_on:\n - redis\n - postgres\n volumes:\n - ./backend:/app\n - /var/run/docker.sock:/var/run/docker.sock\n restart: unless-stopped\n\n # Next.js Frontend\n frontend:\n build:\n context: ./frontend\n dockerfile: Dockerfile\n ports:\n - \"3000:3000\"\n environment:\n - NEXT_PUBLIC_API_URL=http://localhost:8000\n depends_on:\n - backend\n volumes:\n - ./frontend:/app\n - /app/node_modules\n restart: unless-stopped\n\n # Redis for caching and state management\n redis:\n image: redis:7-alpine\n ports:\n - \"6379:6379\"\n volumes:\n - redis_data:/data\n restart: unless-stopped\n\n # PostgreSQL for persistent storage\n postgres:\n image: postgres:15-alpine\n ports:\n - \"5432:5432\"\n environment:\n - POSTGRES_USER=user\n - POSTGRES_PASSWORD=password\n - POSTGRES_DB=multiagent\n volumes:\n - postgres_data:/var/lib/postgresql/data\n restart: unless-stopped\n\n # Vector Database (Chroma)\n chroma:\n image: chromadb/chroma:latest\n ports:\n - \"8001:8000\"\n volumes:\n - chroma_data:/chroma/chroma\n environment:\n - CHROMA_SERVER_HOST=0.0.0.0\n - CHROMA_SERVER_HTTP_PORT=8000\n restart: unless-stopped\n\n # Monitoring (optional)\n prometheus:\n image: prom/prometheus:latest\n ports:\n - \"9090:9090\"\n volumes:\n - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml\n - prometheus_data:/prometheus\n restart: unless-stopped\n\nvolumes:\n redis_data:\n postgres_data:\n chroma_data:\n prometheus_data:\n"
}