Files
lijiaoqiao/llm-gateway-competitors/litellm-wheel-src/litellm/proxy/management_endpoints/compliance_endpoints.py
2026-03-26 20:06:14 +08:00

80 lines
2.3 KiB
Python

"""
COMPLIANCE CHECK ENDPOINTS
Endpoints for checking regulatory compliance of LLM request logs.
/compliance/eu-ai-act - Check EU AI Act compliance
/compliance/gdpr - Check GDPR compliance
"""
from fastapi import APIRouter, Depends, Request
from litellm.proxy._types import UserAPIKeyAuth
from litellm.proxy.auth.user_api_key_auth import user_api_key_auth
from litellm.proxy.compliance_checks import ComplianceChecker
from litellm.proxy.management_helpers.utils import management_endpoint_wrapper
from litellm.types.proxy.compliance_endpoints import (
ComplianceCheckRequest,
ComplianceResponse,
)
router = APIRouter()
@router.post(
"/compliance/eu-ai-act",
tags=["compliance"],
dependencies=[Depends(user_api_key_auth)],
response_model=ComplianceResponse,
)
@management_endpoint_wrapper
async def check_eu_ai_act_compliance(
data: ComplianceCheckRequest,
http_request: Request,
user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
) -> ComplianceResponse:
"""
Check EU AI Act compliance for a spend log entry.
Checks:
- Art. 9: Guardrails applied (any guardrail)
- Art. 5: Content screened before LLM (pre-call guardrails)
- Art. 12: Audit record complete (user_id, model, timestamp, guardrail_results)
"""
checker = ComplianceChecker(data)
checks = checker.check_eu_ai_act()
return ComplianceResponse(
compliant=all(c.passed for c in checks),
regulation="EU AI Act",
checks=checks,
)
@router.post(
"/compliance/gdpr",
tags=["compliance"],
dependencies=[Depends(user_api_key_auth)],
response_model=ComplianceResponse,
)
@management_endpoint_wrapper
async def check_gdpr_compliance(
data: ComplianceCheckRequest,
http_request: Request,
user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth),
) -> ComplianceResponse:
"""
Check GDPR compliance for a spend log entry.
Checks:
- Art. 32: Data protection applied (pre-call guardrails)
- Art. 5(1)(c): Sensitive data protected (masked/blocked or no issues)
- Art. 30: Audit record complete (user_id, model, timestamp, guardrail_results)
"""
checker = ComplianceChecker(data)
checks = checker.check_gdpr()
return ComplianceResponse(
compliant=all(c.passed for c in checks),
regulation="GDPR",
checks=checks,
)