80 lines
2.3 KiB
Python
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,
|
|
)
|