Skip to content

Commit

Permalink
add fabric tool def and sample
Browse files Browse the repository at this point in the history
  • Loading branch information
glharper committed Nov 15, 2024
1 parent 1092c17 commit 5d1e38c
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
16 changes: 16 additions & 0 deletions sdk/ai/azure-ai-projects/azure/ai/projects/models/_patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
MessageTextContent,
MessageTextFileCitationAnnotation,
MessageTextFilePathAnnotation,
MicrosoftFabricToolDefinition,
OpenAIPageableListOfThreadMessage,
RequiredFunctionToolCall,
RunStep,
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -1425,6 +1440,7 @@ def get_last_text_message_by_sender(self, sender: str) -> Optional[MessageTextCo
"FunctionTool",
"BingGroundingTool",
"SharepointTool",
"FabricTool",
"AzureAISearchTool",
"SASTokenCredential",
"Tool",
Expand Down
80 changes: 80 additions & 0 deletions sdk/ai/azure-ai-projects/samples/agents/sample_agents_fabric.py
Original file line number Diff line number Diff line change
@@ -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 "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# 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}")

0 comments on commit 5d1e38c

Please sign in to comment.