Python: [BREAKING] Simplify API: ChatAgent -> Agent, ChatMessage -> Message (#3747)

* [BREAKING] Rename ChatAgent -> Agent, ChatMessage -> Message, ChatClientProtocol -> SupportsChatGetResponse

Simplify the public API by removing redundant 'Chat' prefix from core types:
- ChatAgent -> Agent
- RawChatAgent -> RawAgent
- ChatMessage -> Message
- ChatClientProtocol -> SupportsChatGetResponse

Also renamed internal WorkflowMessage (was Message in _runner_context) to avoid collision.

No backward compatibility aliases - this is a clean breaking change.

* [BREAKING] Rename Agent chat_client parameter to client

* Fix rebase issues: WorkflowMessage references and broken markdown links

* Fix formatting and lint issues from code quality checks

* Fix import ordering in workflow sample files

* fixed rebase

* Fix test failures: use WorkflowMessage and A2AMessage after ChatMessage→Message rename

- Replace Message(data=..., source_id=...) with WorkflowMessage(...) in workflow tests
- Fix isinstance check in A2A agent to use A2AMessage instead of Message
- Fix import in test_workflow_observability.py (Message→WorkflowMessage)

* Fix lint, fmt, and sample errors after ChatMessage→Message rename

- Auto-fix 70+ ruff lint issues across samples (ChatMessage→Message refs)
- Fix HostedVectorStoreContent→Content.from_hosted_vector_store in file search sample
- Fix _normalize_messages→normalize_messages in custom agent sample
- Fix context.terminate→raise MiddlewareTermination in middleware samples
- Fix with_update_hook→with_transform_hook in override middleware sample
- Add TOptions_co import back to custom_chat_client sample
- Add noqa for FastAPI File() default in chatkit sample
- Fix B023 loop variable capture in weather agent sample

* fix: update Agent constructor calls from chat_client to client in declaration-only tool tests

* fix: add register_cleanup to devui lazy-loading proxy and type stub

* fixed tests and updated new pieces

* fix agui typevar

* fix merge errors

* fix merge conflicts

* fiux merge

* Remove unused links

---------

Co-authored-by: Evan Mattson <evan.mattson@microsoft.com>
This commit is contained in:
Eduard van Valkenburg
2026-02-11 00:04:32 +01:00
committed by GitHub
Unverified
parent a4c9e43afb
commit 0521f5bed8
418 changed files with 5385 additions and 5389 deletions
@@ -15,7 +15,7 @@ import asyncio
import logging
import os
from agent_framework import ChatAgent
from agent_framework import Agent
from agent_framework.azure import AzureOpenAIChatClient, DurableAIAgentWorker
from azure.identity import AzureCliCredential, DefaultAzureCredential
from durabletask.azuremanaged.worker import DurableTaskSchedulerWorker
@@ -25,11 +25,11 @@ logging.basicConfig(level=logging.WARNING)
logger = logging.getLogger(__name__)
def create_joker_agent() -> ChatAgent:
def create_joker_agent() -> Agent:
"""Create the Joker agent using Azure OpenAI.
Returns:
ChatAgent: The configured Joker agent
Agent: The configured Joker agent
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name="Joker",
@@ -65,7 +65,7 @@ def create_weather_agent():
"""Create the Weather agent using Azure OpenAI.
Returns:
ChatAgent: The configured Weather agent with weather tool
Agent: The configured Weather agent with weather tool
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=WEATHER_AGENT_NAME,
@@ -78,7 +78,7 @@ def create_math_agent():
"""Create the Math agent using Azure OpenAI.
Returns:
ChatAgent: The configured Math agent with calculation tools
Agent: The configured Math agent with calculation tools
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=MATH_AGENT_NAME,
@@ -18,7 +18,7 @@ import os
from datetime import timedelta
import redis.asyncio as aioredis
from agent_framework import AgentResponseUpdate, ChatAgent
from agent_framework import Agent, AgentResponseUpdate
from agent_framework.azure import (
AgentCallbackContext,
AgentResponseCallbackProtocol,
@@ -143,11 +143,11 @@ class RedisStreamCallback(AgentResponseCallbackProtocol):
logger.error(f"Error writing end-of-stream marker: {ex}", exc_info=True)
def create_travel_agent() -> "ChatAgent":
def create_travel_agent() -> "Agent":
"""Create the TravelPlanner agent using Azure OpenAI.
Returns:
ChatAgent: The configured TravelPlanner agent with travel planning tools.
Agent: The configured TravelPlanner agent with travel planning tools.
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name="TravelPlanner",
@@ -17,7 +17,7 @@ import logging
import os
from collections.abc import Generator
from agent_framework import AgentResponse, ChatAgent
from agent_framework import Agent, AgentResponse
from agent_framework.azure import AzureOpenAIChatClient, DurableAIAgentOrchestrationContext, DurableAIAgentWorker
from azure.identity import AzureCliCredential, DefaultAzureCredential
from durabletask.azuremanaged.worker import DurableTaskSchedulerWorker
@@ -31,14 +31,14 @@ logger = logging.getLogger(__name__)
WRITER_AGENT_NAME = "WriterAgent"
def create_writer_agent() -> "ChatAgent":
def create_writer_agent() -> "Agent":
"""Create the Writer agent using Azure OpenAI.
This agent refines short pieces of text, enhancing initial sentences
and polishing improved versions further.
Returns:
ChatAgent: The configured Writer agent
Agent: The configured Writer agent
"""
instructions = (
"You refine short pieces of text. When given an initial sentence you enhance it;\n"
@@ -18,7 +18,7 @@ import os
from collections.abc import Generator
from typing import Any
from agent_framework import AgentResponse, ChatAgent
from agent_framework import Agent, AgentResponse
from agent_framework.azure import AzureOpenAIChatClient, DurableAIAgentOrchestrationContext, DurableAIAgentWorker
from azure.identity import AzureCliCredential, DefaultAzureCredential
from durabletask.azuremanaged.worker import DurableTaskSchedulerWorker
@@ -33,11 +33,11 @@ PHYSICIST_AGENT_NAME = "PhysicistAgent"
CHEMIST_AGENT_NAME = "ChemistAgent"
def create_physicist_agent() -> "ChatAgent":
def create_physicist_agent() -> "Agent":
"""Create the Physicist agent using Azure OpenAI.
Returns:
ChatAgent: The configured Physicist agent
Agent: The configured Physicist agent
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=PHYSICIST_AGENT_NAME,
@@ -45,11 +45,11 @@ def create_physicist_agent() -> "ChatAgent":
)
def create_chemist_agent() -> "ChatAgent":
def create_chemist_agent() -> "Agent":
"""Create the Chemist agent using Azure OpenAI.
Returns:
ChatAgent: The configured Chemist agent
Agent: The configured Chemist agent
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=CHEMIST_AGENT_NAME,
@@ -18,7 +18,7 @@ import os
from collections.abc import Generator
from typing import Any, cast
from agent_framework import AgentResponse, ChatAgent
from agent_framework import Agent, AgentResponse
from agent_framework.azure import AzureOpenAIChatClient, DurableAIAgentOrchestrationContext, DurableAIAgentWorker
from azure.identity import AzureCliCredential, DefaultAzureCredential
from durabletask.azuremanaged.worker import DurableTaskSchedulerWorker
@@ -51,11 +51,11 @@ class EmailPayload(BaseModel):
email_content: str
def create_spam_agent() -> "ChatAgent":
def create_spam_agent() -> "Agent":
"""Create the Spam Detection agent using Azure OpenAI.
Returns:
ChatAgent: The configured Spam Detection agent
Agent: The configured Spam Detection agent
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=SPAM_AGENT_NAME,
@@ -63,11 +63,11 @@ def create_spam_agent() -> "ChatAgent":
)
def create_email_agent() -> "ChatAgent":
def create_email_agent() -> "Agent":
"""Create the Email Assistant agent using Azure OpenAI.
Returns:
ChatAgent: The configured Email Assistant agent
Agent: The configured Email Assistant agent
"""
return AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name=EMAIL_AGENT_NAME,
@@ -19,7 +19,7 @@ from collections.abc import Generator
from datetime import timedelta
from typing import Any, cast
from agent_framework import AgentResponse, ChatAgent
from agent_framework import Agent, AgentResponse
from agent_framework.azure import AzureOpenAIChatClient, DurableAIAgentOrchestrationContext, DurableAIAgentWorker
from azure.identity import AzureCliCredential, DefaultAzureCredential
from durabletask.azuremanaged.worker import DurableTaskSchedulerWorker
@@ -54,11 +54,11 @@ class HumanApproval(BaseModel):
feedback: str = ""
def create_writer_agent() -> "ChatAgent":
def create_writer_agent() -> "Agent":
"""Create the Writer agent using Azure OpenAI.
Returns:
ChatAgent: The configured Writer agent
Agent: The configured Writer agent
"""
instructions = (
"You are a professional content writer who creates high-quality articles on various topics. "