Luxx/luxx/api/agents.py

111 lines
3.3 KiB
Python

"""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
clear_provider: bool = False
@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,
clear_provider=request.clear_provider
)
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}