diff --git a/python/packages/core/agent_framework/_evaluation.py b/python/packages/core/agent_framework/_evaluation.py index 1c57b9f72d..7639ebc51d 100644 --- a/python/packages/core/agent_framework/_evaluation.py +++ b/python/packages/core/agent_framework/_evaluation.py @@ -17,7 +17,8 @@ evals = FoundryEvals(project_client=client, model="gpt-4o") results = await evaluate_agent(agent=agent, queries=["Hello"], evaluators=evals) - results.raise_for_status() + for result in results: + result.raise_for_status() Local evaluator example: diff --git a/python/packages/core/agent_framework/_middleware.py b/python/packages/core/agent_framework/_middleware.py index 0372967ccf..22c1ae8812 100644 --- a/python/packages/core/agent_framework/_middleware.py +++ b/python/packages/core/agent_framework/_middleware.py @@ -661,7 +661,7 @@ class ChatContext: class TokenCounterMiddleware(ChatMiddleware): async def process(self, context: ChatContext, call_next): - print(f"Chat client: {context.chat_client.__class__.__name__}") + print(f"Chat client: {context.client.__class__.__name__}") print(f"Messages: {len(context.messages)}") print(f"Model: {context.options.get('model')}") @@ -859,7 +859,13 @@ class AgentMiddleware(ABC): Examples: .. code-block:: python - from agent_framework import AgentMiddleware, AgentContext, Agent + from agent_framework import ( + Agent, + AgentContext, + AgentMiddleware, + MiddlewareFailure, + MiddlewareTermination, + ) class RetryMiddleware(AgentMiddleware): @@ -867,11 +873,17 @@ def __init__(self, max_retries: int = 3): self.max_retries = max_retries async def process(self, context: AgentContext, call_next): - for attempt in range(self.max_retries): - await call_next() - if context.result and not context.result.is_error: - break - print(f"Retry {attempt + 1}/{self.max_retries}") + for attempt in range(1, self.max_retries + 1): + try: + await call_next() + return + except (MiddlewareFailure, MiddlewareTermination): + # Abort and stop signals must reach the caller unchanged. + raise + except Exception: + if attempt == self.max_retries: + raise + print(f"Retry {attempt}/{self.max_retries}") # Use with an agent diff --git a/python/packages/core/agent_framework/observability.py b/python/packages/core/agent_framework/observability.py index fe24a7d138..e707f27aad 100644 --- a/python/packages/core/agent_framework/observability.py +++ b/python/packages/core/agent_framework/observability.py @@ -1058,7 +1058,7 @@ class ObservabilitySettings: Examples: .. code-block:: python - from agent_framework import ObservabilitySettings + from agent_framework.observability import ObservabilitySettings # Using environment variables # Instrumentation is enabled by default; set ENABLE_INSTRUMENTATION=false to disable. @@ -1397,7 +1397,7 @@ def get_tracer( Examples: .. code-block:: python - from agent_framework import get_tracer + from agent_framework.observability import get_tracer # Get default tracer tracer = get_tracer() @@ -1446,7 +1446,7 @@ def get_meter( Examples: .. code-block:: python - from agent_framework import get_meter + from agent_framework.observability import get_meter # Get default meter meter = get_meter() diff --git a/python/packages/core/agent_framework/security.py b/python/packages/core/agent_framework/security.py index 0ae5b5e77d..3e18525963 100644 --- a/python/packages/core/agent_framework/security.py +++ b/python/packages/core/agent_framework/security.py @@ -1343,7 +1343,8 @@ class LabelTrackingFunctionMiddleware(FunctionMiddleware, _SecurityScopeBinding) Examples: .. code-block:: python - from agent_framework import Agent, LabelTrackingFunctionMiddleware, tool + from agent_framework import Agent, tool + from agent_framework.security import LabelTrackingFunctionMiddleware @tool(additional_properties={"source_integrity": "trusted"}) @@ -4314,7 +4315,7 @@ def get_security_tools() -> list[FunctionTool]: from agent_framework.security import get_security_tools agent = Agent( - chat_client=client, + client=client, instructions="You are a helpful assistant.", tools=[my_tool, *get_security_tools()], ) @@ -4467,10 +4468,10 @@ async def apply_mcp_security_labels( async with MCPStdioTool(name="github", command="gh-mcp", args=["stdio"]) as mcp: await apply_mcp_security_labels(mcp) - agent = ChatCompletionAgent( - chat_client=client, + agent = Agent( + client=client, tools=[mcp], - context_providers=[SecureAgentConfig(chat_client=client)], + context_providers=[SecureAgentConfig(quarantine_chat_client=client)], ) """ if not getattr(mcp_tool, "is_connected", False):