feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user