-
Notifications
You must be signed in to change notification settings - Fork 2.9k
fix: Wait for input guardrails before executing model requests (#889) #1950
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Wait for input guardrails before executing model requests (#889) #1950
Conversation
Fixes openai#889 When an input guardrail triggers a tripwire, tools (especially hosted tools like FileSearchTool) should not execute. Previously, input guardrails ran in parallel with model requests, creating a race condition where tools could execute before guardrails completed. This change makes input guardrail execution sequential: 1. Run input guardrails first and wait for completion 2. If any guardrail triggers, raise InputGuardrailTripwireTriggered 3. Only proceed with model request if all guardrails pass This ensures that: - No model requests are sent if guardrails trigger - Hosted tools (FileSearchTool) don't execute unnecessarily - Token consumption is prevented when input is blocked - Slow guardrails (e.g., calling external services) work correctly
Test FileAttaching comprehensive test file for Issue #889: File: This test file includes 4 test cases that verify the fix:
All tests pass after the fix. Test #4 specifically demonstrates the race condition bug and verifies the sequential execution fix. |
|
""" When an input guardrail triggers a tripwire, tools (especially hosted tools like FileSearchTool) Issue: #889 from future import annotations import asyncio import pytest from agents import ( from .fake_model import FakeModel class TestInputGuardrailBlocksToolExecution: Test Summary:1. test_input_guardrail_prevents_model_request_when_triggered- Core test that will FAIL before fix, PASS after fix- Verifies no model request sent when guardrail triggers2. test_input_guardrail_allows_model_request_when_safe- Baseline test that should PASS before and after fix- Ensures normal flow still works3. test_multiple_input_guardrails_block_on_first_trigger- Tests multiple guardrails scenario- Will FAIL before fix, PASS after fix4. test_slow_guardrail_still_blocks_model_request- Tests race condition with slow guardrails- Will FAIL before fix, PASS after fix- Critical for ensuring sequential execution |
|
Thanks for sending this patch, but we don't accept this for the same reason with #1914 (comment) |
PR #1622 better but it is close , should we continue it ? |
Fixes #889
Summary
When an input guardrail triggers a tripwire, tools (especially hosted tools like FileSearchTool) should not execute. Previously, input guardrails ran in parallel with model requests, creating a race condition where tools could execute before guardrails completed.
Changes
Modified
src/agents/run.pyto execute input guardrails sequentially before model requests:InputGuardrailTripwireTriggeredBenefits
Performance Impact
This change introduces sequential execution instead of parallel execution:
Before (parallel):
After (sequential):
Trade-off Analysis:
Typical impact is small (2-5% latency increase):
For slow guardrails (200-500ms, e.g., external API calls), impact is larger (10-25%).
Why sequential execution is necessary:
Cost savings outweigh latency:
Testing
Comprehensive test file attached:
tests/test_issue_889_guardrail_tool_execution.pyTests verify:
All existing tests pass (810 tests).