Some checks are pending
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / paths-filter (push) Waiting to run
dotnet-build-and-test / dotnet-build-and-test (Debug, windows-latest, net9.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, integration, true, ubuntu-latest, net10.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, integration, true, windows-latest, net472) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test (Release, ubuntu-latest, net8.0) (push) Blocked by required conditions
dotnet-build-and-test / dotnet-build-and-test-check (push) Blocked by required conditions
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
# Copyright (c) Microsoft. All rights reserved.
|
|
"""Foundry-based weather agent for Agent Framework Debug UI.
|
|
|
|
This agent uses Azure AI Foundry with Azure CLI authentication.
|
|
Make sure to run 'az login' before starting devui.
|
|
"""
|
|
|
|
import os
|
|
from typing import Annotated
|
|
|
|
from agent_framework import ChatAgent
|
|
from agent_framework.azure import AzureAIAgentClient
|
|
from azure.identity.aio import AzureCliCredential
|
|
from pydantic import Field
|
|
|
|
|
|
def get_weather(
|
|
location: Annotated[str, Field(description="The location to get the weather for.")],
|
|
) -> str:
|
|
"""Get the weather for a given location."""
|
|
conditions = ["sunny", "cloudy", "rainy", "stormy"]
|
|
temperature = 22
|
|
return f"The weather in {location} is {conditions[0]} with a high of {temperature}°C."
|
|
|
|
|
|
def get_forecast(
|
|
location: Annotated[str, Field(description="The location to get the forecast for.")],
|
|
days: Annotated[int, Field(description="Number of days for forecast")] = 3,
|
|
) -> str:
|
|
"""Get weather forecast for multiple days."""
|
|
conditions = ["sunny", "cloudy", "rainy", "stormy"]
|
|
forecast: list[str] = []
|
|
|
|
for day in range(1, days + 1):
|
|
condition = conditions[day % len(conditions)]
|
|
temp = 18 + day
|
|
forecast.append(f"Day {day}: {condition}, {temp}°C")
|
|
|
|
return f"Weather forecast for {location}:\n" + "\n".join(forecast)
|
|
|
|
|
|
# Agent instance following Agent Framework conventions
|
|
agent = ChatAgent(
|
|
name="FoundryWeatherAgent",
|
|
chat_client=AzureAIAgentClient(
|
|
project_endpoint=os.environ.get("AZURE_AI_PROJECT_ENDPOINT"),
|
|
model_deployment_name=os.environ.get("FOUNDRY_MODEL_DEPLOYMENT_NAME"),
|
|
credential=AzureCliCredential(),
|
|
),
|
|
instructions="""
|
|
You are a weather assistant using Azure AI Foundry models. You can provide
|
|
current weather information and forecasts for any location. Always be helpful
|
|
and provide detailed weather information when asked.
|
|
""",
|
|
tools=[get_weather, get_forecast],
|
|
)
|
|
|
|
|
|
def main():
|
|
"""Launch the Foundry weather agent in DevUI."""
|
|
import logging
|
|
|
|
from agent_framework.devui import serve
|
|
|
|
# Setup logging
|
|
logging.basicConfig(level=logging.INFO, format="%(message)s")
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.info("Starting Foundry Weather Agent")
|
|
logger.info("Available at: http://localhost:8090")
|
|
logger.info("Entity ID: agent_FoundryWeatherAgent")
|
|
logger.info("Note: Make sure 'az login' has been run for authentication")
|
|
|
|
# Launch server with the agent
|
|
serve(entities=[agent], port=8090, auto_open=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|