Coverage for .venv/lib/python3.13/site-packages/litellm/proxy/guardrails/guardrail_hooks/cisco_ai_defense/__init__.py: 19%
34 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
1"""Cisco AI Defense Guardrail Integration for LiteLLM."""
3from typing import TYPE_CHECKING, Final
5from litellm.types.guardrails import SupportedGuardrailIntegrations
7from .cisco_ai_defense import (
8 CiscoAIDefenseGuardrail,
9 CiscoAIDefenseGuardrailAPIError,
10 CiscoAIDefenseGuardrailMissingSecrets,
11)
13if TYPE_CHECKING: 13 ↛ 14line 13 didn't jump to line 14 because the condition on line 13 was never true
14 from litellm.types.guardrails import Guardrail, LitellmParams
17def initialize_guardrail(litellm_params: "LitellmParams", guardrail: "Guardrail"):
18 import litellm
20 guardrail_name: Final = guardrail.get("guardrail_name")
21 if not guardrail_name:
22 raise ValueError("Cisco AI Defense: guardrail_name is required")
24 optional_params: Final = getattr(litellm_params, "optional_params", None)
26 _callback: Final = CiscoAIDefenseGuardrail(
27 guardrail_name=guardrail_name,
28 api_key=litellm_params.api_key,
29 api_base=litellm_params.api_base,
30 inspection_type=_get_optional_value(litellm_params, optional_params, "inspection_type"),
31 inspect_path=_get_optional_value(litellm_params, optional_params, "inspect_path"),
32 enabled_rules=_get_optional_value(litellm_params, optional_params, "enabled_rules"),
33 integration_profile_id=_get_optional_value(litellm_params, optional_params, "integration_profile_id"),
34 integration_profile_version=_get_optional_value(litellm_params, optional_params, "integration_profile_version"),
35 integration_tenant_id=_get_optional_value(litellm_params, optional_params, "integration_tenant_id"),
36 integration_type=_get_optional_value(litellm_params, optional_params, "integration_type"),
37 on_flagged_action=_get_optional_value(litellm_params, optional_params, "on_flagged_action"),
38 fallback_on_error=_get_optional_value(litellm_params, optional_params, "fallback_on_error"),
39 timeout=_get_optional_value(litellm_params, optional_params, "timeout"),
40 event_hook=litellm_params.mode,
41 default_on=litellm_params.default_on or False,
42 )
43 litellm.logging_callback_manager.add_litellm_callback(_callback)
45 # MCP post-tool-call hooks are dispatched through success callbacks.
46 litellm.logging_callback_manager.add_litellm_success_callback(_callback)
48 return _callback
51def _get_optional_value(litellm_params, optional_params, attribute_name):
52 """Resolve Cisco optional params without inheriting sibling defaults."""
53 if optional_params is not None:
54 if isinstance(optional_params, dict):
55 if attribute_name in optional_params:
56 return optional_params[attribute_name]
57 else:
58 nested_fields_set: Final = getattr(optional_params, "model_fields_set", None)
59 if nested_fields_set is None or attribute_name in nested_fields_set:
60 value: Final = getattr(optional_params, attribute_name, None)
61 if value is not None:
62 return value
64 if litellm_params is None:
65 return None
66 # Only accept flattened values the caller explicitly set.
67 fields_set: Final = getattr(litellm_params, "model_fields_set", None)
68 if fields_set is None or attribute_name not in fields_set:
69 return None
70 return getattr(litellm_params, attribute_name, None)
73guardrail_initializer_registry: Final = {
74 SupportedGuardrailIntegrations.CISCO_AI_DEFENSE.value: initialize_guardrail,
75}
78guardrail_class_registry: Final = {
79 SupportedGuardrailIntegrations.CISCO_AI_DEFENSE.value: CiscoAIDefenseGuardrail,
80}
83__all__ = [
84 "CiscoAIDefenseGuardrail",
85 "CiscoAIDefenseGuardrailAPIError",
86 "CiscoAIDefenseGuardrailMissingSecrets",
87 "guardrail_class_registry",
88 "guardrail_initializer_registry",
89 "initialize_guardrail",
90]