Files
aiagent/backend/app/api/platform_templates.py

73 lines
2.5 KiB
Python
Raw Normal View History

"""
场景模板 API独立路由避免与 /api/v1/agents/{agent_id} 在部分部署中的匹配顺序问题
"""
from fastapi import APIRouter, Depends, status
from sqlalchemy.orm import Session
from typing import List
import logging
from app.core.database import get_db
from app.api.auth import get_current_user
from app.models.user import User
from app.models.agent import Agent
from app.core.exceptions import ValidationError, ConflictError
from app.services.workflow_validator import validate_workflow
from app.services.scene_templates import build_workflow_for_template, list_scene_template_meta
from app.api.agents import AgentResponse, SceneTemplateItem, AgentFromSceneTemplateCreate
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/v1/platform", tags=["platform-templates"])
@router.get("/scene-templates", response_model=List[SceneTemplateItem])
async def list_scene_templates_v1(current_user: User = Depends(get_current_user)):
_ = current_user
return list_scene_template_meta()
@router.post("/agents/from-template", response_model=AgentResponse, status_code=status.HTTP_201_CREATED)
async def create_agent_from_template_v1(
body: AgentFromSceneTemplateCreate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
try:
workflow_config = build_workflow_for_template(
body.template_id, body.parameters or {}
)
except ValueError as e:
raise ValidationError(str(e))
validation_result = validate_workflow(
workflow_config.get("nodes", []), workflow_config.get("edges", [])
)
if not validation_result["valid"]:
raise ValidationError(
"工作流配置验证失败: " + ", ".join(validation_result["errors"])
)
existing_agent = db.query(Agent).filter(
Agent.name == body.name,
Agent.user_id == current_user.id,
).first()
if existing_agent:
raise ConflictError(f"Agent名称 '{body.name}' 已存在")
desc = body.description or f"自场景模板 {body.template_id} 创建"
agent = Agent(
name=body.name,
description=desc,
workflow_config=workflow_config,
budget_config=body.budget_config,
user_id=current_user.id,
status="draft",
)
db.add(agent)
db.commit()
db.refresh(agent)
logger.info(
f"用户 {current_user.username} 从模板 {body.template_id} 创建 Agent: {agent.name} ({agent.id})"
)
return agent