工作流动画效果
This commit is contained in:
@@ -331,3 +331,69 @@ async def stop_agent(
|
||||
|
||||
logger.info(f"用户 {current_user.username} 停止了Agent: {agent.name} ({agent_id})")
|
||||
return agent
|
||||
|
||||
|
||||
class AgentDuplicateRequest(BaseModel):
|
||||
"""Agent复制请求模型"""
|
||||
name: Optional[str] = None # 如果提供,使用此名称;否则自动生成
|
||||
|
||||
|
||||
@router.post("/{agent_id}/duplicate", response_model=AgentResponse, status_code=status.HTTP_201_CREATED)
|
||||
async def duplicate_agent(
|
||||
agent_id: str,
|
||||
duplicate_data: Optional[AgentDuplicateRequest] = None,
|
||||
db: Session = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
复制Agent
|
||||
|
||||
创建一个新的Agent副本,包含原Agent的所有配置(工作流、描述等)
|
||||
新Agent的状态为draft,版本号为1
|
||||
"""
|
||||
# 获取原Agent
|
||||
original_agent = db.query(Agent).filter(Agent.id == agent_id).first()
|
||||
|
||||
if not original_agent:
|
||||
raise NotFoundError(f"Agent不存在: {agent_id}")
|
||||
|
||||
# 检查权限:read权限(需要能读取原Agent才能复制)
|
||||
if not check_agent_permission(db, current_user, original_agent, "read"):
|
||||
raise HTTPException(status_code=403, detail="无权复制此Agent")
|
||||
|
||||
# 生成新名称
|
||||
if duplicate_data and duplicate_data.name:
|
||||
new_name = duplicate_data.name
|
||||
else:
|
||||
# 自动生成名称:原名称 + " (副本)"
|
||||
base_name = original_agent.name
|
||||
new_name = f"{base_name} (副本)"
|
||||
|
||||
# 如果名称已存在,添加序号
|
||||
counter = 1
|
||||
while db.query(Agent).filter(
|
||||
Agent.name == new_name,
|
||||
Agent.user_id == current_user.id
|
||||
).first():
|
||||
counter += 1
|
||||
new_name = f"{base_name} (副本 {counter})"
|
||||
|
||||
# 深拷贝工作流配置(避免引用问题)
|
||||
import copy
|
||||
new_workflow_config = copy.deepcopy(original_agent.workflow_config)
|
||||
|
||||
# 创建新Agent
|
||||
new_agent = Agent(
|
||||
name=new_name,
|
||||
description=original_agent.description,
|
||||
workflow_config=new_workflow_config,
|
||||
user_id=current_user.id,
|
||||
status="draft", # 复制的Agent状态为草稿
|
||||
version=1 # 版本号从1开始
|
||||
)
|
||||
db.add(new_agent)
|
||||
db.commit()
|
||||
db.refresh(new_agent)
|
||||
|
||||
logger.info(f"用户 {current_user.username} 复制了Agent: {original_agent.name} ({agent_id}) -> {new_agent.name} ({new_agent.id})")
|
||||
return new_agent
|
||||
|
||||
Reference in New Issue
Block a user