diff --git a/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_object_response_format.py b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_object_response_format.py new file mode 100644 index 000000000000..ffb699cd4778 --- /dev/null +++ b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_object_response_format.py @@ -0,0 +1,73 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +DESCRIPTION: + This sample demonstrates how to create an agent with json response format. + +USAGE: + python sample_agents_json_object_response_format.py + + Before running the sample: + + pip install azure-ai-projects azure-ai-agents azure-identity + + Set these environment variables with your own values: + 1) PROJECT_ENDPOINT - The Azure AI Project endpoint, as found in the Overview + page of your Azure AI Foundry portal. + 2) MODEL_DEPLOYMENT_NAME - The deployment name of the AI model, as found under the "Name" column in + the "Models + endpoints" tab in your Azure AI Foundry project. +""" + +import os, time +from azure.ai.projects import AIProjectClient +from azure.identity import DefaultAzureCredential +from azure.ai.agents.models import ListSortOrder, AgentsResponseFormat + +project_client = AIProjectClient( + endpoint=os.environ["PROJECT_ENDPOINT"], + credential=DefaultAzureCredential(), +) + +with project_client: + agents_client = project_client.agents + + agent = agents_client.create_agent( + model=os.environ["MODEL_DEPLOYMENT_NAME"], + name="my-agent", + instructions="You are helpful agent. You will respond with a JSON object.", + response_format=AgentsResponseFormat(type="json_object") + ) + print(f"Created agent, agent ID: {agent.id}") + + thread = agents_client.threads.create() + print(f"Created thread, thread ID: {thread.id}") + + # List all threads for the agent + threads = agents_client.threads.list() + + message = agents_client.messages.create(thread_id=thread.id, role="user", content="Hello, give me a list of planets in our solar system.") + print(f"Created message, message ID: {message.id}") + + run = agents_client.runs.create(thread_id=thread.id, agent_id=agent.id) + + # Poll the run as long as run status is queued or in progress + while run.status in ["queued", "in_progress", "requires_action"]: + # Wait for a second + time.sleep(1) + run = agents_client.runs.get(thread_id=thread.id, run_id=run.id) + print(f"Run status: {run.status}") + + if run.status == "failed": + print(f"Run error: {run.last_error}") + + agents_client.delete_agent(agent.id) + print("Deleted agent") + + messages = agents_client.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING) + for msg in messages: + if msg.text_messages: + last_text = msg.text_messages[-1] + print(f"{msg.role}: {last_text.text.value}") diff --git a/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_schema_response_format.py b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_schema_response_format.py new file mode 100644 index 000000000000..a4825a754afd --- /dev/null +++ b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_json_schema_response_format.py @@ -0,0 +1,101 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +DESCRIPTION: + This sample demonstrates how to use agents with JSON schema output format. + +USAGE: + python sample_agents_json_schema_response_format.py + + Before running the sample: + + pip install azure-ai-projects azure-ai-agents azure-identity pydantic + + Set these environment variables with your own values: + 1) PROJECT_ENDPOINT - The Azure AI Project endpoint, as found in the Overview + page of your Azure AI Foundry portal. + 2) MODEL_DEPLOYMENT_NAME - The deployment name of the AI model, as found under the "Name" column in + the "Models + endpoints" tab in your Azure AI Foundry project. +""" + +import os + +from enum import Enum +from pydantic import BaseModel, TypeAdapter +from azure.ai.projects import AIProjectClient +from azure.identity import DefaultAzureCredential +from azure.ai.agents.models import ( + ListSortOrder, + MessageTextContent, + MessageRole, + ResponseFormatJsonSchema, + ResponseFormatJsonSchemaType, + RunStatus, +) + + +# Create the pydantic model to represent the planet names and there masses. +class Planets(str, Enum): + Earth = "Earth" + Mars = "Mars" + Mercury = "Mercury" + +class Planet(BaseModel): + planet: Planets + mass: float + + +project_client = AIProjectClient( + endpoint=os.environ["PROJECT_ENDPOINT"], + credential=DefaultAzureCredential(), +) + +with project_client: + agents_client = project_client.agents + + agent = agents_client.create_agent( + model=os.environ["MODEL_DEPLOYMENT_NAME"], + name="my-agent", + instructions="Extract the information about planets.", + response_format=ResponseFormatJsonSchemaType( + json_schema=ResponseFormatJsonSchema( + name="planet_mass", + description="Extract planet mass.", + schema=Planet.model_json_schema(), + ) + ), + ) + print(f"Created agent, agent ID: {agent.id}") + + thread = agents_client.threads.create() + print(f"Created thread, thread ID: {thread.id}") + + message = agents_client.messages.create( + thread_id=thread.id, + role="user", + content=("The mass of the Mars is 6.4171E23 kg; the mass of the Earth is 5.972168E24 kg;"), + ) + print(f"Created message, message ID: {message.id}") + + run = agents_client.runs.create_and_process(thread_id=thread.id, agent_id=agent.id) + + if run.status != RunStatus.COMPLETED: + print(f"The run did not succeed: {run.status=}.") + + agents_client.delete_agent(agent.id) + print("Deleted agent") + + messages = agents_client.messages.list( + thread_id=thread.id, + order=ListSortOrder.ASCENDING, + ) + + for msg in messages: + if msg.role == MessageRole.AGENT: + last_part = msg.content[-1] + if isinstance(last_part, MessageTextContent): + planet = TypeAdapter(Planet).validate_json(last_part.text.value) + print(f"The mass of {planet.planet} is {planet.mass} kg.") diff --git a/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_text_response_format.py b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_text_response_format.py new file mode 100644 index 000000000000..1d5ba99cb8aa --- /dev/null +++ b/sdk/ai/azure-ai-agents/samples/agents_response_formats/sample_agents_text_response_format.py @@ -0,0 +1,73 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +DESCRIPTION: + This sample demonstrates how to create an agent with text response format. + +USAGE: + python sample_agents_text_response_format.py + + Before running the sample: + + pip install azure-ai-projects azure-ai-agents azure-identity + + Set these environment variables with your own values: + 1) PROJECT_ENDPOINT - The Azure AI Project endpoint, as found in the Overview + page of your Azure AI Foundry portal. + 2) MODEL_DEPLOYMENT_NAME - The deployment name of the AI model, as found under the "Name" column in + the "Models + endpoints" tab in your Azure AI Foundry project. +""" + +import os, time +from azure.ai.projects import AIProjectClient +from azure.identity import DefaultAzureCredential +from azure.ai.agents.models import ListSortOrder, AgentsResponseFormat + +project_client = AIProjectClient( + endpoint=os.environ["PROJECT_ENDPOINT"], + credential=DefaultAzureCredential(), +) + +with project_client: + agents_client = project_client.agents + + agent = agents_client.create_agent( + model=os.environ["MODEL_DEPLOYMENT_NAME"], + name="my-agent", + instructions="You are helpful agent.", + response_format=AgentsResponseFormat(type="text") + ) + print(f"Created agent, agent ID: {agent.id}") + + thread = agents_client.threads.create() + print(f"Created thread, thread ID: {thread.id}") + + # List all threads for the agent + threads = agents_client.threads.list() + + message = agents_client.messages.create(thread_id=thread.id, role="user", content="Hello, give me a list of planets in our solar system.") + print(f"Created message, message ID: {message.id}") + + run = agents_client.runs.create(thread_id=thread.id, agent_id=agent.id) + + # Poll the run as long as run status is queued or in progress + while run.status in ["queued", "in_progress", "requires_action"]: + # Wait for a second + time.sleep(1) + run = agents_client.runs.get(thread_id=thread.id, run_id=run.id) + print(f"Run status: {run.status}") + + if run.status == "failed": + print(f"Run error: {run.last_error}") + + agents_client.delete_agent(agent.id) + print("Deleted agent") + + messages = agents_client.messages.list(thread_id=thread.id, order=ListSortOrder.ASCENDING) + for msg in messages: + if msg.text_messages: + last_text = msg.text_messages[-1] + print(f"{msg.role}: {last_text.text.value}")