# Copyright (c) Microsoft. All rights reserved. import asyncio from pathlib import Path from random import randint from typing import Literal from agent_framework.declarative import AgentFactory from agent_framework.foundry import FoundryChatClient from azure.identity import AzureCliCredential from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() def get_weather(location: str, unit: Literal["celsius", "fahrenheit"] = "celsius") -> str: """A simple function tool to get weather information.""" return f"The weather in {location} is {randint(-10, 30) if unit == 'celsius' else randint(30, 100)} degrees {unit}." async def main(): """Create an agent from a declarative yaml specification and run it.""" # get the path current_path = Path(__file__).parent yaml_path = ( current_path.parent.parent.parent.parent / "declarative-agents" / "agent-samples" / "chatclient" / "GetWeather.yaml" ) # load the yaml from the path with yaml_path.open("r") as f: yaml_str = f.read() # create the AgentFactory with a chat client and bindings agent_factory = AgentFactory( client=FoundryChatClient(credential=AzureCliCredential()), bindings={"get_weather": get_weather}, ) # create the agent from the yaml agent = agent_factory.create_agent_from_yaml(yaml_str) # use the agent response = await agent.run("What's the weather in Amsterdam, in celsius?") print("Agent response:", response.text) if __name__ == "__main__": asyncio.run(main())