diff --git a/examples/agents-sdk-python/example.py b/examples/agents-sdk-python/example.py new file mode 100644 index 0000000..06aa7d7 --- /dev/null +++ b/examples/agents-sdk-python/example.py @@ -0,0 +1,107 @@ +import asyncio +from pathlib import Path +import shutil + +from openai import AsyncOpenAI +from agents import ( + Agent, + ItemHelpers, + Runner, + set_default_openai_api, + set_default_openai_client, + set_tracing_disabled, + function_tool, +) +from agents.mcp import MCPServerStdio +from pydantic import BaseModel + + +class WeatherParams(BaseModel): + location: str + + +async def prompt_user(question: str) -> str: + """Async input prompt function""" + loop = asyncio.get_event_loop() + return await loop.run_in_executor(None, input, question) + + +async def main(): + # Set up OpenAI client for local server (e.g., Ollama) + openai_client = AsyncOpenAI( + api_key="local", + base_url="http://localhost:11434/v1", + ) + + # Get current working directory + samples_dir = str(Path.cwd()) + + # Create MCP server for filesystem operations + mcp_server = MCPServerStdio( + name="Filesystem MCP Server, via npx", + params={ + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + samples_dir, + ], + }, + ) + + # Connect to MCP server + await mcp_server.connect() + + # Configure agents SDK + set_tracing_disabled(True) + set_default_openai_client(openai_client) + set_default_openai_api("chat_completions") + + # Define weather tool + @function_tool + async def search_tool(location: str) -> str: + return f"The weather in {location} is sunny." + + # Create agent + agent = Agent( + name="My Agent", + instructions="You are a helpful assistant.", + tools=[search_tool], + model="gpt-oss:20b-test", + mcp_servers=[mcp_server], + ) + + # Get user input + user_input = await prompt_user("> ") + + # Run agent with streaming + result = Runner.run_streamed(agent, user_input) + + # Process streaming results + async for event in result.stream_events(): + if event.type == "raw_response_event": + continue + elif event.type == "agent_updated_stream_event": + print(f"Agent updated: {event.new_agent.name}") + elif event.type == "run_item_stream_event": + if event.item.type == "tool_call_item": + print("-- Tool was called") + elif event.item.type == "tool_call_output_item": + print(f"-- Tool output: {event.item.output}") + elif event.item.type == "message_output_item": + print( + f"-- Message output:\n {ItemHelpers.text_message_output(event.item)}" + ) + else: + pass + + print("=== Run complete ===") + + +if __name__ == "__main__": + + if not shutil.which("npx"): + raise RuntimeError( + "npx is not installed. Please install it with `npm install -g npx`." + ) + asyncio.run(main()) diff --git a/examples/agents-sdk-python/pyproject.toml b/examples/agents-sdk-python/pyproject.toml new file mode 100644 index 0000000..e8d24a8 --- /dev/null +++ b/examples/agents-sdk-python/pyproject.toml @@ -0,0 +1,9 @@ +[project] +name = "agents-sdk-python" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "openai-agents>=0.2.4", +]