diff --git a/guardrails/utils/safe_get.py b/guardrails/utils/safe_get.py index e53b3e18b..a0327edf7 100644 --- a/guardrails/utils/safe_get.py +++ b/guardrails/utils/safe_get.py @@ -26,7 +26,20 @@ def safe_get( key: Any, default: Optional[Any] = None, ) -> Any: - if isinstance(container, dict): + # Fast-path for dict + if type(container) is dict: return container.get(key, default) + # Fast-path for list/tuple index/slice + elif type(container) in (list, tuple): + try: + value = container[key] + if not value: + return default + return value + except Exception: + return default else: + # Fallback to imported helper for string/special containers + from guardrails.utils.safe_get import safe_get_with_brackets + return safe_get_with_brackets(container, key, default) diff --git a/guardrails/utils/validator_utils.py b/guardrails/utils/validator_utils.py index 139bedb2d..cdec40034 100644 --- a/guardrails/utils/validator_utils.py +++ b/guardrails/utils/validator_utils.py @@ -2,7 +2,7 @@ """This module contains the constants and utils used by the validator.py.""" from ast import literal_eval -from typing import Any, Dict, List, Optional, Tuple, Type, Union, cast +from typing import Any, List, Optional, Tuple, Type, Union, cast from guardrails_api_client import ValidatorReference @@ -82,10 +82,11 @@ def parse_use_many_validator( ) -> Optional[Validator]: args = safe_get(use_tuple, 1, []) kwargs = {} - if isinstance(args, Dict): + args_type = type(args) + if args_type is dict: kwargs = args args = [] - elif not isinstance(args, List): + elif args_type is not list: args = [args] kwargs = safe_get(use_tuple, 2, kwargs) if validator_cls: