111 lines
3.3 KiB
Python
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}
|