fix: handle string input in Azure guardrails for Responses API

Address Greptile review — the Responses API allows input as either:
- A list of message objects: [{"role": "user", "content": "..."}]
- A plain string: "What is the capital of France?"

The previous fix passed data["input"] directly to get_user_prompt(),
which would crash with AttributeError when input is a string (iterating
over characters instead of message dicts).

Now uses isinstance checks to handle both formats: wrap strings into
a message object, pass lists directly.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
rudra717 2026-04-06 10:21:15 -07:00
parent 487117042c
commit e411f202fd
2 changed files with 16 additions and 2 deletions

View file

@ -134,7 +134,14 @@ class AzureContentSafetyPromptShieldGuardrail(AzureGuardrailBase, CustomGuardrai
"Azure Prompt Shield: Running pre-call prompt scan, on call_type: %s",
call_type,
)
new_messages: Optional[List[AllMessageValues]] = data.get("messages") or data.get("input")
new_messages: Optional[List[AllMessageValues]] = data.get("messages")
if new_messages is None:
# Responses API uses "input" instead of "messages"
input_data = data.get("input")
if isinstance(input_data, str):
new_messages = [{"role": "user", "content": input_data}]
elif isinstance(input_data, list):
new_messages = input_data
if new_messages is None:
verbose_proxy_logger.warning(
"Azure Prompt Shield: not running guardrail. No messages in data"

View file

@ -227,7 +227,14 @@ class AzureContentSafetyTextModerationGuardrail(AzureGuardrailBase, CustomGuardr
"Azure Text Moderation: Running pre-call prompt scan, on call_type: %s",
call_type,
)
new_messages: Optional[List[AllMessageValues]] = data.get("messages") or data.get("input")
new_messages: Optional[List[AllMessageValues]] = data.get("messages")
if new_messages is None:
# Responses API uses "input" instead of "messages"
input_data = data.get("input")
if isinstance(input_data, str):
new_messages = [{"role": "user", "content": input_data}]
elif isinstance(input_data, list):
new_messages = input_data
if new_messages is None:
verbose_proxy_logger.warning(
"Azure Text Moderation: not running guardrail. No messages in data"