mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
1e350ea22f
* PR2: Wire context provider pipeline and update all internal consumers - Replace AgentThread with AgentSession across all packages - Replace ContextProvider with BaseContextProvider across all packages - Replace context_provider param with context_providers (Sequence) - Replace thread= with session= in run() signatures - Replace get_new_thread() with create_session() - Add get_session(service_session_id) to agent interface - DurableAgentThread -> DurableAgentSession - Remove _notify_thread_of_new_messages from WorkflowAgent - Wire before_run/after_run context provider pipeline in RawAgent - Auto-inject InMemoryHistoryProvider when no providers configured * fix: update all tests for context provider pipeline, fix lazy-loaders, remove old test files * refactor: update all sample files for context provider pipeline (AgentThread→AgentSession, ContextProvider→BaseContextProvider) * fix: update remaining ag-ui references (client docstring, getting_started sample) * fix: make get_session service_session_id keyword-only to avoid confusion with session_id * refactor: rename _RunContext.thread_messages to session_messages * refactor: remove _threads.py, _memory.py, and old provider files; migrate devui to use plain message lists * rename: remove _new_ prefix from test files * refactor: rewrite SlidingWindowChatMessageStore as SlidingWindowHistoryProvider(InMemoryHistoryProvider) * fix: read full history from session state directly instead of reaching into provider internals * fix: update stale .pyi stubs, sample imports, and README references for new provider types * fix: remove stale message_store, _notify_thread_of_new_messages, and session_id.key references in samples * refactor: merge context_providers and sessions sample folders into sessions, remove aggregate_context_provider * refactor: UserInfoMemory stores state in session.state instead of instance attributes * feat: add Pydantic BaseModel support to session state serialization Pydantic models stored in session.state are now automatically serialized via model_dump() and restored via model_validate() during to_dict()/from_dict() round-trips. Models are auto-registered on first serialization; use register_state_type() for cold-start deserialization. Also export register_state_type as a public API. * fix mem0 * Update sample README links and descriptions for session terminology - Replace 'thread' with 'session' in sample descriptions across all READMEs - Update file links for renamed samples (mem0_sessions, redis_sessions, etc.) - Fix Threads section → Sessions section in main samples/README.md - Update tools, middleware, workflows, durabletask, azure_functions READMEs - Update architecture diagrams in concepts/tools/README.md - Update migration guides (autogen, semantic-kernel) * Fix broken Redis README link to renamed sample * Fix Mem0 OSS client search: pass scoping params as direct kwargs AsyncMemory (OSS) expects user_id/agent_id/run_id as direct kwargs, while AsyncMemoryClient (Platform) expects them in a filters dict. Adds tests for both client types. Port of fix from #3844 to new Mem0ContextProvider. * Fix rebase issues: restore missing _conversation_state.py and checkpoint decode logic - Add back _conversation_state.py (encode/decode_chat_messages) lost in rebase - Fix on_checkpoint_restore to decode cache/conversation with decode_chat_messages - Fix on_checkpoint_restore to use decode_checkpoint_value for pending requests - Add tests/workflow/__init__.py for relative import support - Fix test_agent_executor checkpoint selection (checkpoints[1] not superstep) * Add STORES_BY_DEFAULT ClassVar to skip redundant InMemoryHistoryProvider injection Chat clients that store history server-side by default (OpenAI Responses API, Azure AI Agent) now declare STORES_BY_DEFAULT = True. The agent checks this during auto-injection and skips InMemoryHistoryProvider unless the user explicitly sets store=False. * Fix broken markdown links in azure_ai and redis READMEs * Fix getting-started samples to use session API instead of removed thread/ContextProvider API * updates to workflow as agent * fix group chat import * Rename Thread→Session throughout, fix service_session_id propagation, remove stale AGUIThread - Fix: Propagate conversation_id from ChatResponse back to session.service_session_id in both streaming and non-streaming paths in _agents.py - Rename AgentThreadException → AgentSessionException - Remove stale AGUIThread from ag_ui lazy-loader - Rename use_service_thread → use_service_session in ag-ui package - Rename test functions from *_thread_* to *_session_* - Rename sample files from *_thread* to *_session* - Update docstrings and comments: thread → session - Update _mcp.py kwargs filter: add 'session' alongside 'thread' - Fix ContinuationToken docstring example: thread=thread → session=session - Fix _clients.py docstring: 'Agent threads' → 'Agent sessions' * Fix broken markdown links after thread→session file renames * fix azure ai test
8.3 KiB
8.3 KiB
OpenAI Agent Framework Examples
This folder contains examples demonstrating different ways to create and use agents with the OpenAI clients from the agent_framework.openai package.
Examples
| File | Description |
|---|---|
openai_assistants_basic.py |
Basic usage of OpenAIAssistantProvider with streaming and non-streaming responses. |
openai_assistants_provider_methods.py |
Demonstrates all OpenAIAssistantProvider methods: create_agent(), get_agent(), and as_agent(). |
openai_assistants_with_code_interpreter.py |
Using OpenAIAssistantsClient.get_code_interpreter_tool() with OpenAIAssistantProvider to execute Python code. |
openai_assistants_with_existing_assistant.py |
Working with pre-existing assistants using get_agent() and as_agent() methods. |
openai_assistants_with_explicit_settings.py |
Configuring OpenAIAssistantProvider with explicit settings including API key and model ID. |
openai_assistants_with_file_search.py |
Using OpenAIAssistantsClient.get_file_search_tool() with OpenAIAssistantProvider for file search capabilities. |
openai_assistants_with_function_tools.py |
Function tools with OpenAIAssistantProvider at both agent-level and query-level. |
openai_assistants_with_response_format.py |
Structured outputs with OpenAIAssistantProvider using Pydantic models. |
openai_assistants_with_session.py |
Session management with OpenAIAssistantProvider for conversation context persistence. |
openai_chat_client_basic.py |
The simplest way to create an agent using Agent with OpenAIChatClient. Shows both streaming and non-streaming responses for chat-based interactions with OpenAI models. |
openai_chat_client_with_explicit_settings.py |
Shows how to initialize an agent with a specific chat client, configuring settings explicitly including API key and model ID. |
openai_chat_client_with_function_tools.py |
Demonstrates how to use function tools with agents. Shows both agent-level tools (defined when creating the agent) and query-level tools (provided with specific queries). |
openai_chat_client_with_local_mcp.py |
Shows how to integrate OpenAI agents with local Model Context Protocol (MCP) servers for enhanced functionality and tool integration. |
openai_chat_client_with_session.py |
Demonstrates session management with OpenAI agents, including automatic session creation for stateless conversations and explicit session management for maintaining conversation context across multiple interactions. |
openai_chat_client_with_web_search.py |
Shows how to use OpenAIChatClient.get_web_search_tool() for web search capabilities with OpenAI agents. |
openai_chat_client_with_runtime_json_schema.py |
Shows how to supply a runtime JSON Schema via additional_chat_options for structured output without defining a Pydantic model. |
openai_responses_client_basic.py |
The simplest way to create an agent using Agent with OpenAIResponsesClient. Shows both streaming and non-streaming responses for structured response generation with OpenAI models. |
openai_responses_client_image_analysis.py |
Demonstrates how to use vision capabilities with agents to analyze images. |
openai_responses_client_image_generation.py |
Demonstrates how to use OpenAIResponsesClient.get_image_generation_tool() to create images based on text descriptions. |
openai_responses_client_reasoning.py |
Demonstrates how to use reasoning capabilities with OpenAI agents, showing how the agent can provide detailed reasoning for its responses. |
openai_responses_client_streaming_image_generation.py |
Demonstrates streaming image generation with partial images for real-time image creation feedback and improved user experience. |
openai_responses_client_with_agent_as_tool.py |
Shows how to use the agent-as-tool pattern with OpenAI Responses Client, where one agent delegates work to specialized sub-agents wrapped as tools using as_tool(). Demonstrates hierarchical agent architectures. |
openai_responses_client_with_code_interpreter.py |
Shows how to use OpenAIResponsesClient.get_code_interpreter_tool() to write and execute Python code. |
openai_responses_client_with_code_interpreter_files.py |
Shows how to use code interpreter with uploaded files for data analysis. |
openai_responses_client_with_explicit_settings.py |
Shows how to initialize an agent with a specific responses client, configuring settings explicitly including API key and model ID. |
openai_responses_client_with_file_search.py |
Demonstrates how to use OpenAIResponsesClient.get_file_search_tool() for searching through uploaded files. |
openai_responses_client_with_function_tools.py |
Demonstrates how to use function tools with agents. Shows both agent-level tools (defined when creating the agent) and run-level tools (provided with specific queries). |
openai_responses_client_with_hosted_mcp.py |
Shows how to use OpenAIResponsesClient.get_mcp_tool() for hosted MCP servers, including approval workflows. |
openai_responses_client_with_local_mcp.py |
Shows how to integrate OpenAI agents with local Model Context Protocol (MCP) servers for enhanced functionality and tool integration. |
openai_responses_client_with_runtime_json_schema.py |
Shows how to supply a runtime JSON Schema via additional_chat_options for structured output without defining a Pydantic model. |
openai_responses_client_with_structured_output.py |
Demonstrates how to use structured outputs with OpenAI agents to get structured data responses in predefined formats. |
openai_responses_client_with_session.py |
Demonstrates session management with OpenAI agents, including automatic session creation for stateless conversations and explicit session management for maintaining conversation context across multiple interactions. |
openai_responses_client_with_web_search.py |
Shows how to use OpenAIResponsesClient.get_web_search_tool() for web search capabilities. |
Environment Variables
Make sure to set the following environment variables before running the examples:
OPENAI_API_KEY: Your OpenAI API keyOPENAI_CHAT_MODEL_ID: The OpenAI model to use (e.g.,gpt-4o,gpt-4o-mini,gpt-3.5-turbo)OPENAI_RESPONSES_MODEL_ID: The OpenAI model to use (e.g.,gpt-4o,gpt-4o-mini,gpt-3.5-turbo)- For image processing examples, use a vision-capable model like
gpt-4oorgpt-4o-mini
Optionally, you can set:
OPENAI_ORG_ID: Your OpenAI organization ID (if applicable)OPENAI_API_BASE_URL: Your OpenAI base URL (if using a different base URL)
Optional Dependencies
Some examples require additional dependencies:
- Image Generation Example: The
openai_responses_client_image_generation.pyexample requires PIL (Pillow) for image display. Install with:# Using uv uv add pillow # Or using pip pip install pillow