openai-agents 0.2.6__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openai-agents might be problematic. Click here for more details.
- {openai_agents-0.2.6 → openai_agents-0.2.8}/PKG-INFO +1 -1
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/agents.md +1 -1
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/handoffs.md +1 -0
- openai_agents-0.2.8/docs/ja/agents.md +248 -0
- openai_agents-0.2.8/docs/ja/config.md +98 -0
- openai_agents-0.2.8/docs/ja/context.md +82 -0
- openai_agents-0.2.8/docs/ja/examples.md +48 -0
- openai_agents-0.2.8/docs/ja/guardrails.md +158 -0
- openai_agents-0.2.8/docs/ja/handoffs.md +118 -0
- openai_agents-0.2.8/docs/ja/index.md +58 -0
- openai_agents-0.2.8/docs/ja/mcp.md +191 -0
- openai_agents-0.2.8/docs/ja/models/index.md +151 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/models/litellm.md +10 -10
- openai_agents-0.2.8/docs/ja/multi_agent.md +41 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/quickstart.md +21 -21
- openai_agents-0.2.8/docs/ja/realtime/guide.md +176 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/realtime/quickstart.md +30 -31
- openai_agents-0.2.8/docs/ja/release.md +32 -0
- openai_agents-0.2.8/docs/ja/repl.md +23 -0
- openai_agents-0.2.8/docs/ja/results.md +56 -0
- openai_agents-0.2.8/docs/ja/running_agents.md +141 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/sessions.md +30 -30
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/streaming.md +8 -8
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/tools.md +62 -41
- openai_agents-0.2.8/docs/ja/tracing.md +150 -0
- openai_agents-0.2.8/docs/ja/visualization.md +105 -0
- openai_agents-0.2.8/docs/ja/voice/pipeline.md +79 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ja/voice/quickstart.md +8 -8
- openai_agents-0.2.8/docs/ja/voice/tracing.md +18 -0
- openai_agents-0.2.8/docs/ref/memory/session.md +3 -0
- openai_agents-0.2.8/docs/ref/realtime/handoffs.md +3 -0
- openai_agents-0.2.8/docs/ref/realtime/items.md +3 -0
- openai_agents-0.2.8/docs/ref/realtime/model_events.md +3 -0
- openai_agents-0.2.8/docs/ref/realtime/model_inputs.md +3 -0
- openai_agents-0.2.8/docs/ref/realtime/openai_realtime.md +3 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/scripts/translate_docs.py +13 -3
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/tools.md +21 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/agent_lifecycle_example.py +10 -5
- openai_agents-0.2.8/examples/basic/hello_world_gpt_oss.py +38 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/lifecycle_example.py +11 -6
- openai_agents-0.2.8/examples/basic/simple_gpt_5.py +30 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/stream_items.py +1 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/tools.py +1 -0
- openai_agents-0.2.8/examples/realtime/app/agent.py +93 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/pyproject.toml +1 -1
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/agent.py +130 -2
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/items.py +1 -2
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/model_settings.py +4 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/openai_chatcompletions.py +1 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/openai_responses.py +5 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/openai_realtime.py +4 -1
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/session.py +68 -11
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/run.py +105 -11
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/model_settings/test_serialization.py +1 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_session.py +120 -4
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_config.py +57 -0
- openai_agents-0.2.8/tests/test_agent_instructions_signature.py +113 -0
- openai_agents-0.2.8/tests/test_call_model_input_filter.py +79 -0
- openai_agents-0.2.8/tests/test_call_model_input_filter_unit.py +107 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_items_helpers.py +35 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_session.py +88 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/uv.lock +1 -1
- openai_agents-0.2.6/docs/ja/agents.md +0 -249
- openai_agents-0.2.6/docs/ja/config.md +0 -98
- openai_agents-0.2.6/docs/ja/context.md +0 -82
- openai_agents-0.2.6/docs/ja/examples.md +0 -47
- openai_agents-0.2.6/docs/ja/guardrails.md +0 -158
- openai_agents-0.2.6/docs/ja/handoffs.md +0 -117
- openai_agents-0.2.6/docs/ja/index.md +0 -58
- openai_agents-0.2.6/docs/ja/mcp.md +0 -191
- openai_agents-0.2.6/docs/ja/models/index.md +0 -153
- openai_agents-0.2.6/docs/ja/multi_agent.md +0 -50
- openai_agents-0.2.6/docs/ja/realtime/guide.md +0 -176
- openai_agents-0.2.6/docs/ja/release.md +0 -32
- openai_agents-0.2.6/docs/ja/repl.md +0 -23
- openai_agents-0.2.6/docs/ja/results.md +0 -56
- openai_agents-0.2.6/docs/ja/running_agents.md +0 -141
- openai_agents-0.2.6/docs/ja/tracing.md +0 -152
- openai_agents-0.2.6/docs/ja/visualization.md +0 -105
- openai_agents-0.2.6/docs/ja/voice/pipeline.md +0 -86
- openai_agents-0.2.6/docs/ja/voice/tracing.md +0 -18
- openai_agents-0.2.6/examples/realtime/app/agent.py +0 -36
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/codex/home/config.toml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/codex/labels/codex-attempt.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/codex/labels/codex-review.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/codex/labels/codex-triage.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/codex.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/docs.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/issues.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/publish.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/tests.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.github/workflows/update-docs.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.gitignore +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.prettierrc +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.vscode/launch.json +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/.vscode/settings.json +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/AGENTS.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/CLAUDE.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/LICENSE +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/Makefile +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/assets/images/favicon-platform.svg +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/assets/images/graph.png +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/assets/images/mcp-tracing.jpg +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/assets/images/orchestration.png +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/assets/logo.svg +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/config.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/context.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/examples.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/guardrails.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/index.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/mcp.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/models/index.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/models/litellm.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/multi_agent.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/quickstart.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/realtime/guide.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/realtime/quickstart.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/agent.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/agent_output.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/computer.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/exceptions.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/handoff_filters.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/handoff_prompt.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/litellm.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/models/litellm_model.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/models/litellm_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/extensions/visualization.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/function_schema.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/guardrail.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/handoffs.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/index.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/items.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/lifecycle.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/logger.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/mcp/server.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/mcp/util.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/memory.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/model_settings.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/chatcmpl_converter.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/chatcmpl_helpers.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/chatcmpl_stream_handler.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/fake_id.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/interface.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/multi_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/openai_chatcompletions.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/openai_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/models/openai_responses.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/prompts.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/agent.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/config.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/events.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/model.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/runner.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/realtime/session.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/repl.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/result.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/run.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/run_context.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/stream_events.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/strict_schema.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tool.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tool_context.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/create.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/index.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/logger.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/processor_interface.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/processors.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/scope.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/setup.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/span_data.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/spans.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/traces.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/tracing/util.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/usage.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/version.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/events.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/exceptions.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/imports.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/input.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/model.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/models/openai_model_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/models/openai_provider.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/models/openai_stt.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/models/openai_tts.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/pipeline.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/pipeline_config.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/result.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/utils.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/ref/voice/workflow.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/release.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/repl.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/results.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/running_agents.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/scripts/generate_ref_files.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/sessions.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/streaming.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/stylesheets/extra.css +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/tracing.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/visualization.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/voice/pipeline.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/voice/quickstart.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/docs/voice/tracing.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/agents_as_tools.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/deterministic.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/forcing_tool_use.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/input_guardrails.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/llm_as_a_judge.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/output_guardrails.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/parallelization.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/routing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/agent_patterns/streaming_guardrails.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/dynamic_system_prompt.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/hello_world.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/hello_world_jupyter.ipynb +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/local_image.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/media/image_bison.jpg +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/non_strict_output_type.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/previous_response_id.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/prompt_template.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/remote_image.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/remote_pdf.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/session_example.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/stream_function_call_args.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/basic/stream_text.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/customer_service/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/financials_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/planner_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/risk_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/search_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/agents/writer_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/manager.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/financial_research_agent/printer.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/handoffs/message_filter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/handoffs/message_filter_streaming.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/hosted_mcp/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/hosted_mcp/approvals.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/hosted_mcp/simple.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/filesystem_example/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/filesystem_example/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/git_example/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/git_example/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/prompt_server/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/prompt_server/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/prompt_server/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/sse_example/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/sse_example/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/sse_example/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/streamablehttp_example/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/streamablehttp_example/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/mcp/streamablehttp_example/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/custom_example_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/custom_example_global.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/custom_example_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/litellm_auto.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/model_providers/litellm_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/app/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/app/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/app/static/app.js +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/app/static/index.html +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/cli/demo.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/cli/ui.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/twilio/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/twilio/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/twilio/requirements.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/twilio/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/realtime/twilio/twilio_handler.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/reasoning_content/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/reasoning_content/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/reasoning_content/runner_example.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/agents/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/agents/planner_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/agents/search_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/agents/writer_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/manager.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/printer.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/sample_outputs/product_recs.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/sample_outputs/vacation.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/research_bot/sample_outputs/vacation.txt +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/tools/code_interpreter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/tools/computer_use.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/tools/file_search.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/tools/image_generator.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/tools/web_search.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/static/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/static/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/static/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/static/util.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/streamed/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/streamed/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/streamed/main.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/examples/voice/streamed/my_workflow.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/mkdocs.yml +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/_config.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/_debug.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/_run_impl.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/agent_output.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/computer.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/exceptions.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/handoff_filters.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/handoff_prompt.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/models/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/models/litellm_model.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/models/litellm_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/extensions/visualization.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/function_schema.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/guardrail.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/handoffs.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/lifecycle.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/logger.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/mcp/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/mcp/server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/mcp/util.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/memory/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/memory/session.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/_openai_shared.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/chatcmpl_converter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/chatcmpl_helpers.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/chatcmpl_stream_handler.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/fake_id.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/interface.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/multi_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/models/openai_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/prompts.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/py.typed +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/_default_tracker.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/_util.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/config.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/handoffs.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/items.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/model.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/model_events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/model_inputs.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/realtime/runner.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/repl.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/result.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/run_context.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/stream_events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/strict_schema.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tool.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tool_context.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/create.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/logger.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/processor_interface.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/processors.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/scope.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/setup.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/span_data.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/spans.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/traces.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/tracing/util.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/usage.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_coro.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_error_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_json.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_pretty_print.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_transforms.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/util/_types.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/version.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/exceptions.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/imports.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/input.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/model.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/models/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/models/openai_model_provider.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/models/openai_stt.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/models/openai_tts.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/pipeline.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/pipeline_config.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/result.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/utils.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/src/agents/voice/workflow.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/README.md +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/conftest.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/fake_model.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/fastapi/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/fastapi/streaming_app.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/fastapi/test_streaming_context.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/conftest.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/helpers.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_caching.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_connect_disconnect.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_mcp_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_mcp_util.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_prompt_server.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_runner_calls_mcp.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_server_errors.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/mcp/test_tool_filtering.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/conftest.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/test_kwargs_functionality.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/test_litellm_chatcompletions_stream.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/test_litellm_extra_body.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/models/test_map.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_agent.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_conversion_helpers.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_item_parsing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_model_events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_openai_realtime.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_playback_tracker.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_realtime_handoffs.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_runner.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/realtime/test_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_clone_shallow_copy.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_hooks.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_prompt.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_runner.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_runner_streamed.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_agent_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_cancel_streaming.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_computer_action.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_config.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_doc_parsing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_extension_filters.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_extra_headers.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_function_schema.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_function_tool.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_function_tool_decorator.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_global_hooks.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_guardrails.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_handoff_tool.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_logprobs.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_max_turns.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_openai_chatcompletions.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_openai_chatcompletions_converter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_openai_chatcompletions_stream.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_openai_responses_converter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_output_tool.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_pretty_print.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_reasoning_content.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_repl.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_responses.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_responses_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_result_cast.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_run.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_run_config.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_run_error_details.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_run_step_execution.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_run_step_processing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_session_exceptions.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_stream_events.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_strict_schema.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tool_choice_reset.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tool_converter.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tool_use_behavior.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_trace_processor.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tracing.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tracing_errors.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_tracing_errors_streamed.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_usage.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/test_visualization.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/testing_processor.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/tracing/test_processor_api_key.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/tracing/test_set_api_key_fix.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/__init__.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/conftest.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/fake_models.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/helpers.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/test_input.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/test_openai_stt.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/test_openai_tts.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/test_pipeline.py +0 -0
- {openai_agents-0.2.6 → openai_agents-0.2.8}/tests/voice/test_workflow.py +0 -0
|
@@ -115,7 +115,7 @@ Sometimes, you want to observe the lifecycle of an agent. For example, you may w
|
|
|
115
115
|
|
|
116
116
|
## Guardrails
|
|
117
117
|
|
|
118
|
-
Guardrails allow you to run checks/validations on user input
|
|
118
|
+
Guardrails allow you to run checks/validations on user input in parallel to the agent running, and on the agent's output once it is produced. For example, you could screen the user's input and agent's output for relevance. Read more in the [guardrails](guardrails.md) documentation.
|
|
119
119
|
|
|
120
120
|
## Cloning/copying agents
|
|
121
121
|
|
|
@@ -36,6 +36,7 @@ The [`handoff()`][agents.handoffs.handoff] function lets you customize things.
|
|
|
36
36
|
- `on_handoff`: A callback function executed when the handoff is invoked. This is useful for things like kicking off some data fetching as soon as you know a handoff is being invoked. This function receives the agent context, and can optionally also receive LLM generated input. The input data is controlled by the `input_type` param.
|
|
37
37
|
- `input_type`: The type of input expected by the handoff (optional).
|
|
38
38
|
- `input_filter`: This lets you filter the input received by the next agent. See below for more.
|
|
39
|
+
- `is_enabled`: Whether the handoff is enabled. This can be a boolean or a function that returns a boolean, allowing you to dynamically enable or disable the handoff at runtime.
|
|
39
40
|
|
|
40
41
|
```python
|
|
41
42
|
from agents import Agent, handoff, RunContextWrapper
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# エージェント
|
|
6
|
+
|
|
7
|
+
エージェントはアプリにおける中核的な構成要素です。エージェントは、 instructions と tools で構成された大規模言語モデル ( LLM ) です。
|
|
8
|
+
|
|
9
|
+
## 基本構成
|
|
10
|
+
|
|
11
|
+
エージェントで最も一般的に設定するプロパティは次のとおりです。
|
|
12
|
+
|
|
13
|
+
- `name`: エージェントを識別する必須の文字列です。
|
|
14
|
+
- `instructions`: developer メッセージ、または system prompt とも呼ばれます。
|
|
15
|
+
- `model`: 使用する LLM と、 temperature、 top_p などのモデル調整パラメーターを設定する任意の `model_settings`。
|
|
16
|
+
- `tools`: エージェントがタスク達成のために使用できるツールです。
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
from agents import Agent, ModelSettings, function_tool
|
|
20
|
+
|
|
21
|
+
@function_tool
|
|
22
|
+
def get_weather(city: str) -> str:
|
|
23
|
+
"""returns weather info for the specified city."""
|
|
24
|
+
return f"The weather in {city} is sunny"
|
|
25
|
+
|
|
26
|
+
agent = Agent(
|
|
27
|
+
name="Haiku agent",
|
|
28
|
+
instructions="Always respond in haiku form",
|
|
29
|
+
model="o3-mini",
|
|
30
|
+
tools=[get_weather],
|
|
31
|
+
)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## コンテキスト
|
|
35
|
+
|
|
36
|
+
エージェントは `context` 型に対してジェネリックです。コンテキストは依存性注入のためのツールで、あなたが作成して `Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェント実行のための依存関係や状態をまとめたものとして機能します。コンテキストには任意の Python オブジェクトを提供できます。
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
@dataclass
|
|
40
|
+
class UserContext:
|
|
41
|
+
name: str
|
|
42
|
+
uid: str
|
|
43
|
+
is_pro_user: bool
|
|
44
|
+
|
|
45
|
+
async def fetch_purchases() -> list[Purchase]:
|
|
46
|
+
return ...
|
|
47
|
+
|
|
48
|
+
agent = Agent[UserContext](
|
|
49
|
+
...,
|
|
50
|
+
)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 出力タイプ
|
|
54
|
+
|
|
55
|
+
既定では、エージェントはプレーンテキスト ( `str` ) を出力します。特定のタイプの出力を生成したい場合は、 `output_type` パラメーターを使用できます。一般的な選択肢は [Pydantic](https://docs.pydantic.dev/) オブジェクトの使用ですが、 Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップできる任意の型 ( dataclass、 list、 TypedDict など ) をサポートします。
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
from pydantic import BaseModel
|
|
59
|
+
from agents import Agent
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class CalendarEvent(BaseModel):
|
|
63
|
+
name: str
|
|
64
|
+
date: str
|
|
65
|
+
participants: list[str]
|
|
66
|
+
|
|
67
|
+
agent = Agent(
|
|
68
|
+
name="Calendar extractor",
|
|
69
|
+
instructions="Extract calendar events from text",
|
|
70
|
+
output_type=CalendarEvent,
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
!!! note
|
|
75
|
+
|
|
76
|
+
`output_type` を渡すと、モデルは通常のプレーンテキスト応答ではなく [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用するようになります。
|
|
77
|
+
|
|
78
|
+
## ハンドオフ
|
|
79
|
+
|
|
80
|
+
ハンドオフは、エージェントが委譲できるサブエージェントです。ハンドオフのリストを提供すると、関連がある場合にエージェントはそれらへ委譲できます。これは、単一のタスクに特化したモジュール式のエージェントをオーケストレーションする強力なパターンです。詳しくは [handoffs](handoffs.md) のドキュメントを参照してください。
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from agents import Agent
|
|
84
|
+
|
|
85
|
+
booking_agent = Agent(...)
|
|
86
|
+
refund_agent = Agent(...)
|
|
87
|
+
|
|
88
|
+
triage_agent = Agent(
|
|
89
|
+
name="Triage agent",
|
|
90
|
+
instructions=(
|
|
91
|
+
"Help the user with their questions."
|
|
92
|
+
"If they ask about booking, handoff to the booking agent."
|
|
93
|
+
"If they ask about refunds, handoff to the refund agent."
|
|
94
|
+
),
|
|
95
|
+
handoffs=[booking_agent, refund_agent],
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 動的 instructions
|
|
100
|
+
|
|
101
|
+
多くの場合、エージェント作成時に instructions を指定しますが、関数を通じて動的な instructions を提供することもできます。関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。通常の関数と `async` 関数の両方が利用可能です。
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
def dynamic_instructions(
|
|
105
|
+
context: RunContextWrapper[UserContext], agent: Agent[UserContext]
|
|
106
|
+
) -> str:
|
|
107
|
+
return f"The user's name is {context.context.name}. Help them with their questions."
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
agent = Agent[UserContext](
|
|
111
|
+
name="Triage agent",
|
|
112
|
+
instructions=dynamic_instructions,
|
|
113
|
+
)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## ライフサイクルイベント (フック)
|
|
117
|
+
|
|
118
|
+
エージェントのライフサイクルを観測したい場合があります。たとえば、イベントをログ記録したい、または特定のイベント発生時にデータを事前取得したい場合です。 `hooks` プロパティでエージェントのライフサイクルにフックできます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、関心のあるメソッドをオーバーライドしてください。
|
|
119
|
+
|
|
120
|
+
## ガードレール
|
|
121
|
+
|
|
122
|
+
ガードレールにより、エージェント実行と並行してユーザー入力に対するチェックや検証を行い、生成後のエージェント出力にも同様の処理を行えます。たとえば、ユーザー入力やエージェント出力の関連性をスクリーニングできます。詳しくは [guardrails](guardrails.md) のドキュメントを参照してください。
|
|
123
|
+
|
|
124
|
+
## エージェントのクローン/コピー
|
|
125
|
+
|
|
126
|
+
エージェントの `clone()` メソッドを使用すると、エージェントを複製し、必要に応じて任意のプロパティを変更できます。
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
pirate_agent = Agent(
|
|
130
|
+
name="Pirate",
|
|
131
|
+
instructions="Write like a pirate",
|
|
132
|
+
model="o3-mini",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
robot_agent = pirate_agent.clone(
|
|
136
|
+
name="Robot",
|
|
137
|
+
instructions="Write like a robot",
|
|
138
|
+
)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## ツール使用の強制
|
|
142
|
+
|
|
143
|
+
ツールのリストを指定しても、 LLM が必ずツールを使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定してツール使用を強制できます。有効な値は次のとおりです。
|
|
144
|
+
|
|
145
|
+
1. `auto`: ツールを使用するかどうかを LLM に委ねます。
|
|
146
|
+
2. `required`: LLM にツールの使用を要求します ( どのツールを使うかは賢く選択できます )。
|
|
147
|
+
3. `none`: ツールを使用しないことを要求します。
|
|
148
|
+
4. 特定の文字列 ( 例: `my_tool` ) を設定: LLM にその特定のツールの使用を要求します。
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
from agents import Agent, Runner, function_tool, ModelSettings
|
|
152
|
+
|
|
153
|
+
@function_tool
|
|
154
|
+
def get_weather(city: str) -> str:
|
|
155
|
+
"""Returns weather info for the specified city."""
|
|
156
|
+
return f"The weather in {city} is sunny"
|
|
157
|
+
|
|
158
|
+
agent = Agent(
|
|
159
|
+
name="Weather Agent",
|
|
160
|
+
instructions="Retrieve weather details.",
|
|
161
|
+
tools=[get_weather],
|
|
162
|
+
model_settings=ModelSettings(tool_choice="get_weather")
|
|
163
|
+
)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## ツール使用の挙動
|
|
167
|
+
|
|
168
|
+
`Agent` の構成にある `tool_use_behavior` パラメーターは、ツール出力の処理方法を制御します。
|
|
169
|
+
- `"run_llm_again"`: 既定。ツールを実行し、その結果を LLM が処理して最終応答を生成します。
|
|
170
|
+
- `"stop_on_first_tool"`: 最初のツール呼び出しの出力を、その後の LLM 処理なしに最終応答として使用します。
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
from agents import Agent, Runner, function_tool, ModelSettings
|
|
174
|
+
|
|
175
|
+
@function_tool
|
|
176
|
+
def get_weather(city: str) -> str:
|
|
177
|
+
"""Returns weather info for the specified city."""
|
|
178
|
+
return f"The weather in {city} is sunny"
|
|
179
|
+
|
|
180
|
+
agent = Agent(
|
|
181
|
+
name="Weather Agent",
|
|
182
|
+
instructions="Retrieve weather details.",
|
|
183
|
+
tools=[get_weather],
|
|
184
|
+
tool_use_behavior="stop_on_first_tool"
|
|
185
|
+
)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
- `StopAtTools(stop_at_tool_names=[...])`: 指定されたいずれかのツールが呼び出されたら停止し、その出力を最終応答として使用します。
|
|
189
|
+
```python
|
|
190
|
+
from agents import Agent, Runner, function_tool
|
|
191
|
+
from agents.agent import StopAtTools
|
|
192
|
+
|
|
193
|
+
@function_tool
|
|
194
|
+
def get_weather(city: str) -> str:
|
|
195
|
+
"""Returns weather info for the specified city."""
|
|
196
|
+
return f"The weather in {city} is sunny"
|
|
197
|
+
|
|
198
|
+
@function_tool
|
|
199
|
+
def sum_numbers(a: int, b: int) -> int:
|
|
200
|
+
"""Adds two numbers."""
|
|
201
|
+
return a + b
|
|
202
|
+
|
|
203
|
+
agent = Agent(
|
|
204
|
+
name="Stop At Stock Agent",
|
|
205
|
+
instructions="Get weather or sum numbers.",
|
|
206
|
+
tools=[get_weather, sum_numbers],
|
|
207
|
+
tool_use_behavior=StopAtTools(stop_at_tool_names=["get_weather"])
|
|
208
|
+
)
|
|
209
|
+
```
|
|
210
|
+
- `ToolsToFinalOutputFunction`: ツール結果を処理し、停止するか LLM を継続するかを判断するカスタム関数です。
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
from agents import Agent, Runner, function_tool, FunctionToolResult, RunContextWrapper
|
|
214
|
+
from agents.agent import ToolsToFinalOutputResult
|
|
215
|
+
from typing import List, Any
|
|
216
|
+
|
|
217
|
+
@function_tool
|
|
218
|
+
def get_weather(city: str) -> str:
|
|
219
|
+
"""Returns weather info for the specified city."""
|
|
220
|
+
return f"The weather in {city} is sunny"
|
|
221
|
+
|
|
222
|
+
def custom_tool_handler(
|
|
223
|
+
context: RunContextWrapper[Any],
|
|
224
|
+
tool_results: List[FunctionToolResult]
|
|
225
|
+
) -> ToolsToFinalOutputResult:
|
|
226
|
+
"""Processes tool results to decide final output."""
|
|
227
|
+
for result in tool_results:
|
|
228
|
+
if result.output and "sunny" in result.output:
|
|
229
|
+
return ToolsToFinalOutputResult(
|
|
230
|
+
is_final_output=True,
|
|
231
|
+
final_output=f"Final weather: {result.output}"
|
|
232
|
+
)
|
|
233
|
+
return ToolsToFinalOutputResult(
|
|
234
|
+
is_final_output=False,
|
|
235
|
+
final_output=None
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
agent = Agent(
|
|
239
|
+
name="Weather Agent",
|
|
240
|
+
instructions="Retrieve weather details.",
|
|
241
|
+
tools=[get_weather],
|
|
242
|
+
tool_use_behavior=custom_tool_handler
|
|
243
|
+
)
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
!!! note
|
|
247
|
+
|
|
248
|
+
無限ループを防ぐため、フレームワークはツール呼び出し後に自動的に `tool_choice` を "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定できます。無限ループが起きるのは、ツール結果が LLM に送られ、`tool_choice` のために LLM が再びツール呼び出しを生成し続けるためです。
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# SDK の設定
|
|
6
|
+
|
|
7
|
+
## API キーとクライアント
|
|
8
|
+
|
|
9
|
+
デフォルトでは、SDK はインポートされた直後から LLM リクエストと トレーシング のために `OPENAI_API_KEY` 環境変数を探します。アプリ起動前にその環境変数を設定できない場合は、[set_default_openai_key()][agents.set_default_openai_key] 関数を使ってキーを設定できます。
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from agents import set_default_openai_key
|
|
13
|
+
|
|
14
|
+
set_default_openai_key("sk-...")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
また、使用する OpenAI クライアントを設定することもできます。デフォルトでは、SDK は環境変数または上記で設定したデフォルトキーから API キーを用いて `AsyncOpenAI` インスタンスを作成します。これを変更するには、[set_default_openai_client()][agents.set_default_openai_client] 関数を使用します。
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from openai import AsyncOpenAI
|
|
21
|
+
from agents import set_default_openai_client
|
|
22
|
+
|
|
23
|
+
custom_client = AsyncOpenAI(base_url="...", api_key="...")
|
|
24
|
+
set_default_openai_client(custom_client)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
最後に、使用する OpenAI API をカスタマイズすることもできます。デフォルトでは OpenAI Responses API を使用します。これを上書きして Chat Completions API を使用するには、[set_default_openai_api()][agents.set_default_openai_api] 関数を使用します。
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from agents import set_default_openai_api
|
|
31
|
+
|
|
32
|
+
set_default_openai_api("chat_completions")
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## トレーシング
|
|
36
|
+
|
|
37
|
+
トレーシング はデフォルトで有効です。デフォルトでは、上記の OpenAI API キー(つまり環境変数または設定したデフォルトキー)を使用します。トレーシング に使用する API キーを個別に設定するには、[`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を使用します。
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from agents import set_tracing_export_api_key
|
|
41
|
+
|
|
42
|
+
set_tracing_export_api_key("sk-...")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
また、[`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を使用して、トレーシング を完全に無効化できます。
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from agents import set_tracing_disabled
|
|
49
|
+
|
|
50
|
+
set_tracing_disabled(True)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## デバッグログ
|
|
54
|
+
|
|
55
|
+
SDK にはハンドラーが設定されていない 2 つの Python ロガーがあります。デフォルトでは、これは警告とエラーが `stdout` に送られ、それ以外のログは抑制されることを意味します。
|
|
56
|
+
|
|
57
|
+
詳細なログ出力を有効にするには、[`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用します。
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from agents import enable_verbose_stdout_logging
|
|
61
|
+
|
|
62
|
+
enable_verbose_stdout_logging()
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
また、ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズすることもできます。詳しくは [Python logging ガイド](https://docs.python.org/3/howto/logging.html)をご覧ください。
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import logging
|
|
69
|
+
|
|
70
|
+
logger = logging.getLogger("openai.agents") # or openai.agents.tracing for the Tracing logger
|
|
71
|
+
|
|
72
|
+
# To make all logs show up
|
|
73
|
+
logger.setLevel(logging.DEBUG)
|
|
74
|
+
# To make info and above show up
|
|
75
|
+
logger.setLevel(logging.INFO)
|
|
76
|
+
# To make warning and above show up
|
|
77
|
+
logger.setLevel(logging.WARNING)
|
|
78
|
+
# etc
|
|
79
|
+
|
|
80
|
+
# You can customize this as needed, but this will output to `stderr` by default
|
|
81
|
+
logger.addHandler(logging.StreamHandler())
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### ログ内の機微なデータ
|
|
85
|
+
|
|
86
|
+
一部のログには機微なデータ(例: ユーザー データ)が含まれる場合があります。これらのデータの記録を無効化したい場合は、次の環境変数を設定してください。
|
|
87
|
+
|
|
88
|
+
LLM の入力と出力のロギングを無効化するには:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
ツールの入力と出力のロギングを無効化するには:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1
|
|
98
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# コンテキスト管理
|
|
6
|
+
|
|
7
|
+
コンテキストは多義的な用語です。意識すべき主なコンテキストには次の 2 つのクラスがあります。
|
|
8
|
+
|
|
9
|
+
1. コードからローカルに利用できるコンテキスト: これはツール関数の実行時、`on_handoff` のようなコールバック、ライフサイクルフックなどで必要になる可能性のあるデータや依存関係です。
|
|
10
|
+
2. LLM に利用できるコンテキスト: これは LLM が応答を生成する際に目にするデータです。
|
|
11
|
+
|
|
12
|
+
## ローカルコンテキスト
|
|
13
|
+
|
|
14
|
+
これは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスおよびその中の [`context`][agents.run_context.RunContextWrapper.context] プロパティで表現されます。仕組みは次のとおりです。
|
|
15
|
+
|
|
16
|
+
1. 任意の Python オブジェクトを作成します。一般的には dataclass や Pydantic オブジェクトを使います。
|
|
17
|
+
2. そのオブジェクトを各種の実行メソッドに渡します(例: `Runner.run(..., **context=whatever**)`)。
|
|
18
|
+
3. すべてのツール呼び出しやライフサイクルフックなどにはラッパーオブジェクト `RunContextWrapper[T]` が渡されます。ここで `T` はコンテキストオブジェクトの型を表し、`wrapper.context` でアクセスできます。
|
|
19
|
+
|
|
20
|
+
最も重要な点: 特定のエージェント実行におけるすべてのエージェント、ツール関数、ライフサイクルなどは、同じ型のコンテキストを使わなければなりません。
|
|
21
|
+
|
|
22
|
+
コンテキストは次のような用途に使えます:
|
|
23
|
+
|
|
24
|
+
- 実行のための状況データ(例: ユーザー名 / uid や、ユーザーに関するその他の情報)
|
|
25
|
+
- 依存関係(例: ロガーオブジェクト、データフェッチャーなど)
|
|
26
|
+
- ヘルパー関数
|
|
27
|
+
|
|
28
|
+
!!! danger "注意"
|
|
29
|
+
|
|
30
|
+
コンテキストオブジェクトは LLM に送信されません。これは純粋にローカルなオブジェクトであり、読み書きやメソッド呼び出しが可能です。
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
import asyncio
|
|
34
|
+
from dataclasses import dataclass
|
|
35
|
+
|
|
36
|
+
from agents import Agent, RunContextWrapper, Runner, function_tool
|
|
37
|
+
|
|
38
|
+
@dataclass
|
|
39
|
+
class UserInfo: # (1)!
|
|
40
|
+
name: str
|
|
41
|
+
uid: int
|
|
42
|
+
|
|
43
|
+
@function_tool
|
|
44
|
+
async def fetch_user_age(wrapper: RunContextWrapper[UserInfo]) -> str: # (2)!
|
|
45
|
+
"""Fetch the age of the user. Call this function to get user's age information."""
|
|
46
|
+
return f"The user {wrapper.context.name} is 47 years old"
|
|
47
|
+
|
|
48
|
+
async def main():
|
|
49
|
+
user_info = UserInfo(name="John", uid=123)
|
|
50
|
+
|
|
51
|
+
agent = Agent[UserInfo]( # (3)!
|
|
52
|
+
name="Assistant",
|
|
53
|
+
tools=[fetch_user_age],
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
result = await Runner.run( # (4)!
|
|
57
|
+
starting_agent=agent,
|
|
58
|
+
input="What is the age of the user?",
|
|
59
|
+
context=user_info,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
print(result.final_output) # (5)!
|
|
63
|
+
# The user John is 47 years old.
|
|
64
|
+
|
|
65
|
+
if __name__ == "__main__":
|
|
66
|
+
asyncio.run(main())
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
1. これはコンテキストオブジェクトです。ここでは dataclass を使っていますが、任意の型を使えます。
|
|
70
|
+
2. これはツールです。`RunContextWrapper[UserInfo]` を受け取り、ツールの実装はコンテキストから読み取っています。
|
|
71
|
+
3. 型チェッカーがエラーを検出できるように(たとえば異なるコンテキスト型を受け取るツールを渡そうとした場合など)、エージェントにジェネリックの `UserInfo` を付与しています。
|
|
72
|
+
4. コンテキストは `run` 関数に渡されます。
|
|
73
|
+
5. エージェントはツールを正しく呼び出して年齢を取得します。
|
|
74
|
+
|
|
75
|
+
## エージェント / LLM のコンテキスト
|
|
76
|
+
|
|
77
|
+
LLM が呼び出されると、LLM が参照できるデータは会話履歴からのものだけです。つまり、新しいデータを LLM に利用可能にしたい場合は、その履歴で利用可能になる方法で行う必要があります。方法はいくつかあります。
|
|
78
|
+
|
|
79
|
+
1. エージェントの `instructions` に追加します。これは「system prompt」や「デベロッパーメッセージ」とも呼ばれます。system prompt は静的な文字列でも、コンテキストを受け取って文字列を出力する動的な関数でも構いません。これは常に有用な情報(例: ユーザー名や現在の日付)に一般的な戦略です。
|
|
80
|
+
2. `Runner.run` 関数を呼び出すときに `input` に追加します。これは `instructions` の戦略に似ていますが、[指揮系統](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位にメッセージを配置できます。
|
|
81
|
+
3. 関数ツールを通じて公開します。これは _オンデマンド_ のコンテキストに有用です — LLM が必要に応じて判断し、データを取得するためにツールを呼び出せます。
|
|
82
|
+
4. リトリーバル(retrieval)や Web 検索を使用します。これらは、ファイルやデータベース(retrieval)から、あるいは Web(Web 検索)から関連データを取得できる特別なツールです。これは、関連する状況データに応答を「グラウンディング」するのに役立ちます。
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# コード例
|
|
6
|
+
|
|
7
|
+
リポジトリの [code examples](https://github.com/openai/openai-agents-python/tree/main/examples) セクションで、 SDK のさまざまなサンプル実装をご覧ください。code examples は、異なるパターンや機能を示す複数のカテゴリーに整理されています。
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## カテゴリー
|
|
11
|
+
|
|
12
|
+
- **[エージェントパターン (agent_patterns)](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns):**
|
|
13
|
+
このカテゴリーの例では、次のような一般的な エージェント の設計パターンを示します。
|
|
14
|
+
|
|
15
|
+
- 決定的なワークフロー
|
|
16
|
+
- ツールとしての エージェント
|
|
17
|
+
- エージェント の並列実行
|
|
18
|
+
|
|
19
|
+
- **[基本 (basic)](https://github.com/openai/openai-agents-python/tree/main/examples/basic):**
|
|
20
|
+
これらの例は、次のような SDK の基礎的な機能を紹介します。
|
|
21
|
+
|
|
22
|
+
- 動的な システムプロンプト
|
|
23
|
+
- ストリーミング 出力
|
|
24
|
+
- ライフサイクルイベント
|
|
25
|
+
|
|
26
|
+
- **[ツールのサンプルコード (tools)](https://github.com/openai/openai-agents-python/tree/main/examples/tools):**
|
|
27
|
+
Web 検索 や ファイル検索 などの OpenAI がホストするツール の実装方法と、それらを エージェント に統合する方法を学べます。
|
|
28
|
+
|
|
29
|
+
- **[モデルプロバイダー (model_providers)](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):**
|
|
30
|
+
SDK で OpenAI 以外のモデルを使用する方法を探ります。
|
|
31
|
+
|
|
32
|
+
- **[ハンドオフ (handoffs)](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):**
|
|
33
|
+
エージェント の ハンドオフ の実用例をご覧ください。
|
|
34
|
+
|
|
35
|
+
- **[MCP (mcp)](https://github.com/openai/openai-agents-python/tree/main/examples/mcp):**
|
|
36
|
+
MCP で エージェント を構築する方法を学べます。
|
|
37
|
+
|
|
38
|
+
- **[customer_service](https://github.com/openai/openai-agents-python/tree/main/examples/customer_service)** と **[research_bot](https://github.com/openai/openai-agents-python/tree/main/examples/research_bot):**
|
|
39
|
+
実世界のアプリケーションを示す、さらに作り込まれたサンプルが 2 つあります。
|
|
40
|
+
|
|
41
|
+
- **customer_service** : 航空会社向けのカスタマーサービス システムのサンプル。
|
|
42
|
+
- **research_bot** : シンプルな ディープリサーチ のクローン。
|
|
43
|
+
|
|
44
|
+
- **[音声 (voice)](https://github.com/openai/openai-agents-python/tree/main/examples/voice):**
|
|
45
|
+
TTS と STT モデルを用いた音声 エージェント の例をご覧ください。
|
|
46
|
+
|
|
47
|
+
- **[リアルタイム (realtime)](https://github.com/openai/openai-agents-python/tree/main/examples/realtime):**
|
|
48
|
+
SDK を使ってリアルタイム体験を構築する方法を示す code examples。
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# ガードレール
|
|
6
|
+
|
|
7
|
+
ガードレールは、エージェントと _並行して_ 実行され、ユーザー入力のチェックや検証を行えます。たとえば、非常に賢い(そのぶん遅く/高価な)モデルでカスタマーリクエストを支援するエージェントがあるとします。悪意のあるユーザーに数学の宿題を手伝わせるような依頼をモデルにさせたくはありません。そのため、安価で高速なモデルでガードレールを実行できます。ガードレールが不正利用を検出した場合は、直ちにエラーを発生させて高価なモデルの実行を止め、時間とコストを節約できます。
|
|
8
|
+
|
|
9
|
+
ガードレールには 2 つの種類があります:
|
|
10
|
+
|
|
11
|
+
1. 入力ガードレールは最初のユーザー入力に対して実行されます
|
|
12
|
+
2. 出力ガードレールは最終的なエージェントの出力に対して実行されます
|
|
13
|
+
|
|
14
|
+
## 入力ガードレール
|
|
15
|
+
|
|
16
|
+
入力ガードレールは 3 つの手順で実行されます:
|
|
17
|
+
|
|
18
|
+
1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。
|
|
19
|
+
2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] にラップされます。
|
|
20
|
+
3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が発生し、ユーザーへの適切な応答や例外処理が行えます。
|
|
21
|
+
|
|
22
|
+
!!! Note
|
|
23
|
+
|
|
24
|
+
入力ガードレールはユーザー入力での実行を想定しているため、エージェントのガードレールはそのエージェントが _最初の_ エージェントである場合にのみ実行されます。なぜ `guardrails` プロパティがエージェント側にあり、`Runner.run` に渡さないのか不思議に思うかもしれません。これは、ガードレールは実際のエージェントに密接に関連する傾向があるからです。エージェントごとに異なるガードレールを実行するため、コードを同じ場所に置くことで可読性が向上します。
|
|
25
|
+
|
|
26
|
+
## 出力ガードレール
|
|
27
|
+
|
|
28
|
+
出力ガードレールは 3 つの手順で実行されます:
|
|
29
|
+
|
|
30
|
+
1. まず、ガードレールはエージェントによって生成された出力を受け取ります。
|
|
31
|
+
2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] にラップされます。
|
|
32
|
+
3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が発生し、ユーザーへの適切な応答や例外処理が行えます。
|
|
33
|
+
|
|
34
|
+
!!! Note
|
|
35
|
+
|
|
36
|
+
出力ガードレールは最終的なエージェント出力での実行を想定しているため、エージェントのガードレールはそのエージェントが _最後の_ エージェントである場合にのみ実行されます。入力ガードレールと同様に、ガードレールは実際のエージェントに密接に関連する傾向があるため、コードを同じ場所に置くことで可読性が向上します。
|
|
37
|
+
|
|
38
|
+
## トリップワイヤー
|
|
39
|
+
|
|
40
|
+
入力または出力がガードレールに不合格となった場合、ガードレールはトリップワイヤーでこれを通知できます。トリップワイヤーが発動したガードレールを検出するとすぐに、`{Input,Output}GuardrailTripwireTriggered` 例外を発生させ、エージェントの実行を停止します。
|
|
41
|
+
|
|
42
|
+
## ガードレールの実装
|
|
43
|
+
|
|
44
|
+
入力を受け取り、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を用意する必要があります。この例では、内部でエージェントを実行して実現します。
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from pydantic import BaseModel
|
|
48
|
+
from agents import (
|
|
49
|
+
Agent,
|
|
50
|
+
GuardrailFunctionOutput,
|
|
51
|
+
InputGuardrailTripwireTriggered,
|
|
52
|
+
RunContextWrapper,
|
|
53
|
+
Runner,
|
|
54
|
+
TResponseInputItem,
|
|
55
|
+
input_guardrail,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
class MathHomeworkOutput(BaseModel):
|
|
59
|
+
is_math_homework: bool
|
|
60
|
+
reasoning: str
|
|
61
|
+
|
|
62
|
+
guardrail_agent = Agent( # (1)!
|
|
63
|
+
name="Guardrail check",
|
|
64
|
+
instructions="Check if the user is asking you to do their math homework.",
|
|
65
|
+
output_type=MathHomeworkOutput,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@input_guardrail
|
|
70
|
+
async def math_guardrail( # (2)!
|
|
71
|
+
ctx: RunContextWrapper[None], agent: Agent, input: str | list[TResponseInputItem]
|
|
72
|
+
) -> GuardrailFunctionOutput:
|
|
73
|
+
result = await Runner.run(guardrail_agent, input, context=ctx.context)
|
|
74
|
+
|
|
75
|
+
return GuardrailFunctionOutput(
|
|
76
|
+
output_info=result.final_output, # (3)!
|
|
77
|
+
tripwire_triggered=result.final_output.is_math_homework,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
agent = Agent( # (4)!
|
|
82
|
+
name="Customer support agent",
|
|
83
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
84
|
+
input_guardrails=[math_guardrail],
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
async def main():
|
|
88
|
+
# This should trip the guardrail
|
|
89
|
+
try:
|
|
90
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
91
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
92
|
+
|
|
93
|
+
except InputGuardrailTripwireTriggered:
|
|
94
|
+
print("Math homework guardrail tripped")
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
1. このエージェントをガードレール関数内で使用します。
|
|
98
|
+
2. これはエージェントの入力/コンテキストを受け取り、結果を返すガードレール関数です。
|
|
99
|
+
3. ガードレール結果に追加情報を含めることができます。
|
|
100
|
+
4. これはワークフローを定義する実際のエージェントです。
|
|
101
|
+
|
|
102
|
+
出力ガードレールも同様です。
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from pydantic import BaseModel
|
|
106
|
+
from agents import (
|
|
107
|
+
Agent,
|
|
108
|
+
GuardrailFunctionOutput,
|
|
109
|
+
OutputGuardrailTripwireTriggered,
|
|
110
|
+
RunContextWrapper,
|
|
111
|
+
Runner,
|
|
112
|
+
output_guardrail,
|
|
113
|
+
)
|
|
114
|
+
class MessageOutput(BaseModel): # (1)!
|
|
115
|
+
response: str
|
|
116
|
+
|
|
117
|
+
class MathOutput(BaseModel): # (2)!
|
|
118
|
+
reasoning: str
|
|
119
|
+
is_math: bool
|
|
120
|
+
|
|
121
|
+
guardrail_agent = Agent(
|
|
122
|
+
name="Guardrail check",
|
|
123
|
+
instructions="Check if the output includes any math.",
|
|
124
|
+
output_type=MathOutput,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
@output_guardrail
|
|
128
|
+
async def math_guardrail( # (3)!
|
|
129
|
+
ctx: RunContextWrapper, agent: Agent, output: MessageOutput
|
|
130
|
+
) -> GuardrailFunctionOutput:
|
|
131
|
+
result = await Runner.run(guardrail_agent, output.response, context=ctx.context)
|
|
132
|
+
|
|
133
|
+
return GuardrailFunctionOutput(
|
|
134
|
+
output_info=result.final_output,
|
|
135
|
+
tripwire_triggered=result.final_output.is_math,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
agent = Agent( # (4)!
|
|
139
|
+
name="Customer support agent",
|
|
140
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
141
|
+
output_guardrails=[math_guardrail],
|
|
142
|
+
output_type=MessageOutput,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
async def main():
|
|
146
|
+
# This should trip the guardrail
|
|
147
|
+
try:
|
|
148
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
149
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
150
|
+
|
|
151
|
+
except OutputGuardrailTripwireTriggered:
|
|
152
|
+
print("Math output guardrail tripped")
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
1. これは実際のエージェントの出力型です。
|
|
156
|
+
2. これはガードレールの出力型です。
|
|
157
|
+
3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。
|
|
158
|
+
4. これはワークフローを定義する実際のエージェントです。
|