diff --git a/guardrails/api_client.py b/guardrails/api_client.py index dc710c383..7b825d537 100644 --- a/guardrails/api_client.py +++ b/guardrails/api_client.py @@ -13,6 +13,9 @@ ValidationOutcome as IValidationOutcome, ) +from guardrails_api_client.exceptions import BadRequestException +from guardrails.errors import ValidationError + from guardrails.logger import logger @@ -58,16 +61,19 @@ def validate( payload: ValidatePayload, openai_api_key: Optional[str] = None, ): - _openai_api_key = ( - openai_api_key - if openai_api_key is not None - else os.environ.get("OPENAI_API_KEY") - ) - return self._validate_api.validate( - guard_name=guard.name, - validate_payload=payload, - x_openai_api_key=_openai_api_key, - ) + try: + _openai_api_key = ( + openai_api_key + if openai_api_key is not None + else os.environ.get("OPENAI_API_KEY") + ) + return self._validate_api.validate( + guard_name=guard.name, + validate_payload=payload, + x_openai_api_key=_openai_api_key, + ) + except BadRequestException as e: + raise ValidationError(f"{e.body}") def stream_validate( self, diff --git a/guardrails/guard.py b/guardrails/guard.py index 62dd91e79..50147bdd4 100644 --- a/guardrails/guard.py +++ b/guardrails/guard.py @@ -91,10 +91,9 @@ json_function_calling_tool as json_function_calling_tool_util, output_format_json_schema as output_format_json_schema, ) -from guardrails.decorators.experimental import experimental from guardrails.settings import settings -from guardrails.errors import ValidationError +from guardrails.decorators.experimental import experimental class Guard(IGuard, Generic[OT]): @@ -1175,16 +1174,11 @@ def upsert_guard(self): def _single_server_call(self, *, payload: Dict[str, Any]) -> ValidationOutcome[OT]: if settings.use_server and self._api_client: - try: - validation_output: IValidationOutcome = self._api_client.validate( - guard=self, # type: ignore - payload=ValidatePayload.from_dict(payload), # type: ignore - openai_api_key=get_call_kwarg("api_key"), - ) - except Exception as e: - if e.status and e.status == 400: - raise ValidationError(f"{e.body}") - raise e + validation_output: IValidationOutcome = self._api_client.validate( + guard=self, # type: ignore + payload=ValidatePayload.from_dict(payload), # type: ignore + openai_api_key=get_call_kwarg("api_key"), + ) if not validation_output: return ValidationOutcome[OT]( call_id="0", # type: ignore