mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
Python: [BREAKING] Python: Provider-leading client design & OpenAI package extraction (#4818)
* Python: Provider-leading client design & OpenAI package extraction Major refactoring of the Python Agent Framework client architecture: - Extract OpenAI clients into new `agent-framework-openai` package - Core package no longer depends on openai, azure-identity, azure-ai-projects - Rename clients for discoverability: OpenAIResponsesClient → OpenAIChatClient, OpenAIChatClient → OpenAIChatCompletionClient - Unify `model_id`/`deployment_name`/`model_deployment_name` → `model` param - New FoundryChatClient for Azure AI Foundry Responses API - New FoundryAgent/FoundryAgentClient for connecting to pre-configured Foundry agents - Remove OpenAIBase/OpenAIConfigMixin from non-deprecated client MRO - Deprecate AzureOpenAI* clients, AzureAIClient, OpenAIAssistantsClient - Reorganize samples: azure_openai+azure_ai+azure_ai_agent → azure/ - ADR-0020: Provider-Leading Client Design Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: missing Agent imports in samples, .model_id → .model in foundry_local sample Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: CI failures — mypy errors, coverage targets, sample imports - azure-ai mypy: add type ignores for TypedDict total=, model arg, forward ref - Coverage: replace core.azure/openai targets with openai package target - project_provider: add type annotation for opts dict Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: populate openai .pyi stub, fix broken README links, coverage targets Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fixes * updated observabilitty * reset azure init.pyi * fix errors * updated adr number * fix foundry local * fixed not renamed docstrings and comments, and added deprecated markers to old classes * fix tests and pyprojects * fix test vars * updated function tests * update durable * updated test setup for functions * Fix Foundry auth in workflow samples Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Stabilize Python integration workflows Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update hosting samples for Foundry Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Trigger full CI rerun Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Trigger CI rerun again Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * trigger rerun * trigger rerun * fix for litellm * undo durabletask changes * Move Foundry APIs into foundry namespace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Foundry pyproject formatting Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Split provider samples by Foundry surface Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Restore hosting sample requirements Also fix the Foundry Local sample link after the provider sample move. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * updated tests * udpated foundry integration tests * removed dist from azurefunctions tests * Use separate Foundry clients for concurrent agents Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix client setup in azfunc and durable * disabled two tests * updated setup for some function and durable tests * improved azure openai setup with new clients * ignore deprecated * fixes * skip 11 * remove openai assistants int tests --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
Unverified
parent
4b533608b6
commit
5e056b672e
+3
-9
@@ -9,21 +9,19 @@
|
||||
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
"""Create an OpenAI Assistant using SK and Agent Framework."""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
|
||||
from agent_framework import Agent
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load environment variables from .env file
|
||||
load_dotenv()
|
||||
|
||||
ASSISTANT_MODEL = os.environ.get("OPENAI_ASSISTANT_MODEL", "gpt-4o-mini")
|
||||
|
||||
|
||||
async def run_semantic_kernel() -> None:
|
||||
from semantic_kernel.agents import AssistantAgentThread, OpenAIAssistantAgent
|
||||
|
||||
client = OpenAIAssistantAgent.create_client()
|
||||
# Provision the assistant on the OpenAI Assistants service.
|
||||
definition = await client.beta.assistants.create(
|
||||
@@ -32,7 +30,6 @@ async def run_semantic_kernel() -> None:
|
||||
instructions="Answer questions in one concise paragraph.",
|
||||
)
|
||||
agent = OpenAIAssistantAgent(client=client, definition=definition)
|
||||
|
||||
thread: AssistantAgentThread | None = None
|
||||
response = await agent.get_response("What is the capital of Denmark?", thread=thread)
|
||||
thread = response.thread
|
||||
@@ -43,13 +40,10 @@ async def run_semantic_kernel() -> None:
|
||||
|
||||
async def run_agent_framework() -> None:
|
||||
from agent_framework.openai import OpenAIAssistantsClient
|
||||
|
||||
assistants_client = OpenAIAssistantsClient()
|
||||
# AF wraps the assistant lifecycle with an async context manager.
|
||||
async with assistants_client.as_agent(
|
||||
name="Helper",
|
||||
instructions="Answer questions in one concise paragraph.",
|
||||
model=ASSISTANT_MODEL,
|
||||
async with Agent(
|
||||
client=assistants_client,
|
||||
) as assistant_agent:
|
||||
session = assistant_agent.create_session()
|
||||
reply = await assistant_agent.run("What is the capital of Denmark?", session=session)
|
||||
|
||||
+3
-1
@@ -1,4 +1,5 @@
|
||||
# /// script
|
||||
|
||||
# requires-python = ">=3.10"
|
||||
# dependencies = [
|
||||
# "semantic-kernel",
|
||||
@@ -12,6 +13,7 @@
|
||||
|
||||
import asyncio
|
||||
|
||||
from agent_framework import Agent
|
||||
from dotenv import load_dotenv
|
||||
|
||||
# Load environment variables from .env file
|
||||
@@ -50,7 +52,7 @@ async def run_agent_framework() -> None:
|
||||
code_interpreter_tool = OpenAIAssistantsClient.get_code_interpreter_tool()
|
||||
|
||||
# AF exposes the same tool configuration via create_agent.
|
||||
async with assistants_client.as_agent(
|
||||
async with Agent(client=assistants_client,
|
||||
name="CodeRunner",
|
||||
instructions="Use the code interpreter when calculations are required.",
|
||||
model="gpt-4.1",
|
||||
|
||||
+2
-2
@@ -69,7 +69,7 @@ async def run_semantic_kernel() -> None:
|
||||
|
||||
|
||||
async def run_agent_framework() -> None:
|
||||
from agent_framework import tool
|
||||
from agent_framework import Agent, tool
|
||||
from agent_framework.openai import OpenAIAssistantsClient
|
||||
|
||||
@tool(
|
||||
@@ -81,7 +81,7 @@ async def run_agent_framework() -> None:
|
||||
|
||||
assistants_client = OpenAIAssistantsClient()
|
||||
# AF converts the decorated function into an assistant-compatible tool.
|
||||
async with assistants_client.as_agent(
|
||||
async with Agent(client=assistants_client,
|
||||
name="WeatherHelper",
|
||||
instructions="Call get_forecast to fetch weather details.",
|
||||
model=ASSISTANT_MODEL,
|
||||
|
||||
Reference in New Issue
Block a user