mohsin / guardrails /guardrails_input_function.py
MuhammadSaad16's picture
Add application file
cb3f557
import traceback
from agents import RunContextWrapper, Runner, GuardrailFunctionOutput, input_guardrail
from guardrails.input_guardrails import guardrail_agent
@input_guardrail
async def guardrail_input_function(ctx: RunContextWrapper, agent, user_input: str):
try:
result = await Runner.run(
guardrail_agent,
input=user_input,
context=ctx.context
)
# Check if result has the expected structure
if not result or not hasattr(result, 'final_output'):
print(f"Warning: Guardrail agent returned unexpected result: {result}")
# Allow the query to proceed if guardrail fails
return GuardrailFunctionOutput(
output_info=None,
tripwire_triggered=False
)
final_output = result.final_output
# Check if final_output has the expected attribute
if not hasattr(final_output, 'is_query_about_jobobike'):
print(f"Warning: Guardrail output missing is_query_about_jobobike attribute: {final_output}")
return GuardrailFunctionOutput(
output_info=final_output,
tripwire_triggered=False
)
return GuardrailFunctionOutput(
output_info=final_output,
tripwire_triggered=not final_output.is_query_about_jobobike
)
except Exception as e:
error_str = str(e)
# Check if it's an API key error
if "API key" in error_str or "expired" in error_str.lower() or "INVALID_ARGUMENT" in error_str:
print(f"API key error in guardrail - allowing query through: {error_str[:100]}")
else:
print(f"Error in guardrail_input_function: {error_str[:200]}")
print(traceback.format_exc())
# Always allow the query to proceed if guardrail fails (especially for API errors)
return GuardrailFunctionOutput(
output_info=None,
tripwire_triggered=False
)