feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理

This commit is contained in:
2026-08-12 13:30:35 +08:00
parent 3fd5a9d81f
commit 7a6b467dad
+95
View File
@@ -0,0 +1,95 @@
"""AI Worker endpoints."""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from app.database import get_db
from app.schemas.worker import (
WorkerCreate, WorkerUpdate, WorkerResponse, WorkerTestRequest, WorkerTestResult,
)
from app.services.worker_service import WorkerService
from app.services.llm_service import LLMGateway
from app.api.deps import get_current_user, require_roles
from app.core.permissions import Role
from app.models.user import User
router = APIRouter(prefix="/workers")
@router.get("", response_model=List[WorkerResponse])
def list_workers(
skip: int = 0, limit: int = 100,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
return WorkerService.list_workers(db, user.tenant_id, skip, limit)
@router.post("", response_model=WorkerResponse, status_code=201)
def create_worker(
req: WorkerCreate,
user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN)),
db: Session = Depends(get_db),
):
return WorkerService.create_worker(db, user.tenant_id, req)
@router.get("/{worker_id}", response_model=WorkerResponse)
def get_worker(
worker_id: int,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
w = WorkerService.get_worker(db, user.tenant_id, worker_id)
if not w:
raise HTTPException(status_code=404, detail="Worker not found")
return w
@router.put("/{worker_id}", response_model=WorkerResponse)
def update_worker(
worker_id: int,
req: WorkerUpdate,
user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN)),
db: Session = Depends(get_db),
):
try:
return WorkerService.update_worker(db, user.tenant_id, worker_id, req)
except ValueError as e:
raise HTTPException(status_code=404, detail=str(e))
@router.delete("/{worker_id}")
def delete_worker(
worker_id: int,
user: User = Depends(require_roles(Role.SUPER_ADMIN, Role.TENANT_ADMIN)),
db: Session = Depends(get_db),
):
if WorkerService.delete_worker(db, user.tenant_id, worker_id):
return {"success": True, "message": f"Worker #{worker_id} deleted"}
raise HTTPException(status_code=404, detail="Worker not found")
@router.post("/{worker_id}/test", response_model=WorkerTestResult)
def test_worker(
worker_id: int,
req: WorkerTestRequest,
user: User = Depends(get_current_user),
db: Session = Depends(get_db),
):
worker = WorkerService.get_worker(db, user.tenant_id, worker_id)
if not worker:
raise HTTPException(status_code=404, detail="Worker not found")
try:
messages = [
{"role": "system", "content": worker.system_prompt},
{"role": "user", "content": req.test_prompt},
]
content, cost = LLMGateway.call(
worker=worker, messages=messages, db=db,
tenant_id=user.tenant_id,
)
return WorkerTestResult(
success=True, response=content, latency_ms=cost.duration_ms,
)
except Exception as e:
return WorkerTestResult(success=False, error=str(e))