db620d33df
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
|
|
"""Text output observer for streaming agent text."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
from rich.markup import escape
|
|
|
|
from .base import ConsoleObserver
|
|
|
|
if TYPE_CHECKING:
|
|
from agent_framework import Agent
|
|
|
|
from ..state_driver import IUXStateDriver
|
|
|
|
|
|
class TextOutputObserver(ConsoleObserver):
|
|
"""Displays streaming text output from the agent.
|
|
|
|
Writes text chunks incrementally to the UX state driver as they arrive,
|
|
allowing real-time display during streaming.
|
|
"""
|
|
|
|
async def on_text(
|
|
self,
|
|
ux: IUXStateDriver,
|
|
text: str,
|
|
agent: Agent,
|
|
session: Any,
|
|
) -> None:
|
|
"""Write each text chunk directly to the UX driver.
|
|
|
|
Args:
|
|
ux: The UX state driver for UI updates.
|
|
text: The text chunk to display.
|
|
agent: The AI agent.
|
|
session: The agent session.
|
|
"""
|
|
ux.write_text(escape(text))
|
|
|
|
async def on_stream_complete(
|
|
self,
|
|
ux: IUXStateDriver,
|
|
agent: Agent,
|
|
session: Any,
|
|
) -> list | None:
|
|
"""No-op on stream complete (state managed by UX driver).
|
|
|
|
Args:
|
|
ux: The UX state driver for UI updates.
|
|
agent: The AI agent.
|
|
session: The agent session.
|
|
|
|
Returns:
|
|
None (no follow-up actions).
|
|
"""
|
|
return None
|