mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
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:
committed by
GitHub
Unverified
parent
a4c9e43afb
commit
0521f5bed8
@@ -20,7 +20,7 @@ sequenceDiagram
|
||||
participant Agent as Agent.run()
|
||||
participant AML as AgentMiddlewareLayer
|
||||
participant AMP as AgentMiddlewarePipeline
|
||||
participant RawAgent as RawChatAgent.run()
|
||||
participant RawAgent as RawAgent.run()
|
||||
participant CML as ChatMiddlewareLayer
|
||||
participant CMP as ChatMiddlewarePipeline
|
||||
participant FIL as FunctionInvocationLayer
|
||||
@@ -46,14 +46,14 @@ sequenceDiagram
|
||||
alt Non-Streaming (stream=False)
|
||||
RawAgent->>RawAgent: _prepare_run_context() [async]
|
||||
Note right of RawAgent: Builds: thread_messages, chat_options, tools
|
||||
RawAgent->>CML: chat_client.get_response(stream=False)
|
||||
RawAgent->>CML: client.get_response(stream=False)
|
||||
else Streaming (stream=True)
|
||||
RawAgent->>RawAgent: ResponseStream.from_awaitable()
|
||||
Note right of RawAgent: Defers async prep to stream consumption
|
||||
RawAgent-->>User: Returns ResponseStream immediately
|
||||
Note over RawAgent,CML: Async work happens on iteration
|
||||
RawAgent->>RawAgent: _prepare_run_context() [deferred]
|
||||
RawAgent->>CML: chat_client.get_response(stream=True)
|
||||
RawAgent->>CML: client.get_response(stream=True)
|
||||
end
|
||||
|
||||
Note over CML,CMP: Chat Middleware Layer
|
||||
@@ -132,7 +132,7 @@ sequenceDiagram
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `agent` | `SupportsAgentRun` | The agent being invoked |
|
||||
| `messages` | `list[ChatMessage]` | Input messages (mutable) |
|
||||
| `messages` | `list[Message]` | Input messages (mutable) |
|
||||
| `thread` | `AgentThread \| None` | Conversation thread |
|
||||
| `options` | `Mapping[str, Any]` | Chat options dict |
|
||||
| `stream` | `bool` | Whether streaming is enabled |
|
||||
@@ -142,9 +142,9 @@ sequenceDiagram
|
||||
|
||||
**Key Operations:**
|
||||
1. `categorize_middleware()` separates middleware by type (agent, chat, function)
|
||||
2. Chat and function middleware are forwarded to `chat_client`
|
||||
2. Chat and function middleware are forwarded to `client`
|
||||
3. `AgentMiddlewarePipeline.execute()` runs the agent middleware chain
|
||||
4. Final handler calls `RawChatAgent.run()`
|
||||
4. Final handler calls `RawAgent.run()`
|
||||
|
||||
**What Can Be Modified:**
|
||||
- `context.messages` - Add, remove, or modify input messages
|
||||
@@ -154,14 +154,14 @@ sequenceDiagram
|
||||
|
||||
### 2. Chat Middleware Layer (`ChatMiddlewareLayer`)
|
||||
|
||||
**Entry Point:** `chat_client.get_response(messages, options)`
|
||||
**Entry Point:** `client.get_response(messages, options)`
|
||||
|
||||
**Context Object:** `ChatContext`
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| `chat_client` | `ChatClientProtocol` | The chat client |
|
||||
| `messages` | `Sequence[ChatMessage]` | Messages to send |
|
||||
| `client` | `SupportsChatGetResponse` | The chat client |
|
||||
| `messages` | `Sequence[Message]` | Messages to send |
|
||||
| `options` | `Mapping[str, Any]` | Chat options |
|
||||
| `stream` | `bool` | Whether streaming |
|
||||
| `metadata` | `dict` | Shared data between middleware |
|
||||
@@ -275,7 +275,7 @@ class TerminatingMiddleware(FunctionMiddleware):
|
||||
### Agent Layer → Chat Layer
|
||||
|
||||
```python
|
||||
# RawChatAgent._prepare_run_context() builds:
|
||||
# RawAgent._prepare_run_context() builds:
|
||||
{
|
||||
"thread": AgentThread, # Validated/created thread
|
||||
"input_messages": [...], # Normalized input messages
|
||||
@@ -463,7 +463,7 @@ Returns `Awaitable[AgentResponse]`:
|
||||
```python
|
||||
async def _run_non_streaming():
|
||||
ctx = await self._prepare_run_context(...) # Async preparation
|
||||
response = await self.chat_client.get_response(stream=False, ...)
|
||||
response = await self.client.get_response(stream=False, ...)
|
||||
await self._finalize_response_and_update_thread(...)
|
||||
return AgentResponse(...)
|
||||
```
|
||||
@@ -476,7 +476,7 @@ Returns `ResponseStream[AgentResponseUpdate, AgentResponse]` **synchronously**:
|
||||
# Async preparation is deferred using ResponseStream.from_awaitable()
|
||||
async def _get_stream():
|
||||
ctx = await self._prepare_run_context(...) # Deferred until iteration
|
||||
return self.chat_client.get_response(stream=True, ...)
|
||||
return self.client.get_response(stream=True, ...)
|
||||
|
||||
return (
|
||||
ResponseStream.from_awaitable(_get_stream())
|
||||
|
||||
Reference in New Issue
Block a user