Dynavera/apps/agents/viewsets.py

58 lines
1.6 KiB
Python
Raw Normal View History

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from apps.agents.models import Agent, AgentExecution
from apps.agents.serializers import AgentSerializer, AgentExecutionSerializer
from apps.agents.tasks import start_agent_task_mcp
class AgentViewSet(viewsets.ModelViewSet):
serializer_class = AgentSerializer
permission_classes = [IsAuthenticated]
lookup_field = 'uuid'
def get_queryset(self):
return Agent.objects.filter(user=self.request.user)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
@action(detail=True, methods=['post'])
def start(self, request, uuid=None):
agent = self.get_object()
input_data = request.data.get('input_data', {})
execution = AgentExecution.objects.create(
agent=agent,
user=request.user,
input_data=input_data
)
start_agent_task_mcp.delay(str(execution.uuid))
serializer = AgentExecutionSerializer(execution)
return Response({
"status": "queued",
"execution": serializer.data,
"message": "Agent task queued for execution"
})
class AgentExecutionViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = AgentExecutionSerializer
permission_classes = [IsAuthenticated]
lookup_field = 'uuid'
def get_queryset(self):
return AgentExecution.objects.filter(user=self.request.user)
@action(detail=True, methods=['get'])
def events(self, request, uuid=None):
execution = self.get_object()
events = execution.events.all().values()
return Response({
"execution_id": str(execution.uuid),
"events": list(events)
})