# Copyright (c) Microsoft. All rights reserved. import asyncio import logging from collections.abc import Sequence from agent_framework import ( AgentResponse, ChatAgent, FunctionCallContent, FunctionResultContent, Role, TextContent, ai_function, ) from agent_framework_bedrock import BedrockChatClient @ai_function def get_weather(city: str) -> dict[str, str]: """Return a mock forecast for the requested city.""" normalized = city.strip() or "New York" return {"city": normalized, "forecast": "72F and sunny"} async def main() -> None: """Run the Bedrock sample agent, invoke the weather tool, and log the response.""" agent = ChatAgent( chat_client=BedrockChatClient(), instructions="You are a concise travel assistant.", name="BedrockWeatherAgent", tool_choice="auto", tools=[get_weather], ) response = await agent.run("Use the weather tool to check the forecast for new york.") logging.info("\nAssistant reply:", response.text or "") _log_response(response) def _log_response(response: AgentResponse) -> None: logging.info("\nConversation transcript:") for idx, message in enumerate(response.messages, start=1): tag = f"{idx}. {message.role.value if isinstance(message.role, Role) else message.role}" _log_contents(tag, message.contents) def _log_contents(tag: str, contents: Sequence[object]) -> None: logging.info(f"[{tag}] {len(contents)} content blocks") for idx, content in enumerate(contents, start=1): if isinstance(content, TextContent): logging.info(f" {idx}. text -> {content.text}") elif isinstance(content, FunctionCallContent): logging.info(f" {idx}. tool_call ({content.name}) -> {content.arguments}") elif isinstance(content, FunctionResultContent): logging.info(f" {idx}. tool_result ({content.call_id}) -> {content.result}") else: # pragma: no cover - defensive logging.info(f" {idx}. {content.type}") if __name__ == "__main__": asyncio.run(main())