mirror of
https://github.com/eigent-ai/eigent.git
synced 2026-04-28 03:30:06 +00:00
52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
from typing import Literal
|
|
from dotenv import load_dotenv
|
|
from fastapi import APIRouter, Response
|
|
from loguru import logger
|
|
from pydantic import BaseModel
|
|
from app.model.chat import NewAgent, UpdateData
|
|
from app.service.task import (
|
|
Action,
|
|
ActionNewAgent,
|
|
ActionTakeControl,
|
|
ActionStartData,
|
|
ActionUpdateTaskData,
|
|
get_task_lock,
|
|
)
|
|
import asyncio
|
|
|
|
|
|
router = APIRouter(tags=["task"])
|
|
|
|
|
|
@router.post("/task/{id}/start", name="start task")
|
|
def start(id: str):
|
|
task_lock = get_task_lock(id)
|
|
logger.debug(f"start task {id}")
|
|
asyncio.run(task_lock.put_queue(ActionStartData(action=Action.start)))
|
|
logger.debug(f"start task {id} success")
|
|
return Response(status_code=201)
|
|
|
|
|
|
@router.put("/task/{id}", name="update task")
|
|
def put(id: str, data: UpdateData):
|
|
task_lock = get_task_lock(id)
|
|
asyncio.run(task_lock.put_queue(ActionUpdateTaskData(action=Action.update_task, data=data)))
|
|
return Response(status_code=201)
|
|
|
|
|
|
class TakeControl(BaseModel):
|
|
action: Literal[Action.pause, Action.resume]
|
|
|
|
|
|
@router.put("/task/{id}/take-control", name="take control pause or resume")
|
|
def take_control(id: str, data: TakeControl):
|
|
task_lock = get_task_lock(id)
|
|
asyncio.run(task_lock.put_queue(ActionTakeControl(action=data.action)))
|
|
return Response(status_code=204)
|
|
|
|
|
|
@router.post("/task/{id}/add-agent", name="add new agent")
|
|
def add_agent(id: str, data: NewAgent):
|
|
load_dotenv(dotenv_path=data.env_path)
|
|
asyncio.run(get_task_lock(id).put_queue(ActionNewAgent(**data.model_dump())))
|
|
return Response(status_code=204)
|