Commit Graph

361 Commits

Author SHA1 Message Date
Martín Bravo d9a4f96ecb Refactor get_all_edges function to remove unused parent parameter 2025-03-25 19:02:21 +01:00
Martín Bravo 650d151314 Add visualization.md to navigation in mkdocs.yml 2025-03-25 18:56:01 +01:00
Martín Bravo c988fd4aaf Add graphviz as a dependency and update import statements 2025-03-25 18:46:23 +01:00
Rohan Mehta bde8969892 Update pyproject.toml 2025-03-25 13:37:01 -04:00
Rohan Mehta db13026c0e Update visualization.md 2025-03-25 13:34:45 -04:00
Rohan Mehta 10dcb40226 Make the reset behavior on tool use configurable (#335)
## Summary:

#263 added this behavior. The goal was to prevent infinite loops when
tool choice was set. The key change I'm making is:
1. Making it configurable on the agent.
2. Doing bookkeeping in the Runner to track this, to prevent mutating
agents.
3. Not resetting the global tool choice in RunConfig.

## Test Plan:
Unit tests.
.
2025-03-25 13:30:32 -04:00
Martín Bravo 8ba7b0932f Update installation instructions for visualization dependency to use 'viz' 2025-03-25 18:29:55 +01:00
Rohan Mehta 944b730da9 Make the reset behavior on tool use configurable
## Summary:

#263 added this behavior. The goal was to prevent infinite loops when tool choice was set. The key change I'm making is:
1. Making it configurable on the agent.
2. Doing bookkeeping in the Runner to track this, to prevent mutating agents.
3. Not resetting the global tool choice in RunConfig.

## Test Plan:
Unit tests.
.
2025-03-25 13:29:32 -04:00
Rohan Mehta 0856c328d3 [4/n] Add docs for MCP (#338)
Just adding docs.

(Repeat of #324)
2025-03-25 13:27:15 -04:00
Rohan Mehta 4ce2ea1ae6 [3/n] Add an MCP stdio example (#337)
### Summary:
Spins up a stdio server with some local files, then asks the model
questions.

### Test Plan:
Run the example, see it work.

(repeat of #322)
2025-03-25 13:27:05 -04:00
Rohan Mehta a93ad02688 [4/n] Add docs for MCP
Just adding docs.
-
2025-03-25 13:25:50 -04:00
Rohan Mehta 069e41a08d [3/n] Add an MCP stdio example
### Summary:
Spins up a stdio server with some local files, then asks the model questions.

### Test Plan:
Run the example, see it work.
2025-03-25 13:24:18 -04:00
Martín Bravo c2f912e393 Refactor visualization node label formatting in get_all_nodes function 2025-03-25 18:16:29 +01:00
Martín Bravo 692dfe0327 Merge branch 'main' of https://github.com/openai/openai-agents-python into feat/draw_graph 2025-03-25 18:02:51 +01:00
Martín Bravo 5a0e6a9215 Rename visualization dependency to viz in pyproject.toml 2025-03-25 18:01:45 +01:00
Rohan Mehta f5eb773663 [2/n] Add MCP support to Runner (#321)
### Summary:
This enables users to **use** MCP inside the SDK.
1. You add a list of MCP servers to `Agent`, via `mcp_server=[...]`
2. When an agent runs, we look up its MCP tools and add them to the list
of tools.
3. When a tool call occurs, we call the relevant MCP server.

Notes:
1. There's some refactoring to make sure we send the full list of tools
to the Runner/Model etc.
2. Right now, you could have a locally defined tool that conflicts with
an MCP defined tool. I didn't add errors for that, will do in a
followup.

### Test Plan:
See unit tests. Also has an end to end example next PR.

---
[//]: # (BEGIN SAPLING FOOTER)
* #324
* #322
* __->__ #321
* #320
2025-03-25 12:53:29 -04:00
Rohan Mehta 9fec87a004 [1/n] Add MCP types to the SDK (#320)
### Summary:
1. Add the MCP dep for python 3.10, since it doesn't support 3.9 and
below
2. Create MCPServer, which is the agents SDK representation of an MCP
server
3. Create implementations for HTTP-SSE and StdIO servers, directly
copying the [MCP SDK
example](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py)
4. Add a util to transform MCP tools into Agent SDK tools

Note: I added optional caching support to the servers. That way, if you
happen to know a server's tools don't change, you can just cache them.

### Test Plan:

Checks pass. I added tests at the end of the stack.

--- 

#324
#322
#321
-> #320
#319
2025-03-25 12:53:10 -04:00
Rohan Mehta f28848e850 [1/n] Add MCP types to the SDK
### Summary:
1. Add the MCP dep for python 3.10, since it doesn't support 3.9 and below
2. Create MCPServer, which is the agents SDK representation of an MCP server
3. Create implementations for HTTP-SSE and StdIO servers, directly copying the [MCP SDK example](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py)
4. Add a util to transform MCP tools into Agent SDK tools

Note: I added optional caching support to the servers. That way, if you happen to know a server's tools don't change, you can just cache them.

### Test Plan:

Checks pass. I added tests at the end of the stack.
2025-03-25 12:51:40 -04:00
Martín Bravo 2c98d79d60 Add visualization optional dependency for graphviz 2025-03-25 16:59:17 +01:00
Martín Bravo 1ec5c2e233 Merge branch 'main' of https://github.com/openai/openai-agents-python into feat/draw_graph 2025-03-25 16:58:01 +01:00
Rohan Mehta 03e1e00023 Fix parallel_tool_calls when False (#333)
Currently, when we set `parallel_tool_calls=False` in the
`model_settings`, the responses API is called with `parallel_tool_calls
== NotGiven`, which defaults to true on the Response API side
(https://platform.openai.com/docs/api-reference/responses/create#responses-create-parallel_tool_calls).

This PR attempts to fix that.

```
agent = Agent(
    ...,
    model_settings=ModelSettings(
        parallel_tool_calls=False,
    ),
)
```
2025-03-25 11:31:06 -04:00
Rohan Mehta 69907b8eed Fix potential infinite tool call loop by resetting tool_choice after … (#263)
# Fix potential infinite tool call loop by resetting tool_choice after
tool execution

## Summary

This PR fixes an issue where setting `tool_choice` to "required" or a
specific function name could cause models to get stuck in an infinite
tool call loop.

When `tool_choice` is set to force tool usage, this setting persists
across model invocations. This PR automatically resets `tool_choice` to
"auto" after tool execution, allowing the model to decide whether to
make additional tool calls in subsequent turns.

Unlike using `tool_use_behavior="stop_on_first_tool"`, this approach
lets the model continue processing tool results while preventing forced
repeated tool calls.

## Test plan

- Added tests to verify tool_choice reset behavior for both agent and
run_config settings
- Added integration test to verify the solution prevents infinite loops
- All tests pass

## Checks

- [x] I've added new tests for the fix
- [x] I've updated the relevant documentation (added comment in code)
- [x] I've run `make lint` and `make format`
- [x] I've made sure tests pass
2025-03-25 11:30:53 -04:00
apeccaud fc31f992f5 Fix parallel_tool_calls when False 2025-03-25 14:52:48 +00:00
Rohan Mehta 28e4b99e03 [0/n] Only run tests on py3.9, not mypy (#319)
We don't really need mypy on 3.9 (unit tests would catch any real
issues), and it causes issues with the rest of this stack.


---
[//]: # (BEGIN SAPLING FOOTER)
* #324
* #322
* #321
* #320
* __->__ #319
2025-03-24 23:19:21 -04:00
Rohan Mehta e71d2b6fd7 [2/n] Add MCP support to Runner
### Summary:
This enables users to **use** MCP inside the SDK.
1. You add a list of MCP servers to `Agent`, via `mcp_server=[...]`
2. When an agent runs, we look up its MCP tools and add them to the list of tools.
3. When a tool call occurs, we call the relevant MCP server.

Notes:
1. There's some refactoring to make sure we send the full list of tools to the Runner/Model etc.
2. Right now, you could have a locally defined tool that conflicts with an MCP defined tool. I didn't add errors for that, will do in a followup.

### Test Plan:
See unit tests. Also has an end to end example next PR.
2025-03-24 15:08:02 -04:00
Rohan Mehta cc247a3fab [0/n] Only run tests on py3.9, not mypy
### Summary:
We don't need to run mypy on 3.9 anyway. Also it causes issues with the rest of this stack.

### Test plan:

run checks
2025-03-24 15:08:02 -04:00
Rohan Mehta 1e3d2c7307 [1/n] Add MCP types to the SDK
### Summary:
1. Add the MCP dep for python 3.10, since it doesn't support 3.9 and below
2. Create MCPServer, which is the agents SDK representation of an MCP server
3. Create implementations for HTTP-SSE and StdIO servers, directly copying the [MCP SDK example](https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py)
4. Add a util to transform MCP tools into Agent SDK tools

Note: I added optional caching support to the servers. That way, if you happen to know a server's tools don't change, you can just cache them.

### Test Plan:

Checks pass. I added tests at the end of the stack.
2025-03-24 15:08:02 -04:00
Víctor Mayoral Vilches cd6d218933 Adapt litellm example
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 19:49:51 +01:00
Víctor Mayoral Vilches 147fc8142e Initial re-structuring towards CAI
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 19:47:41 +01:00
Víctor Mayoral Vilches 1618434aa9 Fix error in example path
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 19:47:13 +01:00
Víctor Mayoral Vilches 8718a93155 Remove independent and isolated model tests
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 18:43:46 +01:00
Víctor Mayoral Vilches 0f8c357231 Restore structure and place litellm integraton under model_providers
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 18:39:17 +01:00
Víctor Mayoral Vilches 8189f331b6 Update openai library version to avoid version-related issue
In particular:
Traceback (most recent call last):
  File /Users/alias/Alias/research/openai-agents-python/examples/agent_patterns/litellm.py, line 4, in <module>
    from agents import OpenAIChatCompletionsModel,Agent,Runner
  File /Users/alias/Alias/research/openai-agents-python/src/agents/__init__.py, line 44, in <module>
    from .models.openai_chatcompletions import OpenAIChatCompletionsModel
  File /Users/alias/Alias/research/openai-agents-python/src/agents/models/openai_chatcompletions.py, line 57, in <module>
    from openai.types.responses.response_usage import InputTokensDetails, OutputTokensDetails
ImportError: cannot import name 'InputTokensDetails' from 'openai.types.responses.response_usage' (/Users/alias/Alias/research/openai-agents-python/env/lib/python3.12/site-packages/openai/types/responses/response_usage.py). Did you mean: 'OutputTokensDetails'?

Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 18:11:38 +01:00
Víctor Mayoral Vilches 09c2beefdc Merge branch 'main' of https://github.com/openai/openai-agents-python 2025-03-24 17:26:49 +01:00
Víctor Mayoral Vilches 7971856c6c Add some additional bits to README.md
Signed-off-by: Víctor Mayoral Vilches <v.mayoralv@gmail.com>
2025-03-24 17:26:11 +01:00
Rohan Mehta 244b9850a1 chore: ignore PyCharm .idea/ directory (#317)
Uncomment .idea/ directory in .gitignore to ensure PyCharm IDE project
configuration files are excluded from version control.
2025-03-24 10:08:07 -04:00
madroid 41bb33c761 chore: ignore PyCharm .idea/ directory
Uncomment .idea/ directory in .gitignore to ensure PyCharm IDE
project configuration files are excluded from version control.
2025-03-24 18:30:14 +08:00
Martín Bravo 62a50266eb refactor: clean up visualization functions by removing unused nodes and improving type hints 2025-03-24 09:47:21 +01:00
Martín Bravo 3e8ecd7bfc feat: enhance visualization functions with optional type hints and improved handling of agents and handoffs 2025-03-24 09:30:13 +01:00
Martín Bravo 65b906a275 feat: add optional dependency for visualization using Graphviz 2025-03-24 09:08:29 +01:00
Rohan Mehta 21a61969d9 Fix Typos (#258)
Noticed a bunch of typos when reading code, fixing.
2025-03-23 20:28:14 -04:00
Rohan Mehta 84b6dd3642 Improve tracing error messages (#311)
1. Make it clear it's non-fatal
2. Make it clear it's a tracing error
2025-03-23 18:19:45 -04:00
Rohan Mehta 49514f2859 Improve tracing error messages 2025-03-23 18:14:10 -04:00
Rohan Mehta 9f5ebd0e18 Update quickstart.md 2025-03-23 17:56:55 -04:00
Rohan Mehta d6330e4651 Update issues.yml 2025-03-23 12:19:07 -04:00
xianghuijin 93462b0f76 refactor: improve comments for clarity in tool_choice reset logic 2025-03-23 20:41:18 +08:00
xianghuijin 02e329526f refactor: streamline tool_choice reset logic
This update moves the tool_choice reset logic to a more appropriate location within the RunImpl class, ensuring that the original agent's model_settings remains unmodified during the reset process. The logic now checks for problematic scenarios before creating a modified copy of the agent's settings, maintaining expected behavior across sequential runs. This change enhances clarity and efficiency in handling tool choices.

Addresses previous feedback regarding the modification of the agent instance and improves the overall structure of the reset logic.
2025-03-23 20:04:39 +08:00
xianghuijin 2a61d474e4 fix: prevent modifying the original agent's model_settings
This fixes the issue where the original agent's model_settings was being directly modified during the tool choice reset process. The original implementation caused the agent's tool_choice to unintentionally reset to "auto" for subsequent runs, which could be unexpected behavior.

The fix creates new copies of the agent and model settings objects using dataclasses.replace() instead of modifying the original objects. This ensures that the tool choice reset is limited to the current run only, maintaining the expected behavior for sequential runs with the same agent.

Addresses feedback from @baderalfahad about the agent instance being modified when it should maintain its original state between runs.
2025-03-23 17:20:23 +08:00
xianghuijin b6ed16686b docs: Update tool_choice reset documentation to match implementation 2025-03-22 14:22:47 +08:00
xianghuijin 0746325a67 fix: optimize tool_choice reset logic and fix lint errors
- Refactor tool_choice reset to target only problematic edge cases
- Replace manual ModelSettings recreation with dataclasses.replace
- Fix line length and error handling lint issues in tests
2025-03-22 14:10:09 +08:00