Files
group_xinghuo_jinrong/app/api/guard.py
T
zhanghongyu_0626 70aa861983 feat(advisor-agent): Introduce advisor agent functionalities with compliance, KYC, and script templates
- Added new modules for advisor compliance, KYC sessions, and script templates, enhancing the advisor agent's capabilities.
- Implemented a comprehensive API structure under the `/api/advisor-agent` prefix, ensuring clear organization and access to new features.
- Established database models and repositories for compliance rules and KYC sessions, facilitating robust data management.
- Integrated exception handling and response models to improve error management and user feedback.
- Updated settings to include new configurations for compliance and KYC features, ensuring flexibility and adaptability.

This update significantly expands the advisor agent's functionality, providing essential tools for compliance and customer interaction while maintaining a structured API design.
2026-09-12 16:33:07 +08:00

46 lines
1.5 KiB
Python

"""Input guard endpoints."""
from __future__ import annotations
from fastapi import APIRouter, Depends, Request
from app.api.advisor_auth_adapter import require_advisor_permission
from app.api.advisor_auth_adapter import AdvisorAuthContext
from app.model.advisor_schemas import GuardCheckRequest
from app.service.audit_service import audit_service
from app.service.input_guard_service import input_guard_service
from app.advisor_exceptions import GuardBlockedError
from app.api.advisor_http import advisor_ok as _advisor_ok
router = APIRouter(prefix="/api/advisor-agent/guard", tags=["advisor-agent-guard"])
GUARD_CHECK_DEP = Depends(require_advisor_permission("guard:check"))
@router.post("/check")
def check_input(
payload: GuardCheckRequest,
request: Request,
auth: AdvisorAuthContext = GUARD_CHECK_DEP,
):
try:
result = input_guard_service.check_text(payload.content)
except GuardBlockedError as exc:
audit_service.record(
trace_id=auth.trace_id,
event_type="input_guard_blocked",
actor_id=auth.user_id,
agent_type="platform",
decision=exc.data["guard_type"] if exc.data else "blocked",
input_summary={"length": len(payload.content)},
)
raise
audit_service.record(
trace_id=auth.trace_id,
event_type="input_guard_check",
actor_id=auth.user_id,
agent_type="platform",
decision=result["action"],
input_summary={"length": len(payload.content)},
)
return _advisor_ok(request, result)