openai-agents 0.0.15__tar.gz → 0.0.17__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.0.17/AGENTS.md +69 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/PKG-INFO +2 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/mcp.md +5 -4
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/tools.md +4 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/tracing.md +2 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/mcp.md +4 -3
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/tools.md +5 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/tracing.md +2 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/input_guardrails.py +1 -1
- openai_agents-0.0.17/examples/hosted_mcp/approvals.py +61 -0
- openai_agents-0.0.17/examples/hosted_mcp/simple.py +47 -0
- openai_agents-0.0.17/examples/tools/code_interpreter.py +34 -0
- openai_agents-0.0.17/examples/tools/image_generator.py +54 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/pyproject.toml +2 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/__init__.py +20 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/_run_impl.py +230 -6
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/agent.py +19 -3
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/agent_output.py +1 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/exceptions.py +38 -5
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/extensions/models/litellm_model.py +13 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/extensions/visualization.py +35 -18
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/handoffs.py +1 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/items.py +57 -3
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/mcp/server.py +9 -7
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/mcp/util.py +1 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/chatcmpl_stream_handler.py +25 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/openai_chatcompletions.py +31 -6
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/openai_responses.py +44 -13
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/result.py +43 -13
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/run.py +35 -6
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/stream_events.py +3 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tool.py +128 -3
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/processors.py +29 -3
- openai_agents-0.0.17/src/agents/usage.py +42 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_pretty_print.py +12 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/model.py +2 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/fake_model.py +1 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_mcp_tracing.py +39 -21
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/models/test_litellm_chatcompletions_stream.py +14 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/models/test_litellm_extra_body.py +1 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_agent_runner.py +35 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_agent_runner_streamed.py +37 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_extra_headers.py +14 -6
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_function_tool.py +42 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_openai_chatcompletions.py +49 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_openai_chatcompletions_stream.py +14 -2
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_responses_tracing.py +23 -1
- openai_agents-0.0.17/tests/test_run_error_details.py +48 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_run_step_execution.py +1 -1
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_run_step_processing.py +18 -14
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tracing_errors_streamed.py +0 -4
- openai_agents-0.0.17/tests/test_usage.py +52 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_visualization.py +15 -0
- openai_agents-0.0.17/tests/voice/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/test_workflow.py +2 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/uv.lock +1689 -1689
- openai_agents-0.0.15/src/agents/usage.py +0 -22
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/workflows/docs.yml +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/workflows/issues.yml +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/workflows/publish.yml +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.github/workflows/tests.yml +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.gitignore +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.prettierrc +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/.vscode/settings.json +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/LICENSE +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/Makefile +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/agents.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/assets/images/favicon-platform.svg +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/assets/images/graph.png +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/assets/images/mcp-tracing.jpg +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/assets/images/orchestration.png +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/assets/logo.svg +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/config.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/context.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/examples.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/guardrails.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/handoffs.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/agents.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/config.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/context.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/examples.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/guardrails.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/handoffs.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/models/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/models/litellm.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/models.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/multi_agent.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/quickstart.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/results.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/running_agents.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/streaming.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/visualization.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/voice/pipeline.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/voice/quickstart.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ja/voice/tracing.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/models/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/models/litellm.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/multi_agent.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/quickstart.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/agent.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/agent_output.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/exceptions.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/extensions/handoff_filters.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/extensions/handoff_prompt.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/extensions/litellm.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/function_schema.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/guardrail.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/handoffs.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/items.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/lifecycle.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/mcp/server.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/mcp/util.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/model_settings.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/models/interface.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/models/openai_chatcompletions.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/models/openai_responses.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/result.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/run.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/run_context.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/stream_events.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tool.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/create.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/index.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/processor_interface.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/processors.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/scope.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/setup.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/span_data.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/spans.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/traces.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/tracing/util.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/usage.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/events.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/exceptions.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/input.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/model.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/models/openai_provider.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/models/openai_stt.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/models/openai_tts.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/pipeline.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/pipeline_config.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/result.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/utils.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/ref/voice/workflow.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/results.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/running_agents.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/scripts/translate_docs.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/streaming.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/stylesheets/extra.css +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/visualization.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/voice/pipeline.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/voice/quickstart.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/docs/voice/tracing.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/agents_as_tools.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/deterministic.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/forcing_tool_use.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/llm_as_a_judge.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/output_guardrails.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/parallelization.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/routing.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/agent_patterns/streaming_guardrails.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/agent_lifecycle_example.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/dynamic_system_prompt.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/hello_world.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/hello_world_jupyter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/lifecycle_example.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/local_image.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/media/image_bison.jpg +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/non_strict_output_type.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/previous_response_id.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/remote_image.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/stream_items.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/stream_text.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/basic/tools.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/customer_service/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/financials_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/planner_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/risk_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/search_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/agents/writer_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/manager.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/financial_research_agent/printer.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/handoffs/message_filter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/handoffs/message_filter_streaming.py +0 -0
- {openai_agents-0.0.15/examples/research_bot/agents → openai_agents-0.0.17/examples/hosted_mcp}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/filesystem_example/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/filesystem_example/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/git_example/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/git_example/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/sse_example/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/sse_example/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/sse_example/server.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/streamablehttp_example/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/streamablehttp_example/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/mcp/streamablehttp_example/server.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/custom_example_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/custom_example_global.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/custom_example_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/litellm_auto.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/model_providers/litellm_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/README.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/__init__.py +0 -0
- {openai_agents-0.0.15/examples/voice → openai_agents-0.0.17/examples/research_bot/agents}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/agents/planner_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/agents/search_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/agents/writer_agent.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/manager.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/printer.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/sample_outputs/product_recs.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/sample_outputs/vacation.md +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/research_bot/sample_outputs/vacation.txt +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/tools/computer_use.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/tools/file_search.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/tools/web_search.py +0 -0
- {openai_agents-0.0.15/examples/voice/static → openai_agents-0.0.17/examples/voice}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/static/README.md +0 -0
- {openai_agents-0.0.15/examples/voice/streamed → openai_agents-0.0.17/examples/voice/static}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/static/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/static/util.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/streamed/README.md +0 -0
- {openai_agents-0.0.15/src/agents/extensions → openai_agents-0.0.17/examples/voice/streamed}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/streamed/main.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/examples/voice/streamed/my_workflow.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/mkdocs.yml +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/_config.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/_debug.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/computer.py +0 -0
- {openai_agents-0.0.15/src/agents/extensions/models → openai_agents-0.0.17/src/agents/extensions}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/extensions/handoff_filters.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/extensions/handoff_prompt.py +0 -0
- {openai_agents-0.0.15/src/agents → openai_agents-0.0.17/src/agents/extensions}/models/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/extensions/models/litellm_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/function_schema.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/guardrail.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/lifecycle.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/logger.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/mcp/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/model_settings.py +0 -0
- {openai_agents-0.0.15/src/agents/util → openai_agents-0.0.17/src/agents/models}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/_openai_shared.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/chatcmpl_converter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/chatcmpl_helpers.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/fake_id.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/interface.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/multi_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/models/openai_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/py.typed +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/run_context.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/strict_schema.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/create.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/logger.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/processor_interface.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/scope.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/setup.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/span_data.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/spans.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/traces.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/tracing/util.py +0 -0
- {openai_agents-0.0.15/src/agents/voice/models → openai_agents-0.0.17/src/agents/util}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_coro.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_error_tracing.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_json.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_transforms.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/util/_types.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/version.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/events.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/exceptions.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/imports.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/input.py +0 -0
- {openai_agents-0.0.15/tests → openai_agents-0.0.17/src/agents/voice/models}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/models/openai_model_provider.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/models/openai_stt.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/models/openai_tts.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/pipeline.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/pipeline_config.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/result.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/utils.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/src/agents/voice/workflow.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/README.md +0 -0
- {openai_agents-0.0.15/tests/fastapi → openai_agents-0.0.17/tests}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/conftest.py +0 -0
- {openai_agents-0.0.15/tests/mcp → openai_agents-0.0.17/tests/fastapi}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/fastapi/streaming_app.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/fastapi/test_streaming_context.py +0 -0
- {openai_agents-0.0.15/tests/models → openai_agents-0.0.17/tests/mcp}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/conftest.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/helpers.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_caching.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_connect_disconnect.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_mcp_util.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_runner_calls_mcp.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/mcp/test_server_errors.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/model_settings/test_serialization.py +0 -0
- {openai_agents-0.0.15/tests/voice → openai_agents-0.0.17/tests/models}/__init__.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/models/conftest.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/models/test_map.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_agent_config.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_agent_hooks.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_agent_tracing.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_cancel_streaming.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_computer_action.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_config.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_doc_parsing.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_extension_filters.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_function_schema.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_function_tool_decorator.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_global_hooks.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_guardrails.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_handoff_tool.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_items_helpers.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_max_turns.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_openai_chatcompletions_converter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_openai_responses_converter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_output_tool.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_pretty_print.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_responses.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_result_cast.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_run_config.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_strict_schema.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tool_choice_reset.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tool_converter.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tool_use_behavior.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_trace_processor.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tracing.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/test_tracing_errors.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/testing_processor.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/tracing/test_processor_api_key.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/conftest.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/fake_models.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/helpers.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/test_input.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/test_openai_stt.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/test_openai_tts.py +0 -0
- {openai_agents-0.0.15 → openai_agents-0.0.17}/tests/voice/test_pipeline.py +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Welcome to the OpenAI Agents SDK repository. This file contains the main points for new contributors.
|
|
2
|
+
|
|
3
|
+
## Repository overview
|
|
4
|
+
|
|
5
|
+
- **Source code**: `src/agents/` contains the implementation.
|
|
6
|
+
- **Tests**: `tests/` with a short guide in `tests/README.md`.
|
|
7
|
+
- **Examples**: under `examples/`.
|
|
8
|
+
- **Documentation**: markdown pages live in `docs/` with `mkdocs.yml` controlling the site.
|
|
9
|
+
- **Utilities**: developer commands are defined in the `Makefile`.
|
|
10
|
+
- **PR template**: `.github/PULL_REQUEST_TEMPLATE/pull_request_template.md` describes the information every PR must include.
|
|
11
|
+
|
|
12
|
+
## Local workflow
|
|
13
|
+
|
|
14
|
+
1. Format, lint and type‑check your changes:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
make format
|
|
18
|
+
make lint
|
|
19
|
+
make mypy
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. Run the tests:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
make tests
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
To run a single test, use `uv run pytest -s -k <test_name>`.
|
|
29
|
+
|
|
30
|
+
3. Build the documentation (optional but recommended for docs changes):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
make build-docs
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Coverage can be generated with `make coverage`.
|
|
37
|
+
|
|
38
|
+
## Snapshot tests
|
|
39
|
+
|
|
40
|
+
Some tests rely on inline snapshots. See `tests/README.md` for details on updating them:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
make snapshots-fix # update existing snapshots
|
|
44
|
+
make snapshots-create # create new snapshots
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Run `make tests` again after updating snapshots to ensure they pass.
|
|
48
|
+
|
|
49
|
+
## Style notes
|
|
50
|
+
|
|
51
|
+
- Write comments as full sentences and end them with a period.
|
|
52
|
+
|
|
53
|
+
## Pull request expectations
|
|
54
|
+
|
|
55
|
+
PRs should use the template located at `.github/PULL_REQUEST_TEMPLATE/pull_request_template.md`. Provide a summary, test plan and issue number if applicable, then check that:
|
|
56
|
+
|
|
57
|
+
- New tests are added when needed.
|
|
58
|
+
- Documentation is updated.
|
|
59
|
+
- `make lint` and `make format` have been run.
|
|
60
|
+
- The full test suite passes.
|
|
61
|
+
|
|
62
|
+
Commit messages should be concise and written in the imperative mood. Small, focused commits are preferred.
|
|
63
|
+
|
|
64
|
+
## What reviewers look for
|
|
65
|
+
|
|
66
|
+
- Tests covering new behaviour.
|
|
67
|
+
- Consistent style: code formatted with `ruff format`, imports sorted, and type hints passing `mypy`.
|
|
68
|
+
- Clear documentation for any public API changes.
|
|
69
|
+
- Clean history and a helpful PR description.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openai-agents
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.17
|
|
4
4
|
Summary: OpenAI Agents SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/openai/openai-agents-python
|
|
6
6
|
Project-URL: Repository, https://github.com/openai/openai-agents-python
|
|
@@ -20,7 +20,7 @@ Classifier: Typing :: Typed
|
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
21
|
Requires-Dist: griffe<2,>=1.5.6
|
|
22
22
|
Requires-Dist: mcp<2,>=1.8.0; python_version >= '3.10'
|
|
23
|
-
Requires-Dist: openai>=1.
|
|
23
|
+
Requires-Dist: openai>=1.81.0
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.10
|
|
25
25
|
Requires-Dist: requests<3,>=2.0
|
|
26
26
|
Requires-Dist: types-requests<3,>=2.0
|
|
@@ -12,12 +12,13 @@ Agents SDK は MCP をサポートしており、これにより幅広い MCP
|
|
|
12
12
|
|
|
13
13
|
## MCP サーバー
|
|
14
14
|
|
|
15
|
-
現在、MCP 仕様では使用するトランスポート方式に基づき
|
|
15
|
+
現在、MCP 仕様では使用するトランスポート方式に基づき 3 種類のサーバーが定義されています。
|
|
16
16
|
|
|
17
|
-
1. **stdio** サーバー: アプリケーションのサブプロセスとして実行されます。ローカルで動かすイメージです。
|
|
17
|
+
1. **stdio** サーバー: アプリケーションのサブプロセスとして実行されます。ローカルで動かすイメージです。
|
|
18
18
|
2. **HTTP over SSE** サーバー: リモートで動作し、 URL 経由で接続します。
|
|
19
|
+
3. **Streamable HTTP** サーバー: MCP 仕様に定義された Streamable HTTP トランスポートを使用してリモートで動作します。
|
|
19
20
|
|
|
20
|
-
これらのサーバーへは [`MCPServerStdio`][agents.mcp.server.MCPServerStdio]
|
|
21
|
+
これらのサーバーへは [`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] クラスを使用して接続できます。
|
|
21
22
|
|
|
22
23
|
たとえば、[公式 MCP filesystem サーバー](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem)を利用する場合は次のようになります。
|
|
23
24
|
|
|
@@ -46,7 +47,7 @@ agent=Agent(
|
|
|
46
47
|
|
|
47
48
|
## キャッシュ
|
|
48
49
|
|
|
49
|
-
エージェントが実行されるたびに、MCP サーバーへ `list_tools()` が呼び出されます。サーバーがリモートの場合は特にレイテンシが発生します。ツール一覧を自動でキャッシュしたい場合は、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]
|
|
50
|
+
エージェントが実行されるたびに、MCP サーバーへ `list_tools()` が呼び出されます。サーバーがリモートの場合は特にレイテンシが発生します。ツール一覧を自動でキャッシュしたい場合は、[`MCPServerStdio`][agents.mcp.server.MCPServerStdio]、[`MCPServerSse`][agents.mcp.server.MCPServerSse]、[`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] の各クラスに `cache_tools_list=True` を渡してください。ツール一覧が変更されないと確信できる場合のみ使用してください。
|
|
50
51
|
|
|
51
52
|
キャッシュを無効化したい場合は、サーバーで `invalidate_tools_cache()` を呼び出します。
|
|
52
53
|
|
|
@@ -17,6 +17,10 @@ OpenAI は [`OpenAIResponsesModel`][agents.models.openai_responses.OpenAIRespons
|
|
|
17
17
|
- [`WebSearchTool`][agents.tool.WebSearchTool] はエージェントに Web 検索を行わせます。
|
|
18
18
|
- [`FileSearchTool`][agents.tool.FileSearchTool] は OpenAI ベクトルストアから情報を取得します。
|
|
19
19
|
- [`ComputerTool`][agents.tool.ComputerTool] はコンピュータ操作タスクを自動化します。
|
|
20
|
+
- [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] はサンドボックス環境でコードを実行します。
|
|
21
|
+
- [`HostedMCPTool`][agents.tool.HostedMCPTool] はリモート MCP サーバーのツールをモデルから直接利用できるようにします。
|
|
22
|
+
- [`ImageGenerationTool`][agents.tool.ImageGenerationTool] はプロンプトから画像を生成します。
|
|
23
|
+
- [`LocalShellTool`][agents.tool.LocalShellTool] はローカルマシンでシェルコマンドを実行します。
|
|
20
24
|
|
|
21
25
|
```python
|
|
22
26
|
from agents import Agent, FileSearchTool, Runner, WebSearchTool
|
|
@@ -119,4 +119,5 @@ async def main():
|
|
|
119
119
|
- [Comet Opik](https://www.comet.com/docs/opik/tracing/integrations/openai_agents)
|
|
120
120
|
- [Langfuse](https://langfuse.com/docs/integrations/openaiagentssdk/openai-agents)
|
|
121
121
|
- [Langtrace](https://docs.langtrace.ai/supported-integrations/llm-frameworks/openai-agents-sdk)
|
|
122
|
-
- [Okahu‑Monocle](https://github.com/monocle2ai/monocle)
|
|
122
|
+
- [Okahu‑Monocle](https://github.com/monocle2ai/monocle)
|
|
123
|
+
- [Portkey AI](https://portkey.ai/docs/integrations/agents/openai-agents)
|
|
@@ -8,12 +8,13 @@ The Agents SDK has support for MCP. This enables you to use a wide range of MCP
|
|
|
8
8
|
|
|
9
9
|
## MCP servers
|
|
10
10
|
|
|
11
|
-
Currently, the MCP spec defines
|
|
11
|
+
Currently, the MCP spec defines three kinds of servers, based on the transport mechanism they use:
|
|
12
12
|
|
|
13
13
|
1. **stdio** servers run as a subprocess of your application. You can think of them as running "locally".
|
|
14
14
|
2. **HTTP over SSE** servers run remotely. You connect to them via a URL.
|
|
15
|
+
3. **Streamable HTTP** servers run remotely using the Streamable HTTP transport defined in the MCP spec.
|
|
15
16
|
|
|
16
|
-
You can use the [`MCPServerStdio`][agents.mcp.server.MCPServerStdio]
|
|
17
|
+
You can use the [`MCPServerStdio`][agents.mcp.server.MCPServerStdio], [`MCPServerSse`][agents.mcp.server.MCPServerSse], and [`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp] classes to connect to these servers.
|
|
17
18
|
|
|
18
19
|
For example, this is how you'd use the [official MCP filesystem server](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem).
|
|
19
20
|
|
|
@@ -42,7 +43,7 @@ agent=Agent(
|
|
|
42
43
|
|
|
43
44
|
## Caching
|
|
44
45
|
|
|
45
|
-
Every time an Agent runs, it calls `list_tools()` on the MCP server. This can be a latency hit, especially if the server is a remote server. To automatically cache the list of tools, you can pass `cache_tools_list=True` to
|
|
46
|
+
Every time an Agent runs, it calls `list_tools()` on the MCP server. This can be a latency hit, especially if the server is a remote server. To automatically cache the list of tools, you can pass `cache_tools_list=True` to [`MCPServerStdio`][agents.mcp.server.MCPServerStdio], [`MCPServerSse`][agents.mcp.server.MCPServerSse], and [`MCPServerStreamableHttp`][agents.mcp.server.MCPServerStreamableHttp]. You should only do this if you're certain the tool list will not change.
|
|
46
47
|
|
|
47
48
|
If you want to invalidate the cache, you can call `invalidate_tools_cache()` on the servers.
|
|
48
49
|
|
|
@@ -13,6 +13,10 @@ OpenAI offers a few built-in tools when using the [`OpenAIResponsesModel`][agent
|
|
|
13
13
|
- The [`WebSearchTool`][agents.tool.WebSearchTool] lets an agent search the web.
|
|
14
14
|
- The [`FileSearchTool`][agents.tool.FileSearchTool] allows retrieving information from your OpenAI Vector Stores.
|
|
15
15
|
- The [`ComputerTool`][agents.tool.ComputerTool] allows automating computer use tasks.
|
|
16
|
+
- The [`CodeInterpreterTool`][agents.tool.CodeInterpreterTool] lets the LLM execute code in a sandboxed environment.
|
|
17
|
+
- The [`HostedMCPTool`][agents.tool.HostedMCPTool] exposes a remote MCP server's tools to the model.
|
|
18
|
+
- The [`ImageGenerationTool`][agents.tool.ImageGenerationTool] generates images from a prompt.
|
|
19
|
+
- The [`LocalShellTool`][agents.tool.LocalShellTool] runs shell commands on your machine.
|
|
16
20
|
|
|
17
21
|
```python
|
|
18
22
|
from agents import Agent, FileSearchTool, Runner, WebSearchTool
|
|
@@ -266,7 +270,7 @@ The `agent.as_tool` function is a convenience method to make it easy to turn an
|
|
|
266
270
|
```python
|
|
267
271
|
@function_tool
|
|
268
272
|
async def run_my_agent() -> str:
|
|
269
|
-
|
|
273
|
+
"""A tool that runs the agent with custom configs"""
|
|
270
274
|
|
|
271
275
|
agent = Agent(name="My agent", instructions="...")
|
|
272
276
|
|
|
@@ -115,3 +115,5 @@ To customize this default setup, to send traces to alternative or additional bac
|
|
|
115
115
|
- [Langfuse](https://langfuse.com/docs/integrations/openaiagentssdk/openai-agents)
|
|
116
116
|
- [Langtrace](https://docs.langtrace.ai/supported-integrations/llm-frameworks/openai-agents-sdk)
|
|
117
117
|
- [Okahu-Monocle](https://github.com/monocle2ai/monocle)
|
|
118
|
+
- [Galileo](https://v2docs.galileo.ai/integrations/openai-agent-integration#openai-agent-integration)
|
|
119
|
+
- [Portkey AI](https://portkey.ai/docs/integrations/agents/openai-agents)
|
|
@@ -20,7 +20,7 @@ This example shows how to use guardrails.
|
|
|
20
20
|
Guardrails are checks that run in parallel to the agent's execution.
|
|
21
21
|
They can be used to do things like:
|
|
22
22
|
- Check if input messages are off-topic
|
|
23
|
-
- Check that
|
|
23
|
+
- Check that input messages don't violate any policies
|
|
24
24
|
- Take over control of the agent's execution if an unexpected input is detected
|
|
25
25
|
|
|
26
26
|
In this example, we'll setup an input guardrail that trips if the user is asking to do math homework.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import asyncio
|
|
3
|
+
|
|
4
|
+
from agents import (
|
|
5
|
+
Agent,
|
|
6
|
+
HostedMCPTool,
|
|
7
|
+
MCPToolApprovalFunctionResult,
|
|
8
|
+
MCPToolApprovalRequest,
|
|
9
|
+
Runner,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
"""This example demonstrates how to use the hosted MCP support in the OpenAI Responses API, with
|
|
13
|
+
approval callbacks."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def approval_callback(request: MCPToolApprovalRequest) -> MCPToolApprovalFunctionResult:
|
|
17
|
+
answer = input(f"Approve running the tool `{request.data.name}`? (y/n) ")
|
|
18
|
+
result: MCPToolApprovalFunctionResult = {"approve": answer == "y"}
|
|
19
|
+
if not result["approve"]:
|
|
20
|
+
result["reason"] = "User denied"
|
|
21
|
+
return result
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
async def main(verbose: bool, stream: bool):
|
|
25
|
+
agent = Agent(
|
|
26
|
+
name="Assistant",
|
|
27
|
+
tools=[
|
|
28
|
+
HostedMCPTool(
|
|
29
|
+
tool_config={
|
|
30
|
+
"type": "mcp",
|
|
31
|
+
"server_label": "gitmcp",
|
|
32
|
+
"server_url": "https://gitmcp.io/openai/codex",
|
|
33
|
+
"require_approval": "always",
|
|
34
|
+
},
|
|
35
|
+
on_approval_request=approval_callback,
|
|
36
|
+
)
|
|
37
|
+
],
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
if stream:
|
|
41
|
+
result = Runner.run_streamed(agent, "Which language is this repo written in?")
|
|
42
|
+
async for event in result.stream_events():
|
|
43
|
+
if event.type == "run_item_stream_event":
|
|
44
|
+
print(f"Got event of type {event.item.__class__.__name__}")
|
|
45
|
+
print(f"Done streaming; final result: {result.final_output}")
|
|
46
|
+
else:
|
|
47
|
+
res = await Runner.run(agent, "Which language is this repo written in?")
|
|
48
|
+
print(res.final_output)
|
|
49
|
+
|
|
50
|
+
if verbose:
|
|
51
|
+
for item in res.new_items:
|
|
52
|
+
print(item)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
parser = argparse.ArgumentParser()
|
|
57
|
+
parser.add_argument("--verbose", action="store_true", default=False)
|
|
58
|
+
parser.add_argument("--stream", action="store_true", default=False)
|
|
59
|
+
args = parser.parse_args()
|
|
60
|
+
|
|
61
|
+
asyncio.run(main(args.verbose, args.stream))
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import asyncio
|
|
3
|
+
|
|
4
|
+
from agents import Agent, HostedMCPTool, Runner
|
|
5
|
+
|
|
6
|
+
"""This example demonstrates how to use the hosted MCP support in the OpenAI Responses API, with
|
|
7
|
+
approvals not required for any tools. You should only use this for trusted MCP servers."""
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
async def main(verbose: bool, stream: bool):
|
|
11
|
+
agent = Agent(
|
|
12
|
+
name="Assistant",
|
|
13
|
+
tools=[
|
|
14
|
+
HostedMCPTool(
|
|
15
|
+
tool_config={
|
|
16
|
+
"type": "mcp",
|
|
17
|
+
"server_label": "gitmcp",
|
|
18
|
+
"server_url": "https://gitmcp.io/openai/codex",
|
|
19
|
+
"require_approval": "never",
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
],
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
if stream:
|
|
26
|
+
result = Runner.run_streamed(agent, "Which language is this repo written in?")
|
|
27
|
+
async for event in result.stream_events():
|
|
28
|
+
if event.type == "run_item_stream_event":
|
|
29
|
+
print(f"Got event of type {event.item.__class__.__name__}")
|
|
30
|
+
print(f"Done streaming; final result: {result.final_output}")
|
|
31
|
+
else:
|
|
32
|
+
res = await Runner.run(agent, "Which language is this repo written in?")
|
|
33
|
+
print(res.final_output)
|
|
34
|
+
# The repository is primarily written in multiple languages, including Rust and TypeScript...
|
|
35
|
+
|
|
36
|
+
if verbose:
|
|
37
|
+
for item in res.new_items:
|
|
38
|
+
print(item)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
if __name__ == "__main__":
|
|
42
|
+
parser = argparse.ArgumentParser()
|
|
43
|
+
parser.add_argument("--verbose", action="store_true", default=False)
|
|
44
|
+
parser.add_argument("--stream", action="store_true", default=False)
|
|
45
|
+
args = parser.parse_args()
|
|
46
|
+
|
|
47
|
+
asyncio.run(main(args.verbose, args.stream))
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from agents import Agent, CodeInterpreterTool, Runner, trace
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
async def main():
|
|
7
|
+
agent = Agent(
|
|
8
|
+
name="Code interpreter",
|
|
9
|
+
instructions="You love doing math.",
|
|
10
|
+
tools=[
|
|
11
|
+
CodeInterpreterTool(
|
|
12
|
+
tool_config={"type": "code_interpreter", "container": {"type": "auto"}},
|
|
13
|
+
)
|
|
14
|
+
],
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
with trace("Code interpreter example"):
|
|
18
|
+
print("Solving math problem...")
|
|
19
|
+
result = Runner.run_streamed(agent, "What is the square root of273 * 312821 plus 1782?")
|
|
20
|
+
async for event in result.stream_events():
|
|
21
|
+
if (
|
|
22
|
+
event.type == "run_item_stream_event"
|
|
23
|
+
and event.item.type == "tool_call_item"
|
|
24
|
+
and event.item.raw_item.type == "code_interpreter_call"
|
|
25
|
+
):
|
|
26
|
+
print(f"Code interpreter code:\n```\n{event.item.raw_item.code}\n```\n")
|
|
27
|
+
elif event.type == "run_item_stream_event":
|
|
28
|
+
print(f"Other event: {event.item.type}")
|
|
29
|
+
|
|
30
|
+
print(f"Final output: {result.final_output}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
asyncio.run(main())
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import base64
|
|
3
|
+
import os
|
|
4
|
+
import subprocess
|
|
5
|
+
import sys
|
|
6
|
+
import tempfile
|
|
7
|
+
|
|
8
|
+
from agents import Agent, ImageGenerationTool, Runner, trace
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def open_file(path: str) -> None:
|
|
12
|
+
if sys.platform.startswith("darwin"):
|
|
13
|
+
subprocess.run(["open", path], check=False) # macOS
|
|
14
|
+
elif os.name == "nt": # Windows
|
|
15
|
+
os.astartfile(path) # type: ignore
|
|
16
|
+
elif os.name == "posix":
|
|
17
|
+
subprocess.run(["xdg-open", path], check=False) # Linux/Unix
|
|
18
|
+
else:
|
|
19
|
+
print(f"Don't know how to open files on this platform: {sys.platform}")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
async def main():
|
|
23
|
+
agent = Agent(
|
|
24
|
+
name="Image generator",
|
|
25
|
+
instructions="You are a helpful agent.",
|
|
26
|
+
tools=[
|
|
27
|
+
ImageGenerationTool(
|
|
28
|
+
tool_config={"type": "image_generation", "quality": "low"},
|
|
29
|
+
)
|
|
30
|
+
],
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
with trace("Image generation example"):
|
|
34
|
+
print("Generating image, this may take a while...")
|
|
35
|
+
result = await Runner.run(
|
|
36
|
+
agent, "Create an image of a frog eating a pizza, comic book style."
|
|
37
|
+
)
|
|
38
|
+
print(result.final_output)
|
|
39
|
+
for item in result.new_items:
|
|
40
|
+
if (
|
|
41
|
+
item.type == "tool_call_item"
|
|
42
|
+
and item.raw_item.type == "image_generation_call"
|
|
43
|
+
and (img_result := item.raw_item.result)
|
|
44
|
+
):
|
|
45
|
+
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp:
|
|
46
|
+
tmp.write(base64.b64decode(img_result))
|
|
47
|
+
temp_path = tmp.name
|
|
48
|
+
|
|
49
|
+
# Open the image
|
|
50
|
+
open_file(temp_path)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
asyncio.run(main())
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "openai-agents"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.17"
|
|
4
4
|
description = "OpenAI Agents SDK"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.9"
|
|
7
7
|
license = "MIT"
|
|
8
8
|
authors = [{ name = "OpenAI", email = "support@openai.com" }]
|
|
9
9
|
dependencies = [
|
|
10
|
-
"openai>=1.
|
|
10
|
+
"openai>=1.81.0",
|
|
11
11
|
"pydantic>=2.10, <3",
|
|
12
12
|
"griffe>=1.5.6, <2",
|
|
13
13
|
"typing-extensions>=4.12.2, <5",
|
|
@@ -14,6 +14,7 @@ from .exceptions import (
|
|
|
14
14
|
MaxTurnsExceeded,
|
|
15
15
|
ModelBehaviorError,
|
|
16
16
|
OutputGuardrailTripwireTriggered,
|
|
17
|
+
RunErrorDetails,
|
|
17
18
|
UserError,
|
|
18
19
|
)
|
|
19
20
|
from .guardrail import (
|
|
@@ -54,10 +55,19 @@ from .stream_events import (
|
|
|
54
55
|
StreamEvent,
|
|
55
56
|
)
|
|
56
57
|
from .tool import (
|
|
58
|
+
CodeInterpreterTool,
|
|
57
59
|
ComputerTool,
|
|
58
60
|
FileSearchTool,
|
|
59
61
|
FunctionTool,
|
|
60
62
|
FunctionToolResult,
|
|
63
|
+
HostedMCPTool,
|
|
64
|
+
ImageGenerationTool,
|
|
65
|
+
LocalShellCommandRequest,
|
|
66
|
+
LocalShellExecutor,
|
|
67
|
+
LocalShellTool,
|
|
68
|
+
MCPToolApprovalFunction,
|
|
69
|
+
MCPToolApprovalFunctionResult,
|
|
70
|
+
MCPToolApprovalRequest,
|
|
61
71
|
Tool,
|
|
62
72
|
WebSearchTool,
|
|
63
73
|
default_tool_error_function,
|
|
@@ -195,6 +205,7 @@ __all__ = [
|
|
|
195
205
|
"AgentHooks",
|
|
196
206
|
"RunContextWrapper",
|
|
197
207
|
"TContext",
|
|
208
|
+
"RunErrorDetails",
|
|
198
209
|
"RunResult",
|
|
199
210
|
"RunResultStreaming",
|
|
200
211
|
"RunConfig",
|
|
@@ -206,8 +217,17 @@ __all__ = [
|
|
|
206
217
|
"FunctionToolResult",
|
|
207
218
|
"ComputerTool",
|
|
208
219
|
"FileSearchTool",
|
|
220
|
+
"CodeInterpreterTool",
|
|
221
|
+
"ImageGenerationTool",
|
|
222
|
+
"LocalShellCommandRequest",
|
|
223
|
+
"LocalShellExecutor",
|
|
224
|
+
"LocalShellTool",
|
|
209
225
|
"Tool",
|
|
210
226
|
"WebSearchTool",
|
|
227
|
+
"HostedMCPTool",
|
|
228
|
+
"MCPToolApprovalFunction",
|
|
229
|
+
"MCPToolApprovalRequest",
|
|
230
|
+
"MCPToolApprovalFunctionResult",
|
|
211
231
|
"function_tool",
|
|
212
232
|
"Usage",
|
|
213
233
|
"add_trace_processor",
|