OpenAI Agents Python 21 files ยท 0 subfolders
Copy to Workspace 14_CONFIGURATION Shared from "OpenAI Agents Python" on Inkdown
Configuration - Comprehensive Deep Dive
Overview
Configuration in the OpenAI Agents SDK controls how agents and runs behave. Think of Configuration as "settings" or "preferences" that you can set at different levels - globally, per-run, or per-agent. These settings control everything from which model to use to how many turns are allowed, from tracing behavior to sandbox configuration.
Core Concepts
Configuration Hierarchy
Configuration flows from most specific to most general:
Agent-level - Settings on the Agent instance (highest priority)
RunConfig-level - Settings for a specific run
Global defaults - Default settings for the SDK (lowest priority)
This means:
Agent settings override RunConfig settings
RunConfig settings override global defaults
If not set, the next level down is used
01_AGENT_SYSTEM.md
Why Configuration Matters
Flexibility - Adjust behavior without code changes
Environment Differences - Different settings for dev/staging/prod
A/B Testing - Test different configurations
Cost Control - Manage token usage and costs
Safety - Configure guardrails and approvals
Performance - Optimize for speed or quality
RunConfig
RunConfig Overview RunConfig is the main configuration class for agent runs:
Python
from agents import RunConfig
config = RunConfig(
model="gpt-4o" ,
model_settings=ModelSettings(temperature=0.7 ),
max_turns=20 ,
tracing_disabled=False ,
workflow_name="My workflow" ,
)
Model Configuration
Model Selection Python
config = RunConfig(
model="gpt-4o" ,
)
Force a specific model for all agents
Test different models without changing agent code
A/B test models
Model Provider Python
from agents import MultiProvider, OpenAIProvider
config = RunConfig(
model_provider=MultiProvider([
OpenAIProvider(),
AnthropicProvider(),
]),
)
Use multiple model providers
Provide fallback providers
Test different providers
Model Settings Python
from agents import ModelSettings
config = RunConfig(
model_settings=ModelSettings(
temperature=0.7 ,
top_p=0.9 ,
max_tokens=1000 ,
),
)
Set global model parameters
Override agent-specific settings
Tune model behavior
Handoff Configuration
Handoff Input Filter Python
def filter_handoff_input (data: HandoffInputData ) -> HandoffInputData:
"""Filter input passed to next agent."""
return data.clone(new_items=data.new_items[-5 :])
config = RunConfig(
handoff_input_filter=filter_handoff_input,
)
Control what information is passed between agents
Reduce token usage in handoffs
Filter sensitive information
Nested Handoff History Python
config = RunConfig(
nest_handoff_history=True ,
)
Reduce token usage in deep handoff chains
Simplify context for nested agents
Optimize for long conversations
Handoff History Mapper Python
def custom_mapper (history: list ) -> list :
"""Custom history transformation."""
return [item for item in history if item["role" ] in ["user" , "assistant" ]]
config = RunConfig(
handoff_history_mapper=custom_mapper,
)
Custom history transformation
Filter specific message types
Add summary messages
Guardrail Configuration
Input Guardrails Python
from agents import input_guardrail
@input_guardrail
def global_input_check (context, agent, input ):
"""Global input guardrail."""
return GuardrailFunctionOutput(
output_info="Valid" ,
tripwire_triggered=False ,
)
config = RunConfig(
input_guardrails=[global_input_check],
)
Apply guardrails to all agents
Global safety checks
Global validation rules
Output Guardrails Python
from agents import output_guardrail
@output_guardrail
def global_output_check (context, agent, output ):
"""Global output guardrail."""
return GuardrailFunctionOutput(
output_info="Valid" ,
tripwire_triggered=False ,
)
config = RunConfig(
output_guardrails=[global_output_check],
)
Apply output validation to all agents
Global safety checks
Global formatting rules
Tracing Configuration
Disable Tracing Python
config = RunConfig(
tracing_disabled=True ,
)
Improve performance
Reduce overhead
Privacy requirements
Tracing Config Python
from agents import TracingConfig
config = RunConfig(
tracing=TracingConfig(
disabled=False ,
include_sensitive_data=False ,
),
)
Fine-grained tracing control
Custom tracing behavior
Integration with tracing systems
Sensitive Data Python
config = RunConfig(
trace_include_sensitive_data=False ,
)
Privacy compliance
Security requirements
Reduce trace size
Workflow Name Python
config = RunConfig(
workflow_name="Customer Support Workflow" ,
)
Identify runs in traces
Organize traces by workflow
Analytics and reporting
Trace ID Python
config = RunConfig(
trace_id="custom-trace-id-123" ,
)
Link to external systems
Custom trace identification
Distributed tracing
Group ID Python
config = RunConfig(
group_id="conversation-123" ,
)
Link related traces
Group traces by conversation
User-level tracking
Trace Metadata Python
config = RunConfig(
trace_metadata={
"user_id" : "user-123" ,
"environment" : "production" ,
},
)
Add custom metadata
Filter traces by metadata
Analytics integration
Session Configuration
Session Settings Python
from agents import SessionSettings
config = RunConfig(
session_settings=SessionSettings(
max_items=50 ,
compaction_enabled=True ,
),
)
Control session behavior
Manage conversation history
Optimize token usage
Session Input Callback Python
def custom_input_callback (history, new_input ):
"""Custom input combination logic."""
return history[-10 :] + [new_input]
config = RunConfig(
session_input_callback=custom_input_callback,
)
Custom history combination
Special input processing
Context window management
Model Input Filter
Call Model Input Filter Python
from agents import CallModelInputFilter, ModelInputData
def filter_model_input (data: CallModelInputData ) -> ModelInputData:
"""Filter input before model call."""
return data
config = RunConfig(
call_model_input_filter=filter_model_input,
)
Modify input before model call
Stay within token limits
Add system prompts dynamically
Filter sensitive information
Tool Configuration
Tool Error Formatter Python
from agents import ToolErrorFormatter
def custom_error_formatter (args ) -> str :
"""Custom error formatting."""
return f"Custom error: {args.tool_name} failed"
config = RunConfig(
tool_error_formatter=custom_error_formatter,
)
Customize error messages
Provide user-friendly errors
Translate errors
Reasoning Configuration
Reasoning Item ID Policy Python
config = RunConfig(
reasoning_item_id_policy="omit" ,
)
None or "preserve" - Keep reasoning IDs as-is
"omit" - Strip reasoning IDs from model input
Reduce token usage
Privacy for reasoning content
Compatibility issues
Sandbox Configuration
SandboxRunConfig Python
from agents import SandboxRunConfig, SandboxConcurrencyLimits
config = RunConfig(
sandbox=SandboxRunConfig(
client=UnixLocalSandboxClient(),
concurrency_limits=SandboxConcurrencyLimits(
manifest_entries=4 ,
local_dir_files=10 ,
),
),
)
Configure sandbox execution
Set concurrency limits
Sandbox-specific options
Agent Configuration
Agent-Level Settings Agents have their own configuration:
Python
from agents import Agent, ModelSettings
agent = Agent(
name="my_agent" ,
instructions="..." ,
model="gpt-4o" ,
model_settings=ModelSettings(temperature=0.7 ),
input_guardrails=[guardrail1],
output_guardrails=[guardrail2],
max_turns=10 ,
)
Configuration Priority Agent settings override RunConfig:
Python
agent = Agent(model="gpt-4o" , ...)
config = RunConfig(model="gpt-4o-mini" )
result = await Runner.run(agent, input , run_config=config)
Model Settings Merging Model settings are merged:
Python
agent = Agent(model_settings=ModelSettings(temperature=0.7 ), ...)
config = RunConfig(model_settings=ModelSettings(temperature=0.5 , top_p=0.9 ))
Global Configuration
Default OpenAI Key Python
from agents import set_default_openai_key
set_default_openai_key("your-api-key" )
Default OpenAI API Python
from agents import set_default_openai_api
set_default_openai_api("responses" )
Default Tracing Python
from agents import set_tracing_disabled
set_tracing_disabled(True )
Default Agent Registration Python
from agents import register_agent, get_agent
register_agent("my_agent" , my_agent)
retrieved_agent = get_agent("my_agent" )
Harness ID Python
from agents import set_harness_id
set_harness_id("my-harness-123" )
Verbose Logging Python
from agents import enable_verbose_logging
enable_verbose_logging()
Environment Variables
OpenAI API Key Bash
export OPENAI_API_KEY="your-api-key"
Tracing Settings Bash
export OPENAI_AGENTS_TRACING_DISABLED="true"
export OPENAI_AGENTS_TRACE_INCLUDE_SENSITIVE_DATA="false"
Verbose Logging Bash
export OPENAI_AGENTS_VERBOSE="true"
Configuration Patterns
1. Environment-Based Configuration Different configs for different environments:
Python
import os
def get_config () -> RunConfig:
"""Get config based on environment."""
env = os.getenv("ENVIRONMENT" , "dev" )
if env == "production" :
return RunConfig(
model="gpt-4o" ,
tracing_disabled=False ,
)
elif env == "staging" :
return RunConfig(
model="gpt-4o-mini" ,
tracing_disabled=False ,
)
else :
return RunConfig(
model="gpt-4o-mini" ,
tracing_disabled=True ,
)
2. User-Based Configuration Different configs for different users:
Python
def get_config_for_user (user_tier: str ) -> RunConfig:
"""Get config based on user tier."""
if user_tier == "enterprise" :
return RunConfig(
model="gpt-4-turbo" ,
max_turns=50 ,
)
elif user_tier == "premium" :
return RunConfig(
model="gpt-4o" ,
max_turns=20 ,
)
else :
return RunConfig(
model="gpt-4o-mini" ,
max_turns=10 ,
)
3. Task-Based Configuration Different configs for different tasks:
Python
def get_config_for_task (task_type: str ) -> RunConfig:
"""Get config based on task type."""
if task_type == "complex_reasoning" :
return RunConfig(
model="gpt-4o" ,
model_settings=ModelSettings(temperature=0.1 ),
)
elif task_type == "creative_writing" :
return RunConfig(
model="gpt-4o" ,
model_settings=ModelSettings(temperature=0.9 ),
)
else :
return RunConfig(
model="gpt-4o-mini" ,
model_settings=ModelSettings(temperature=0.7 ),
)
4. Cost-Optimized Configuration Python
def get_cost_optimized_config () -> RunConfig:
"""Get cost-optimized config."""
return RunConfig(
model="gpt-4o-mini" ,
model_settings=ModelSettings(
max_tokens=500 ,
temperature=0.3 ,
),
session_settings=SessionSettings(
max_items=20 ,
),
nest_handoff_history=True ,
)
5. Performance-Optimized Configuration Python
def get_fast_config () -> RunConfig:
"""Get fast config."""
return RunConfig(
model="gpt-4o-mini" ,
tracing_disabled=True ,
session_settings=SessionSettings(
max_items=10 ,
),
)
Configuration Validation
Validating RunConfig Validate configuration before use:
Python
def validate_config (config: RunConfig ) -> bool :
"""Validate RunConfig."""
if config.model and not is_valid_model(config.model):
return False
if config.model_settings:
if config.model_settings.temperature < 0 or config.model_settings.temperature > 2 :
return False
if config.max_turns < 1 :
return False
return True
Configuration Errors Handle configuration errors:
Python
try :
config = RunConfig(model="invalid-model" )
result = except Runner.run(agent, input , run_config=config)
except InvalidModelError as e:
print (f"Invalid model: {e} " )
Configuration Best Practices
1. Use Configuration Files Store configuration in files:
Python
model: "gpt-4o"
temperature: 0.7
max_turns: 20
import yaml
with open ("config.yaml" ) as f:
config_data = yaml.safe_load(f)
config = RunConfig(
model=config_data["model" ],
model_settings=ModelSettings(temperature=config_data["temperature" ]),
)
2. Use Environment Variables Use environment for sensitive data:
Python
import os
config = RunConfig(
)
3. Document Configuration Document configuration options:
Python
"""
Configuration for agent runs.
Environment variables:
- MODEL: Model to use (default: gpt-4o)
- TEMPERATURE: Temperature (default: 0.7)
- MAX_TURNS: Maximum turns (default: 10)
"""
def get_config () -> RunConfig:
"""Get configuration from environment."""
return RunConfig(
model=os.getenv("MODEL" , "gpt-4o" ),
model_settings=ModelSettings(
temperature=float (os.getenv("TEMPERATURE" , "0.7" )),
),
max_turns=int (os.getenv("MAX_TURNS" , "10" )),
)
4. Use Configuration Validation Validate configuration early:
Python
config = get_config()
if not validate_config(config):
raise ValueError("Invalid configuration" )
result = await Runner.run(agent, input , run_config=config)
5. Keep Configuration Simple Don't over-engineer configuration:
Python
config = RunConfig(
model="gpt-4o" ,
max_turns=10 ,
)
config = RunConfig(
model="gpt-4o" ,
model_settings=ModelSettings(
temperature=0.7 ,
top_p=0.9 ,
max_tokens=1000 ,
presence_penalty=0.0 ,
frequency_penalty=0.0 ,
),
handoff_input_filter=complex_filter,
handoff_history_mapper=complex_mapper,
input_guardrails=[guardrail1, guardrail2, guardrail3],
output_guardrails=[guardrail4, guardrail5],
tracing=TracingConfig(...),
session_settings=SessionSettings(...),
)
Configuration and Testing
Test Configuration Test with different configurations:
Python
@pytest.mark.asyncio
async def test_with_fast_config ():
"""Test with fast configuration."""
config = RunConfig(
model="gpt-4o-mini" ,
max_turns=5 ,
)
result = await Runner.run(agent, input , run_config=config)
assert result.final_output is not None
@pytest.mark.asyncio
async def test_with_slow_config ():
"""Test with slow configuration."""
config = RunConfig(
model="gpt-4o" ,
max_turns=20 ,
)
result = await Runner.run(agent, input , run_config=config)
assert result.final_output is not None
Configuration Fixtures Use fixtures for common configurations:
Python
@pytest.fixture
def fast_config ():
"""Fast configuration fixture."""
return RunConfig(
model="gpt-4o-mini" ,
max_turns=5 ,
)
@pytest.mark.asyncio
async def test_with_fixture (fast_config ):
"""Test with configuration fixture."""
result = await Runner.run(agent, input , run_config=fast_config)
assert result.final_output is not None
Configuration and Deployment
Configuration in Production Use production-specific configuration:
Python
def get_production_config () -> RunConfig:
"""Production configuration."""
return RunConfig(
model="gpt-4o" ,
tracing_disabled=False ,
workflow_name="Production Workflow" ,
trace_metadata={"environment" : "production" },
)
Configuration in Development Use development-specific configuration:
Python
def get_development_config () -> RunConfig:
"""Development configuration."""
return RunConfig(
model="gpt-4o-mini" ,
tracing_disabled=True ,
workflow_name="Development Workflow" ,
)
Summary Configuration controls agent and run behavior. Key takeaways:
RunConfig is the main configuration class
Configuration hierarchy - Agent > RunConfig > Global
Model configuration - model, provider, settings
Handoff configuration - filters, history, mappers
Guardrail configuration - input and output guardrails
Tracing configuration - enable/disable, sensitive data
Session configuration - settings, input callbacks
Model input filter - filter before model call
Tool configuration - error formatting
Reasoning configuration - item ID policy
Sandbox configuration - client, concurrency limits
Agent configuration - agent-specific settings
Global configuration - API keys, defaults
Environment variables - external configuration
Configuration patterns - environment, user, task-based
Configuration validation - validate before use
Configuration files - store in files
Documentation - document configuration options
Testing - test with different configs
Deployment - different configs for different environments
Configuration is essential for flexible, maintainable, and environment-aware agent systems.