From 5d1e38c054c652b58c4e1767d07f273acde462ca Mon Sep 17 00:00:00 2001 From: Glenn Harper Date: Fri, 15 Nov 2024 10:18:58 -0800 Subject: [PATCH] add fabric tool def and sample --- .../azure/ai/projects/models/_patch.py | 16 ++++ .../samples/agents/sample_agents_fabric.py | 80 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 sdk/ai/azure-ai-projects/samples/agents/sample_agents_fabric.py diff --git a/sdk/ai/azure-ai-projects/azure/ai/projects/models/_patch.py b/sdk/ai/azure-ai-projects/azure/ai/projects/models/_patch.py index 6686aacdd06c..f8097ece719a 100644 --- a/sdk/ai/azure-ai-projects/azure/ai/projects/models/_patch.py +++ b/sdk/ai/azure-ai-projects/azure/ai/projects/models/_patch.py @@ -55,6 +55,7 @@ MessageTextContent, MessageTextFileCitationAnnotation, MessageTextFilePathAnnotation, + MicrosoftFabricToolDefinition, OpenAIPageableListOfThreadMessage, RequiredFunctionToolCall, RunStep, @@ -580,6 +581,20 @@ def definitions(self) -> List[ToolDefinition]: return [BingGroundingToolDefinition(bing_grounding=ToolConnectionList(connection_list=self.connection_ids))] +class FabricTool(ConnectionTool): + """ + A tool that searches for information using Microsoft Fabric. + """ + + @property + def definitions(self) -> List[ToolDefinition]: + """ + Get the Microsoft Fabric tool definitions. + + :rtype: List[ToolDefinition] + """ + return [MicrosoftFabricToolDefinition(fabric_aiskill=ToolConnectionList(connection_list=self.connection_ids))] + class SharepointTool(ConnectionTool): """ A tool that searches for information using Sharepoint. @@ -1425,6 +1440,7 @@ def get_last_text_message_by_sender(self, sender: str) -> Optional[MessageTextCo "FunctionTool", "BingGroundingTool", "SharepointTool", + "FabricTool", "AzureAISearchTool", "SASTokenCredential", "Tool", diff --git a/sdk/ai/azure-ai-projects/samples/agents/sample_agents_fabric.py b/sdk/ai/azure-ai-projects/samples/agents/sample_agents_fabric.py new file mode 100644 index 000000000000..1dd98a17ac5a --- /dev/null +++ b/sdk/ai/azure-ai-projects/samples/agents/sample_agents_fabric.py @@ -0,0 +1,80 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +""" +FILE: sample_agents_fabric.py + +DESCRIPTION: + This sample demonstrates how to use agent operations with the Microsoft Fabric grounding tool from + the Azure Agents service using a synchronous client. + +USAGE: + python sample_agents_fabric.py + + Before running the sample: + + pip install azure-ai-projects azure-identity + + Set this environment variables with your own values: + PROJECT_CONNECTION_STRING - the Azure AI Project connection string, as found in your AI Studio Project. +""" + +import os +from azure.ai.projects import AIProjectClient +from azure.identity import DefaultAzureCredential +from azure.ai.projects.models import FabricTool + + +# Create an Azure AI Client from a connection string, copied from your AI Studio project. +# At the moment, it should be in the format ";;;" +# Customer needs to login to Azure subscription via Azure CLI and set the environment variables + +project_client = AIProjectClient.from_connection_string( + credential=DefaultAzureCredential(), + conn_str=os.environ["PROJECT_CONNECTION_STRING"], +) + +conn_id = "your-connection-id" + +# Initialize agent fabric tool and add the connection id +fabric = FabricTool(connection_id=conn_id) + +# Create agent with the fabric tool and process assistant run +with project_client: + agent = project_client.agents.create_agent( + model="gpt-4o", + name="my-assistant", + instructions="You are a helpful assistant", + tools=fabric.definitions, + headers={"x-ms-enable-preview": "true"}, + ) + print(f"Created agent, ID: {agent.id}") + + # Create thread for communication + thread = project_client.agents.create_thread() + print(f"Created thread, ID: {thread.id}") + + # Create message to thread + message = project_client.agents.create_message( + thread_id=thread.id, + role="user", + content="How does wikipedia explain Euler's Identity?", + ) + print(f"Created message, ID: {message.id}") + + # Create and process agent run in thread with tools + run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent.id) + print(f"Run finished with status: {run.status}") + + if run.status == "failed": + print(f"Run failed: {run.last_error}") + + # Delete the assistant when done + project_client.agents.delete_agent(agent.id) + print("Deleted agent") + + # Fetch and log all messages + messages = project_client.agents.list_messages(thread_id=thread.id) + print(f"Messages: {messages}")