"""Agent Management API Routes""" from typing import List, Optional from fastapi import APIRouter, HTTPException from pydantic import BaseModel from luxx.services.agent import agent_manager router = APIRouter(prefix="/agents", tags=["agents"]) class CreateAgentRequest(BaseModel): name: str role: str system_prompt: str provider_id: Optional[int] = None model: Optional[str] = None tools: Optional[List[str]] = None priority: int = 5 auto_response: bool = True mention_trigger: bool = False temperature: float = 0.7 max_tokens: int = 2048 avatar: Optional[str] = None class UpdateAgentRequest(BaseModel): name: Optional[str] = None role: Optional[str] = None system_prompt: Optional[str] = None provider_id: Optional[int] = None model: Optional[str] = None tools: Optional[List[str]] = None priority: Optional[int] = None auto_response: Optional[bool] = None mention_trigger: Optional[bool] = None temperature: Optional[float] = None max_tokens: Optional[int] = None is_active: Optional[bool] = None avatar: Optional[str] = None @router.get("") async def list_agents(include_inactive: bool = False): """List all agents""" agents = agent_manager.list_agents(include_inactive=include_inactive) return {"agents": agents} @router.post("") async def create_agent(request: CreateAgentRequest): """Create a new agent""" agent = agent_manager.create_agent( name=request.name, role=request.role, system_prompt=request.system_prompt, provider_id=request.provider_id, model=request.model, tools=request.tools, priority=request.priority, auto_response=request.auto_response, mention_trigger=request.mention_trigger, temperature=request.temperature, max_tokens=request.max_tokens, avatar=request.avatar ) return {"agent": agent} @router.get("/{agent_id}") async def get_agent(agent_id: str): """Get an agent by ID""" agent = agent_manager.get_agent(agent_id) if not agent: raise HTTPException(status_code=404, detail="Agent not found") return {"agent": agent} @router.put("/{agent_id}") async def update_agent(agent_id: str, request: UpdateAgentRequest): """Update an agent""" agent = agent_manager.update_agent( agent_id=agent_id, name=request.name, role=request.role, system_prompt=request.system_prompt, provider_id=request.provider_id, model=request.model, tools=request.tools, priority=request.priority, auto_response=request.auto_response, mention_trigger=request.mention_trigger, temperature=request.temperature, max_tokens=request.max_tokens, is_active=request.is_active, avatar=request.avatar ) if not agent: raise HTTPException(status_code=404, detail="Agent not found") return {"agent": agent} @router.delete("/{agent_id}") async def delete_agent(agent_id: str): """Delete an agent""" success = agent_manager.delete_agent(agent_id) if not success: raise HTTPException(status_code=404, detail="Agent not found") return {"success": True}