Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
358 changes: 304 additions & 54 deletions src/agents/run.py

Large diffs are not rendered by default.

26 changes: 26 additions & 0 deletions src/agents/run_internal/agent_runner_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from ..items import ModelResponse, RunItem, ToolApprovalItem, TResponseInputItem
from ..memory import Session
from ..models.openai_agent_registration import add_openai_harness_id_to_metadata
from ..models.openai_chatcompletions import OpenAIChatCompletionsModel
from ..result import RunResult
from ..run_config import ReasoningItemIdPolicy, RunConfig
from ..run_context import RunContextWrapper, TContext
Expand Down Expand Up @@ -42,6 +43,7 @@
)
from .session_persistence import save_result_to_session, save_resumed_turn_items
from .tool_use_tracker import AgentToolUseTracker, serialize_tool_use_tracker
from .turn_preparation import get_model

__all__ = [
"apply_resumed_conversation_settings",
Expand All @@ -55,6 +57,7 @@
"finalize_conversation_tracking",
"get_unsent_tool_call_ids_for_interrupted_state",
"input_guardrails_triggered",
"validate_output_guardrails_with_server_managed_conversation",
"validate_session_conversation_settings",
"resolve_trace_settings",
"resolve_processed_response",
Expand Down Expand Up @@ -257,6 +260,29 @@ def validate_session_conversation_settings(
)


def validate_output_guardrails_with_server_managed_conversation(
agent: Agent[Any],
run_config: RunConfig,
*,
conversation_id: str | None,
previous_response_id: str | None,
auto_previous_response_id: bool,
) -> None:
"""Reject an output-guardrail run whose rejected history cannot be locally replaced."""
if conversation_id is None and previous_response_id is None and not auto_previous_response_id:
return
if not agent.output_guardrails and not run_config.output_guardrails:
return
if isinstance(get_model(agent, run_config), OpenAIChatCompletionsModel):
# Chat Completions owns its released warn-and-ignore or strict rejection behavior.
return
raise UserError(
"Output guardrails cannot be combined with conversation_id, previous_response_id, "
"or auto_previous_response_id because rejected output cannot be removed from "
"server-managed conversation history."
Comment thread
seratch marked this conversation as resolved.
)


def resolve_trace_settings(
*,
run_state: RunState[TContext] | None,
Expand Down
Loading
Loading