Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio
from datetime import datetime

from agent_framework import tool
from agent_framework import Message, tool
from agent_framework.ollama import OllamaChatClient

"""
Expand All @@ -29,16 +29,17 @@ def get_time():
async def main() -> None:
client = OllamaChatClient()
message = "What time is it? Use a tool call"
messages = [Message(role="user", text=message)]
stream = False
print(f"User: {message}")
if stream:
print("Assistant: ", end="")
async for chunk in client.get_response(message, tools=get_time, stream=True):
async for chunk in client.get_response(messages, tools=get_time, stream=True):
if str(chunk):
print(str(chunk), end="")
print("")
else:
response = await client.get_response(message, tools=get_time)
response = await client.get_response(messages, tools=get_time)
print(f"Assistant: {response}")


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ async def test_image() -> None:
],
)

response = await client.get_response(message)
response = await client.get_response([message])
print(f"Image Response: {response}")


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from agent_framework import Agent, Message, tool
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential

"""
Tool Approvals with Sessions
Expand All @@ -29,7 +30,7 @@ async def approval_example() -> None:
print("=== Tool Approval with Session ===\n")

agent = Agent(
client=AzureOpenAIChatClient(),
client=AzureOpenAIChatClient(credential=AzureCliCredential()),
name="CalendarAgent",
instructions="You are a helpful calendar assistant.",
tools=[add_to_calendar],
Expand Down Expand Up @@ -65,7 +66,7 @@ async def rejection_example() -> None:
print("=== Tool Rejection with Session ===\n")

agent = Agent(
client=AzureOpenAIChatClient(),
client=AzureOpenAIChatClient(credential=AzureCliCredential()),
name="CalendarAgent",
instructions="You are a helpful calendar assistant.",
tools=[add_to_calendar],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ async def main():
============================================================
Step 1: Call divide(10, 0) - tool raises exception
Tool failed with error: division by zero
[2025-10-31 15:39:53 - /Users/edvan/Work/agent-framework/python/packages/core/agent_framework/_tools.py:718 - ERROR]
Function failed. Error: division by zero
Response: Division by zero is undefined in standard arithmetic. There is no finite value for 10 ÷ 0.

If you want alternatives:
Expand All @@ -80,9 +78,6 @@ async def main():
Would you like me to show a safe division snippet in a specific language, or compute something else?
============================================================
Step 2: Call divide(100, 0) - will refuse to execute due to max_invocations
[2025-10-31 15:40:09 - /Users/edvan/Work/agent-framework/python/packages/core/agent_framework/_tools.py:718 - ERROR]
Function failed. Error: Function 'safe_divide' has reached its maximum exception limit, you tried to use this
tool too many times and it kept failing.
Response: Division by zero is undefined in standard arithmetic, so 100 ÷ 0 has no finite value.

If you’re coding and want safe handling, here are quick patterns in a few languages:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,6 @@ async def main():
Response: Five unicorns summoned: 🦄🦄🦄🦄🦄✨
============================================================
Step 2: Call unicorn_function again - will refuse to execute due to max_invocations
[2025-10-31 15:54:40 - /Users/edvan/Work/agent-framework/python/packages/core/agent_framework/_tools.py:718 - ERROR]
Function failed. Error: Function 'unicorn_function' has reached its maximum invocation limit,
you can no longer use this tool.
Response: The unicorn function has reached its maximum invocation limit. I can’t call it again right now.

Here are 10 unicorns manually: 🦄 🦄 🦄 🦄 🦄 🦄 🦄 🦄 🦄 🦄
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,10 @@ async def main() -> None:
session = agent.create_session()

# Run the agent with the session
print(f"Agent: {await agent.run('What is the weather in London?', session=session)}")
print(f"Agent: {await agent.run('What is the weather in Amsterdam?', session=session)}")
# Pass session via additional_function_arguments so tools can access it via **kwargs
opts = {"additional_function_arguments": {"session": session}}
print(f"Agent: {await agent.run('What is the weather in London?', session=session, options=opts)}")
print(f"Agent: {await agent.run('What is the weather in Amsterdam?', session=session, options=opts)}")
print(f"Agent: {await agent.run('What cities did I ask about?', session=session)}")


Expand Down
2 changes: 0 additions & 2 deletions python/samples/02-agents/tools/tool_in_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,6 @@ async def main():
see more on limits or handle it with a tiny epsilon?
============================================================
Step 2: Call set safe to False and call again
[2025-10-31 16:17:44 - /Users/edvan/Work/agent-framework/python/packages/core/agent_framework/_tools.py:718 - ERROR]
Function failed. Error: division by zero
Response: Division by zero is undefined in standard arithmetic. There is no number y such that 0 × y = 10.

If you’re looking at limits:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import asyncio

from agent_framework import AgentResponseUpdate
from agent_framework import Message


async def run_autogen() -> None:
Expand Down Expand Up @@ -91,17 +91,12 @@ async def run_agent_framework() -> None:

# Run the workflow
print("[Agent Framework] Sequential conversation:")
current_executor = None
async for event in workflow.run("Create a brief summary about electric vehicles", stream=True):
if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
# Print executor name header when switching to a new agent
if current_executor != event.executor_id:
if current_executor is not None:
print() # Newline after previous agent's message
print(f"---------- {event.executor_id} ----------")
current_executor = event.executor_id
print(event.data.text, end="", flush=True)
print() # Final newline after conversation
if event.type == "output" and isinstance(event.data, list):
for message in event.data:
if isinstance(message, Message) and message.role == "assistant" and message.text:
print(f"---------- {message.author_name} ----------")
print(message.text)


async def run_agent_framework_with_cycle() -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import asyncio

from agent_framework import AgentResponseUpdate
from agent_framework import Message


async def run_autogen() -> None:
Expand Down Expand Up @@ -106,18 +106,12 @@ async def run_agent_framework() -> None:

# Run with a question that requires expert selection
print("[Agent Framework] Group chat conversation:")
current_executor = None
async for event in workflow.run("How do I connect to a PostgreSQL database using Python?", stream=True):
if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
# Print executor name header when switching to a new agent
if current_executor != event.executor_id:
if current_executor is not None:
print() # Newline after previous agent's message
print(f"---------- {event.executor_id} ----------")
current_executor = event.executor_id
if event.data:
print(event.data.text, end="", flush=True)
print() # Final newline after conversation
if event.type == "output" and isinstance(event.data, list):
for message in event.data:
if isinstance(message, Message) and message.role == "assistant" and message.text:
print(f"---------- {message.author_name} ----------")
print(message.text)


async def main() -> None:
Expand Down
6 changes: 4 additions & 2 deletions python/samples/autogen-migration/orchestrations/03_swarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import asyncio

from agent_framework import AgentResponseUpdate, WorkflowEvent
from orderedmultidict import Any
from typing import Any


async def run_autogen() -> None:
Expand Down Expand Up @@ -197,7 +197,9 @@ async def run_agent_framework() -> None:
print("---------- user ----------")
print(user_response)

responses: dict[str, Any] = {req.request_id: user_response for req in pending_requests} # type: ignore
responses: dict[str, Any] = {
req.request_id: HandoffAgentUserRequest.create_response(user_response) for req in pending_requests
} # type: ignore
pending_requests = []
current_executor = None
stream_line_open = False
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ async def run_autogen() -> None:

print("\n[AutoGen] Streaming response:")
# Stream response with Console for token streaming
await Console(agent.run(task="Count from 1 to 5", stream=True))
await Console(agent.run_stream(task="Count from 1 to 5"))


async def run_agent_framework() -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ async def run_autogen() -> None:

# Run coordinator with streaming - it will delegate to writer
print("[AutoGen]")
await Console(coordinator.run(task="Create a tagline for a coffee shop", stream=True))
await Console(coordinator.run_stream(task="Create a tagline for a coffee shop"))


async def run_agent_framework() -> None:
Expand Down