ADK-gateway/backend/app/api/agent.py
2026-08-05 16:33:27 +08:00

56 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""预留 Agent 协议接口register / unregister / heartbeat / result。"""
from fastapi import APIRouter, Depends, Request
from app.models.schemas import AgentHeartbeat, AgentInfo, AgentRegister, TaskResult
from app.services.agent_service import AgentService
from app.services.relay import RelayService
from app.services.security import require_auth
router = APIRouter()
def get_agent_service(request: Request) -> AgentService:
return AgentService(request.app.state.redis)
def get_relay_service(request: Request) -> RelayService:
return RelayService(request.app.state.redis)
@router.post("/register", response_model=AgentInfo, summary="Agent 注册")
async def register(body: AgentRegister, svc: AgentService = Depends(get_agent_service)):
require_auth(body.auth)
return await svc.register(body)
@router.post("/unregister", summary="Agent 注销")
async def unregister(body: dict, svc: AgentService = Depends(get_agent_service)):
from fastapi import HTTPException
require_auth(body.get("auth", ""))
agent_id = body.get("agent_id")
if not agent_id:
raise HTTPException(status_code=400, detail="agent_id required")
if not await svc.unregister(agent_id):
raise HTTPException(status_code=404, detail="agent not found")
return {"ok": True}
@router.post("/heartbeat", summary="Agent 心跳")
async def heartbeat(body: AgentHeartbeat, svc: AgentService = Depends(get_agent_service)):
from fastapi import HTTPException
require_auth(body.auth)
if not await svc.heartbeat(body):
raise HTTPException(status_code=404, detail="agent not registered")
return {"ok": True}
@router.post("/result", summary="Agent 结果回传")
async def result(body: TaskResult, relay: RelayService = Depends(get_relay_service)):
from fastapi import HTTPException
require_auth(body.auth)
if not await relay.on_result(body):
raise HTTPException(status_code=400, detail="result rejected")
return {"ok": True}