2025-12-10 20:52:44 +08:00
|
|
|
|
"""
|
|
|
|
|
|
能力配置公共 API
|
|
|
|
|
|
|
|
|
|
|
|
提供系统支持的能力列表,供前端展示和配置使用。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
|
|
|
|
|
|
from src.core.key_capabilities import (
|
|
|
|
|
|
get_all_capabilities,
|
|
|
|
|
|
get_user_configurable_capabilities,
|
|
|
|
|
|
)
|
|
|
|
|
|
from src.database import get_db
|
|
|
|
|
|
|
|
|
|
|
|
router = APIRouter(prefix="/api/capabilities", tags=["Capabilities"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("")
|
|
|
|
|
|
async def list_capabilities():
|
|
|
|
|
|
"""获取所有能力定义"""
|
|
|
|
|
|
return {
|
|
|
|
|
|
"capabilities": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": cap.name,
|
|
|
|
|
|
"display_name": cap.display_name,
|
|
|
|
|
|
"short_name": cap.short_name,
|
|
|
|
|
|
"description": cap.description,
|
|
|
|
|
|
"match_mode": cap.match_mode.value,
|
|
|
|
|
|
"config_mode": cap.config_mode.value,
|
|
|
|
|
|
}
|
|
|
|
|
|
for cap in get_all_capabilities()
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/user-configurable")
|
|
|
|
|
|
async def list_user_configurable_capabilities():
|
|
|
|
|
|
"""获取用户可配置的能力列表(用于前端展示配置选项)"""
|
|
|
|
|
|
return {
|
|
|
|
|
|
"capabilities": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": cap.name,
|
|
|
|
|
|
"display_name": cap.display_name,
|
|
|
|
|
|
"short_name": cap.short_name,
|
|
|
|
|
|
"description": cap.description,
|
|
|
|
|
|
"match_mode": cap.match_mode.value,
|
|
|
|
|
|
"config_mode": cap.config_mode.value,
|
|
|
|
|
|
}
|
|
|
|
|
|
for cap in get_user_configurable_capabilities()
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/model/{model_name}")
|
|
|
|
|
|
async def get_model_supported_capabilities(
|
|
|
|
|
|
model_name: str,
|
|
|
|
|
|
db: Session = Depends(get_db),
|
|
|
|
|
|
):
|
|
|
|
|
|
"""
|
|
|
|
|
|
获取指定模型支持的能力列表
|
|
|
|
|
|
|
|
|
|
|
|
Args:
|
2025-12-15 14:30:53 +08:00
|
|
|
|
model_name: 模型名称(如 claude-sonnet-4-20250514,必须是 GlobalModel.name)
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
模型支持的能力列表,以及每个能力的详细定义
|
|
|
|
|
|
"""
|
2025-12-15 14:30:53 +08:00
|
|
|
|
from src.models.database import GlobalModel
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2025-12-15 14:30:53 +08:00
|
|
|
|
global_model = (
|
|
|
|
|
|
db.query(GlobalModel)
|
|
|
|
|
|
.filter(GlobalModel.name == model_name, GlobalModel.is_active == True)
|
|
|
|
|
|
.first()
|
|
|
|
|
|
)
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
if not global_model:
|
|
|
|
|
|
return {
|
|
|
|
|
|
"model": model_name,
|
|
|
|
|
|
"supported_capabilities": [],
|
|
|
|
|
|
"capability_details": [],
|
|
|
|
|
|
"error": "模型不存在",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
supported_caps = global_model.supported_capabilities or []
|
|
|
|
|
|
|
|
|
|
|
|
# 获取支持的能力详情
|
|
|
|
|
|
all_caps = {cap.name: cap for cap in get_all_capabilities()}
|
|
|
|
|
|
capability_details = []
|
|
|
|
|
|
for cap_name in supported_caps:
|
|
|
|
|
|
if cap_name in all_caps:
|
|
|
|
|
|
cap = all_caps[cap_name]
|
|
|
|
|
|
capability_details.append({
|
|
|
|
|
|
"name": cap.name,
|
|
|
|
|
|
"display_name": cap.display_name,
|
|
|
|
|
|
"description": cap.description,
|
|
|
|
|
|
"match_mode": cap.match_mode.value,
|
|
|
|
|
|
"config_mode": cap.config_mode.value,
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
"model": model_name,
|
|
|
|
|
|
"global_model_id": str(global_model.id),
|
|
|
|
|
|
"global_model_name": global_model.name,
|
|
|
|
|
|
"supported_capabilities": supported_caps,
|
|
|
|
|
|
"capability_details": capability_details,
|
|
|
|
|
|
}
|