100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
"""
|
|
技能管理API路由
|
|
"""
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
from app.agent.skill_manager import skill_manager
|
|
from app.utils.logger import logger
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class ToggleRequest(BaseModel):
|
|
enabled: bool
|
|
|
|
|
|
@router.get("/")
|
|
async def list_skills():
|
|
"""
|
|
获取所有技能列表
|
|
|
|
Returns:
|
|
技能信息列表
|
|
"""
|
|
try:
|
|
skills_info = skill_manager.get_skills_info()
|
|
return skills_info # 直接返回数组
|
|
except Exception as e:
|
|
logger.error(f"获取技能列表失败: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.post("/{skill_name}/toggle")
|
|
async def toggle_skill(skill_name: str, request: ToggleRequest):
|
|
"""
|
|
切换技能状态
|
|
|
|
Args:
|
|
skill_name: 技能名称
|
|
request: 包含enabled字段的请求体
|
|
|
|
Returns:
|
|
操作结果
|
|
"""
|
|
try:
|
|
if request.enabled:
|
|
success = skill_manager.enable_skill(skill_name)
|
|
message = f"技能 {skill_name} 已启用"
|
|
else:
|
|
success = skill_manager.disable_skill(skill_name)
|
|
message = f"技能 {skill_name} 已禁用"
|
|
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="技能不存在")
|
|
return {"message": message, "success": True}
|
|
except Exception as e:
|
|
logger.error(f"切换技能失败: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.post("/{skill_name}/enable")
|
|
async def enable_skill(skill_name: str):
|
|
"""
|
|
启用技能
|
|
|
|
Args:
|
|
skill_name: 技能名称
|
|
|
|
Returns:
|
|
操作结果
|
|
"""
|
|
try:
|
|
success = skill_manager.enable_skill(skill_name)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="技能不存在")
|
|
return {"message": f"技能 {skill_name} 已启用"}
|
|
except Exception as e:
|
|
logger.error(f"启用技能失败: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.post("/{skill_name}/disable")
|
|
async def disable_skill(skill_name: str):
|
|
"""
|
|
禁用技能
|
|
|
|
Args:
|
|
skill_name: 技能名称
|
|
|
|
Returns:
|
|
操作结果
|
|
"""
|
|
try:
|
|
success = skill_manager.disable_skill(skill_name)
|
|
if not success:
|
|
raise HTTPException(status_code=404, detail="技能不存在")
|
|
return {"message": f"技能 {skill_name} 已禁用"}
|
|
except Exception as e:
|
|
logger.error(f"禁用技能失败: {e}")
|
|
raise HTTPException(status_code=500, detail=str(e))
|