openai-agents 0.0.14__tar.gz → 0.0.16__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.16/AGENTS.md +69 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/PKG-INFO +3 -3
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/tracing.md +1 -0
- openai_agents-0.0.16/examples/hosted_mcp/approvals.py +61 -0
- openai_agents-0.0.16/examples/hosted_mcp/simple.py +47 -0
- openai_agents-0.0.16/examples/mcp/streamablehttp_example/README.md +13 -0
- openai_agents-0.0.16/examples/mcp/streamablehttp_example/main.py +83 -0
- openai_agents-0.0.16/examples/mcp/streamablehttp_example/server.py +33 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/agents/search_agent.py +1 -1
- openai_agents-0.0.16/examples/tools/code_interpreter.py +34 -0
- openai_agents-0.0.16/examples/tools/image_generator.py +54 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/pyproject.toml +3 -3
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/__init__.py +18 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/_run_impl.py +226 -6
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/extensions/models/litellm_model.py +13 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/items.py +57 -3
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/mcp/__init__.py +4 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/mcp/server.py +101 -9
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/chatcmpl_converter.py +1 -1
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/chatcmpl_stream_handler.py +25 -1
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/openai_chatcompletions.py +14 -1
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/openai_responses.py +44 -13
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/run.py +2 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/stream_events.py +2 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tool.py +112 -2
- openai_agents-0.0.16/src/agents/usage.py +42 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/fake_model.py +1 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/models/test_litellm_chatcompletions_stream.py +14 -2
- openai_agents-0.0.16/tests/models/test_litellm_extra_body.py +45 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_extra_headers.py +14 -6
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_openai_chatcompletions.py +15 -2
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_openai_chatcompletions_stream.py +14 -2
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_responses_tracing.py +23 -1
- openai_agents-0.0.16/tests/test_usage.py +52 -0
- openai_agents-0.0.16/tests/voice/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/test_workflow.py +2 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/uv.lock +20 -10
- openai_agents-0.0.14/src/agents/usage.py +0 -22
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/workflows/docs.yml +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/workflows/issues.yml +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/workflows/publish.yml +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.github/workflows/tests.yml +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.gitignore +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.prettierrc +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/.vscode/settings.json +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/LICENSE +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/Makefile +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/agents.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/assets/images/favicon-platform.svg +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/assets/images/graph.png +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/assets/images/mcp-tracing.jpg +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/assets/images/orchestration.png +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/assets/logo.svg +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/config.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/context.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/examples.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/guardrails.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/handoffs.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/agents.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/config.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/context.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/examples.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/guardrails.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/handoffs.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/mcp.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/models/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/models/litellm.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/models.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/multi_agent.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/quickstart.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/results.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/running_agents.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/streaming.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/tools.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/tracing.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/visualization.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/voice/pipeline.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/voice/quickstart.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ja/voice/tracing.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/mcp.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/models/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/models/litellm.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/multi_agent.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/quickstart.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/agent.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/agent_output.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/exceptions.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/extensions/handoff_filters.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/extensions/handoff_prompt.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/extensions/litellm.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/function_schema.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/guardrail.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/handoffs.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/items.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/lifecycle.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/mcp/server.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/mcp/util.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/model_settings.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/models/interface.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/models/openai_chatcompletions.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/models/openai_responses.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/result.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/run.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/run_context.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/stream_events.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tool.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/create.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/index.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/processor_interface.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/processors.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/scope.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/setup.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/span_data.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/spans.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/traces.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/tracing/util.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/usage.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/events.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/exceptions.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/input.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/model.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/models/openai_provider.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/models/openai_stt.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/models/openai_tts.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/pipeline.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/pipeline_config.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/result.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/utils.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/ref/voice/workflow.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/results.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/running_agents.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/scripts/translate_docs.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/streaming.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/stylesheets/extra.css +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/tools.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/visualization.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/voice/pipeline.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/voice/quickstart.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/docs/voice/tracing.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/agents_as_tools.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/deterministic.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/forcing_tool_use.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/input_guardrails.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/llm_as_a_judge.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/output_guardrails.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/parallelization.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/routing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/agent_patterns/streaming_guardrails.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/agent_lifecycle_example.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/dynamic_system_prompt.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/hello_world.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/hello_world_jupyter.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/lifecycle_example.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/local_image.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/media/image_bison.jpg +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/non_strict_output_type.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/previous_response_id.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/remote_image.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/stream_items.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/stream_text.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/basic/tools.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/customer_service/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/financials_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/planner_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/risk_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/search_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/agents/writer_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/manager.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/financial_research_agent/printer.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/handoffs/message_filter.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/handoffs/message_filter_streaming.py +0 -0
- {openai_agents-0.0.14/examples/research_bot/agents → openai_agents-0.0.16/examples/hosted_mcp}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/filesystem_example/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/filesystem_example/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/git_example/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/git_example/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/sse_example/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/sse_example/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/mcp/sse_example/server.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/custom_example_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/custom_example_global.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/custom_example_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/litellm_auto.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/model_providers/litellm_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/README.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/__init__.py +0 -0
- {openai_agents-0.0.14/examples/voice → openai_agents-0.0.16/examples/research_bot/agents}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/agents/planner_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/agents/writer_agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/manager.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/printer.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/sample_outputs/product_recs.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/sample_outputs/vacation.md +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/research_bot/sample_outputs/vacation.txt +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/tools/computer_use.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/tools/file_search.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/tools/web_search.py +0 -0
- {openai_agents-0.0.14/examples/voice/static → openai_agents-0.0.16/examples/voice}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/static/README.md +0 -0
- {openai_agents-0.0.14/examples/voice/streamed → openai_agents-0.0.16/examples/voice/static}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/static/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/static/util.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/streamed/README.md +0 -0
- {openai_agents-0.0.14/src/agents/extensions → openai_agents-0.0.16/examples/voice/streamed}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/streamed/main.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/examples/voice/streamed/my_workflow.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/mkdocs.yml +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/_config.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/_debug.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/agent.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/agent_output.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/computer.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/exceptions.py +0 -0
- {openai_agents-0.0.14/src/agents/extensions/models → openai_agents-0.0.16/src/agents/extensions}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/extensions/handoff_filters.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/extensions/handoff_prompt.py +0 -0
- {openai_agents-0.0.14/src/agents → openai_agents-0.0.16/src/agents/extensions}/models/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/extensions/models/litellm_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/extensions/visualization.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/function_schema.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/guardrail.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/handoffs.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/lifecycle.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/logger.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/mcp/util.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/model_settings.py +0 -0
- {openai_agents-0.0.14/src/agents/util → openai_agents-0.0.16/src/agents/models}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/_openai_shared.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/chatcmpl_helpers.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/fake_id.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/interface.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/multi_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/models/openai_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/py.typed +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/result.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/run_context.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/strict_schema.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/create.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/logger.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/processor_interface.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/processors.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/scope.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/setup.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/span_data.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/spans.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/traces.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/tracing/util.py +0 -0
- {openai_agents-0.0.14/src/agents/voice/models → openai_agents-0.0.16/src/agents/util}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_coro.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_error_tracing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_json.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_pretty_print.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_transforms.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/util/_types.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/version.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/events.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/exceptions.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/imports.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/input.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/model.py +0 -0
- {openai_agents-0.0.14/tests → openai_agents-0.0.16/src/agents/voice/models}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/models/openai_model_provider.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/models/openai_stt.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/models/openai_tts.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/pipeline.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/pipeline_config.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/result.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/utils.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/src/agents/voice/workflow.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/README.md +0 -0
- {openai_agents-0.0.14/tests/fastapi → openai_agents-0.0.16/tests}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/conftest.py +0 -0
- {openai_agents-0.0.14/tests/mcp → openai_agents-0.0.16/tests/fastapi}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/fastapi/streaming_app.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/fastapi/test_streaming_context.py +0 -0
- {openai_agents-0.0.14/tests/models → openai_agents-0.0.16/tests/mcp}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/conftest.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/helpers.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_caching.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_connect_disconnect.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_mcp_tracing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_mcp_util.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_runner_calls_mcp.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/mcp/test_server_errors.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/model_settings/test_serialization.py +0 -0
- {openai_agents-0.0.14/tests/voice → openai_agents-0.0.16/tests/models}/__init__.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/models/conftest.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/models/test_map.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_agent_config.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_agent_hooks.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_agent_runner.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_agent_runner_streamed.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_agent_tracing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_cancel_streaming.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_computer_action.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_config.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_doc_parsing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_extension_filters.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_function_schema.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_function_tool.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_function_tool_decorator.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_global_hooks.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_guardrails.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_handoff_tool.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_items_helpers.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_max_turns.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_openai_chatcompletions_converter.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_openai_responses_converter.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_output_tool.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_pretty_print.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_responses.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_result_cast.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_run_config.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_run_step_execution.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_run_step_processing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_strict_schema.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tool_choice_reset.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tool_converter.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tool_use_behavior.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_trace_processor.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tracing.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tracing_errors.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_tracing_errors_streamed.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/test_visualization.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/testing_processor.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/tracing/test_processor_api_key.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/conftest.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/fake_models.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/helpers.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/test_input.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/test_openai_stt.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/tests/voice/test_openai_tts.py +0 -0
- {openai_agents-0.0.14 → openai_agents-0.0.16}/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.16
|
|
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
|
|
@@ -19,8 +19,8 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Classifier: Typing :: Typed
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
21
|
Requires-Dist: griffe<2,>=1.5.6
|
|
22
|
-
Requires-Dist: mcp<2,>=1.
|
|
23
|
-
Requires-Dist: openai>=1.
|
|
22
|
+
Requires-Dist: mcp<2,>=1.8.0; python_version >= '3.10'
|
|
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
|
|
@@ -115,3 +115,4 @@ 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)
|
|
@@ -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 result.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 result.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,13 @@
|
|
|
1
|
+
# MCP Streamable HTTP Example
|
|
2
|
+
|
|
3
|
+
This example uses a local Streamable HTTP server in [server.py](server.py).
|
|
4
|
+
|
|
5
|
+
Run the example via:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
uv run python examples/mcp/streamablehttp_example/main.py
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Details
|
|
12
|
+
|
|
13
|
+
The example uses the `MCPServerStreamableHttp` class from `agents.mcp`. The server runs in a sub-process at `https://localhost:8000/mcp`.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import os
|
|
3
|
+
import shutil
|
|
4
|
+
import subprocess
|
|
5
|
+
import time
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from agents import Agent, Runner, gen_trace_id, trace
|
|
9
|
+
from agents.mcp import MCPServer, MCPServerStreamableHttp
|
|
10
|
+
from agents.model_settings import ModelSettings
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def run(mcp_server: MCPServer):
|
|
14
|
+
agent = Agent(
|
|
15
|
+
name="Assistant",
|
|
16
|
+
instructions="Use the tools to answer the questions.",
|
|
17
|
+
mcp_servers=[mcp_server],
|
|
18
|
+
model_settings=ModelSettings(tool_choice="required"),
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Use the `add` tool to add two numbers
|
|
22
|
+
message = "Add these numbers: 7 and 22."
|
|
23
|
+
print(f"Running: {message}")
|
|
24
|
+
result = await Runner.run(starting_agent=agent, input=message)
|
|
25
|
+
print(result.final_output)
|
|
26
|
+
|
|
27
|
+
# Run the `get_weather` tool
|
|
28
|
+
message = "What's the weather in Tokyo?"
|
|
29
|
+
print(f"\n\nRunning: {message}")
|
|
30
|
+
result = await Runner.run(starting_agent=agent, input=message)
|
|
31
|
+
print(result.final_output)
|
|
32
|
+
|
|
33
|
+
# Run the `get_secret_word` tool
|
|
34
|
+
message = "What's the secret word?"
|
|
35
|
+
print(f"\n\nRunning: {message}")
|
|
36
|
+
result = await Runner.run(starting_agent=agent, input=message)
|
|
37
|
+
print(result.final_output)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def main():
|
|
41
|
+
async with MCPServerStreamableHttp(
|
|
42
|
+
name="Streamable HTTP Python Server",
|
|
43
|
+
params={
|
|
44
|
+
"url": "http://localhost:8000/mcp",
|
|
45
|
+
},
|
|
46
|
+
) as server:
|
|
47
|
+
trace_id = gen_trace_id()
|
|
48
|
+
with trace(workflow_name="Streamable HTTP Example", trace_id=trace_id):
|
|
49
|
+
print(f"View trace: https://platform.openai.com/traces/trace?trace_id={trace_id}\n")
|
|
50
|
+
await run(server)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
# Let's make sure the user has uv installed
|
|
55
|
+
if not shutil.which("uv"):
|
|
56
|
+
raise RuntimeError(
|
|
57
|
+
"uv is not installed. Please install it: https://docs.astral.sh/uv/getting-started/installation/"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# We'll run the Streamable HTTP server in a subprocess. Usually this would be a remote server, but for this
|
|
61
|
+
# demo, we'll run it locally at http://localhost:8000/mcp
|
|
62
|
+
process: subprocess.Popen[Any] | None = None
|
|
63
|
+
try:
|
|
64
|
+
this_dir = os.path.dirname(os.path.abspath(__file__))
|
|
65
|
+
server_file = os.path.join(this_dir, "server.py")
|
|
66
|
+
|
|
67
|
+
print("Starting Streamable HTTP server at http://localhost:8000/mcp ...")
|
|
68
|
+
|
|
69
|
+
# Run `uv run server.py` to start the Streamable HTTP server
|
|
70
|
+
process = subprocess.Popen(["uv", "run", server_file])
|
|
71
|
+
# Give it 3 seconds to start
|
|
72
|
+
time.sleep(3)
|
|
73
|
+
|
|
74
|
+
print("Streamable HTTP server started. Running example...\n\n")
|
|
75
|
+
except Exception as e:
|
|
76
|
+
print(f"Error starting Streamable HTTP server: {e}")
|
|
77
|
+
exit(1)
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
asyncio.run(main())
|
|
81
|
+
finally:
|
|
82
|
+
if process:
|
|
83
|
+
process.terminate()
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import random
|
|
2
|
+
|
|
3
|
+
import requests
|
|
4
|
+
from mcp.server.fastmcp import FastMCP
|
|
5
|
+
|
|
6
|
+
# Create server
|
|
7
|
+
mcp = FastMCP("Echo Server")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@mcp.tool()
|
|
11
|
+
def add(a: int, b: int) -> int:
|
|
12
|
+
"""Add two numbers"""
|
|
13
|
+
print(f"[debug-server] add({a}, {b})")
|
|
14
|
+
return a + b
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@mcp.tool()
|
|
18
|
+
def get_secret_word() -> str:
|
|
19
|
+
print("[debug-server] get_secret_word()")
|
|
20
|
+
return random.choice(["apple", "banana", "cherry"])
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@mcp.tool()
|
|
24
|
+
def get_current_weather(city: str) -> str:
|
|
25
|
+
print(f"[debug-server] get_current_weather({city})")
|
|
26
|
+
|
|
27
|
+
endpoint = "https://wttr.in"
|
|
28
|
+
response = requests.get(f"{endpoint}/{city}")
|
|
29
|
+
return response.text
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
mcp.run(transport="streamable-http")
|
|
@@ -3,7 +3,7 @@ from agents.model_settings import ModelSettings
|
|
|
3
3
|
|
|
4
4
|
INSTRUCTIONS = (
|
|
5
5
|
"You are a research assistant. Given a search term, you search the web for that term and "
|
|
6
|
-
"produce a concise summary of the results. The summary must 2-3 paragraphs and less than 300 "
|
|
6
|
+
"produce a concise summary of the results. The summary must be 2-3 paragraphs and less than 300 "
|
|
7
7
|
"words. Capture the main points. Write succinctly, no need to have complete sentences or good "
|
|
8
8
|
"grammar. This will be consumed by someone synthesizing a report, so its vital you capture the "
|
|
9
9
|
"essence and ignore any fluff. Do not include any additional commentary other than the summary "
|
|
@@ -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,19 +1,19 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "openai-agents"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.16"
|
|
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
14
|
"requests>=2.0, <3",
|
|
15
15
|
"types-requests>=2.0, <3",
|
|
16
|
-
"mcp>=1.
|
|
16
|
+
"mcp>=1.8.0, <2; python_version >= '3.10'",
|
|
17
17
|
]
|
|
18
18
|
classifiers = [
|
|
19
19
|
"Typing :: Typed",
|
|
@@ -54,10 +54,19 @@ from .stream_events import (
|
|
|
54
54
|
StreamEvent,
|
|
55
55
|
)
|
|
56
56
|
from .tool import (
|
|
57
|
+
CodeInterpreterTool,
|
|
57
58
|
ComputerTool,
|
|
58
59
|
FileSearchTool,
|
|
59
60
|
FunctionTool,
|
|
60
61
|
FunctionToolResult,
|
|
62
|
+
HostedMCPTool,
|
|
63
|
+
ImageGenerationTool,
|
|
64
|
+
LocalShellCommandRequest,
|
|
65
|
+
LocalShellExecutor,
|
|
66
|
+
LocalShellTool,
|
|
67
|
+
MCPToolApprovalFunction,
|
|
68
|
+
MCPToolApprovalFunctionResult,
|
|
69
|
+
MCPToolApprovalRequest,
|
|
61
70
|
Tool,
|
|
62
71
|
WebSearchTool,
|
|
63
72
|
default_tool_error_function,
|
|
@@ -206,8 +215,17 @@ __all__ = [
|
|
|
206
215
|
"FunctionToolResult",
|
|
207
216
|
"ComputerTool",
|
|
208
217
|
"FileSearchTool",
|
|
218
|
+
"CodeInterpreterTool",
|
|
219
|
+
"ImageGenerationTool",
|
|
220
|
+
"LocalShellCommandRequest",
|
|
221
|
+
"LocalShellExecutor",
|
|
222
|
+
"LocalShellTool",
|
|
209
223
|
"Tool",
|
|
210
224
|
"WebSearchTool",
|
|
225
|
+
"HostedMCPTool",
|
|
226
|
+
"MCPToolApprovalFunction",
|
|
227
|
+
"MCPToolApprovalRequest",
|
|
228
|
+
"MCPToolApprovalFunctionResult",
|
|
211
229
|
"function_tool",
|
|
212
230
|
"Usage",
|
|
213
231
|
"add_trace_processor",
|