fix: Register DynamoAI guardrail initializer and enum entry#23754
fix: Register DynamoAI guardrail initializer and enum entry#23754Harshit28j wants to merge 4 commits intoBerriAI:mainfrom
Conversation
Fix the "Unsupported guardrail: dynamoai" error by: 1. Adding DYNAMOAI to SupportedGuardrailIntegrations enum 2. Implementing initialize_guardrail() and registries in dynamoai/__init__.py The DynamoAI guardrail was added in PR BerriAI#15920 but never properly registered in the initialization system. The __init__.py was missing the guardrail_initializer_registry and guardrail_class_registry dictionaries that the dynamic discovery mechanism looks for at module load time. Fixes BerriAI#22773 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Verifies enum entry, initializer registry, class registry, instance creation, and global registry discovery. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Duplicate of #23752, closing. |
Greptile SummaryThis PR wires DynamoAI into the guardrail registration system, fixing the "Unsupported guardrail: dynamoai" error reported in #22773. The dynamic discovery mechanism in
Confidence Score: 3/5
|
| Filename | Overview |
|---|---|
| litellm/proxy/guardrails/guardrail_hooks/dynamoai/init.py | Adds initialize_guardrail, guardrail_initializer_registry, and guardrail_class_registry following the established pattern. The core registration wiring is correct; however, DynamoAI-specific config fields (model_id, policy_ids) are not forwarded because DynamoAIGuardrailConfigModel is absent from LitellmParams. |
| litellm/types/guardrails.py | Adds DYNAMOAI = "dynamoai" to SupportedGuardrailIntegrations enum in alphabetical order — correct and minimal change. |
| tests/test_litellm/proxy/guardrails/guardrail_hooks/test_dynamoai.py | Five new unit tests covering enum entry, initializer/class registry presence, instance creation (properly mocked), and global registry discoverability. No real network calls are made. Minor: unused import os on line 7. |
Sequence Diagram
sequenceDiagram
participant Config as YAML Config
participant Registry as guardrail_registry.py
participant Hooks as guardrail_hooks/dynamoai/__init__.py
participant Init as initialize_guardrail()
participant Guard as DynamoAIGuardrails
participant CBM as logging_callback_manager
Note over Registry: Module load — dynamic discovery
Registry->>Hooks: importlib.import_module("...dynamoai")
Hooks-->>Registry: guardrail_initializer_registry {"dynamoai": initialize_guardrail}
Hooks-->>Registry: guardrail_class_registry {"dynamoai": DynamoAIGuardrails}
Registry->>Registry: guardrail_initializer_registry.update(discovered)
Note over Config,CBM: Runtime — guardrail initialization
Config->>Registry: InMemoryGuardrailHandler.initialize_guardrail(guardrail)
Registry->>Registry: initializer = guardrail_initializer_registry["dynamoai"]
Registry->>Init: initializer(litellm_params, guardrail)
Init->>Guard: DynamoAIGuardrails(api_base, api_key, guardrail_name, event_hook, default_on)
Guard-->>Init: _dynamoai_callback
Init->>CBM: add_litellm_callback(_dynamoai_callback)
Init-->>Registry: _dynamoai_callback
Last reviewed commit: ed213ba
|
|
||
| import os | ||
| from unittest.mock import patch | ||
|
|
There was a problem hiding this comment.
Unused import
import os is imported but never used in the test file.
| _dynamoai_callback = DynamoAIGuardrails( | ||
| api_base=litellm_params.api_base, | ||
| api_key=litellm_params.api_key, | ||
| guardrail_name=guardrail.get("guardrail_name", ""), | ||
| event_hook=litellm_params.mode, | ||
| default_on=litellm_params.default_on, | ||
| ) |
There was a problem hiding this comment.
DynamoAI-specific params silently dropped
DynamoAIGuardrails accepts model_id and policy_ids constructor parameters, but initialize_guardrail never passes them. More critically, DynamoAIGuardrailConfigModel is not included in the LitellmParams inheritance chain in litellm/types/guardrails.py, so users have no way to supply model_id or policy_ids through the standard YAML config — those values will silently fall back to environment variables or empty defaults.
For comparison, other guardrails with provider-specific config fields (e.g., Bedrock, Lakera V2) have their config model added to LitellmParams. To fully enable DynamoAI configuration, DynamoAIGuardrailConfigModel should be added to the LitellmParams base classes in litellm/types/guardrails.py, and model_id/policy_ids should then be forwarded inside initialize_guardrail using getattr(litellm_params, "model_id", "") and getattr(litellm_params, "policy_ids", []).
Summary
Fixes #22773 — DynamoAI guardrail now properly registers with the initialization system, resolving the "Unsupported guardrail: dynamoai" error.
Changes
DYNAMOAI = "dynamoai"toSupportedGuardrailIntegrationsenuminitialize_guardrail()function indynamoai/__init__.pyguardrail_initializer_registryandguardrail_class_registryfor proper registrationThe DynamoAI guardrail was added in PR #15920 but was never wired into the registration system. The dynamic discovery mechanism at module load time looks for
guardrail_initializer_registryin each guardrail hook's__init__.py— DynamoAI was missing this, causing lookups to fail. All 5 new tests verify the fix works end-to-end.🐛 Bug Fix