Files
company-ai-platform/app/modules/ai_agent/routes.py
JiuContinent 0a153b264a ```
refactor: 移除审批和回写功能模块

移除了整个审批(approvals)和官方回写(writebacks)功能模块,
包括相关模型、路由、服务和配置项。更新了数据库迁移文件,
删除了相关的审批请求表和官方回写运行表。同时从API路由器中
移除了相应的路由,并调整了安全常量和字段验证器以匹配变更。
```
2026-07-08 17:08:59 +08:00

83 lines
2.4 KiB
Python

from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.operation_guard import require_operations_enabled
from app.core.security import ApiPrincipal, require_api_key
from app.modules.audit.constants import AuditSource
from app.modules.ai_agent.schemas import (
AIAskRequest,
AIAskResponse,
DraftPolicyRequest,
InvestmentResearchRequest,
OpenClawToolInvokeRequest,
)
from app.modules.ai_agent.service import AIService
router = APIRouter(dependencies=[Depends(require_api_key)])
@router.post("/ask", response_model=AIAskResponse)
def ask(
payload: AIAskRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
return AIService(db).ask(
payload.prompt,
payload.context,
actor=principal.actor,
source=AuditSource.API,
)
@router.get("/provider-health")
def provider_health(
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
return AIService(db).provider_health(actor=principal.actor)
@router.post("/openclaw/tools/invoke")
def invoke_openclaw_tool(
payload: OpenClawToolInvokeRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
require_operations_enabled()
return AIService(db).invoke_openclaw_tool(
tool=payload.tool,
action=payload.action,
args=payload.args,
session_key=payload.session_key,
actor=principal.actor,
)
@router.post("/draft-policy", response_model=AIAskResponse)
def draft_policy(
payload: DraftPolicyRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
return AIService(db).draft_policy(
title=payload.title,
policy_type=payload.policy_type,
requirements=payload.requirements,
actor=principal.actor,
)
@router.post("/investment-research", response_model=AIAskResponse)
def investment_research(
payload: InvestmentResearchRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
return AIService(db).draft_investment_research(
symbol_or_topic=payload.symbol_or_topic,
risk_preference=payload.risk_preference,
actor=principal.actor,
)