Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ OLLAMA_MODEL_CHAT="gemma3:latest"
## Foundry Local Settings
FOUNDRY_LOCAL_MODEL_CHAT="phi-3-mini-4k"

# Fabric Data Agent Settings
FABRIC_DATA_AGENT_NAME="your_data_agent_name"
FABRIC_DATA_AGENT_USER_INSTRUCTIONS="your_user_instructions"
# FIXME: add more necessary settings. proper impl ref. https://learn.microsoft.com/en-us/fabric/data-science/fabric-data-agent-sdk

# ---------
# Tools
# ---------
Expand Down
2 changes: 2 additions & 0 deletions template_langgraph/tools/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from template_langgraph.tools.cosmosdb_tool import search_cosmosdb
from template_langgraph.tools.dify_tool import run_dify_workflow
from template_langgraph.tools.elasticsearch_tool import search_elasticsearch
from template_langgraph.tools.fabric_data_agent_tool import search_fabric_data_agent
from template_langgraph.tools.mcp_tool import McpClientWrapper
from template_langgraph.tools.qdrant_tool import search_qdrant
from template_langgraph.tools.sql_database_tool import SqlDatabaseClientWrapper
Expand All @@ -20,6 +21,7 @@ def get_default_tools():
run_dify_workflow,
search_qdrant,
search_elasticsearch,
search_fabric_data_agent,
]
+ SqlDatabaseClientWrapper().get_tools(
llm=AzureOpenAiWrapper().chat_model,
Expand Down
94 changes: 94 additions & 0 deletions template_langgraph/tools/fabric_data_agent_tool.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
from functools import lru_cache
from uuid import uuid4

from langchain_core.tools import tool
from pydantic import BaseModel, Field
from pydantic_settings import BaseSettings, SettingsConfigDict

from template_langgraph.loggers import get_logger

logger = get_logger(__name__)
logger.setLevel("DEBUG")


class Settings(BaseSettings):
fabric_data_agent_name: str = "your_fabric_data_agent_name"
fabric_data_agent_user_instructions: str = "your_fabric_data_agent_user_instructions"

model_config = SettingsConfigDict(
env_file=".env",
env_ignore_empty=True,
extra="ignore",
)


@lru_cache
def get_fabric_data_agent_settings() -> Settings:
"""Get Fabric Data Agent settings."""
return Settings()


# FIXME: properly implement Fabric Data Agent client
class FabricDataAgentWrapper:
def __init__(
self,
settings: Settings = None,
):
if settings is None:
settings = get_fabric_data_agent_settings()
self.settings = settings

def search(self, query: str, k: int = 5) -> list[dict]:
"""Search for similar documents in Fabric Data Agent."""
logger.info(f"Just returning mock results for query: {query}, k: {k}")
return [
{
"content": f"mock result #1 for {query}",
"id": str(uuid4()),
},
{
"content": f"mock result #2 for {query}",
"id": str(uuid4()),
},
]


class FabricDataAgentInput(BaseModel):
query: str = Field(
default="禅モード",
description="Query to search in the Fabric Data Agent",
)
k: int = Field(
default=5,
description="Number of results to return from the similarity search",
)


class FabricDataAgentOutput(BaseModel):
content: str = Field(description="Content of the document")
id: str = Field(description="ID of the document")


@tool(args_schema=FabricDataAgentInput)
def search_fabric_data_agent(query: str, k: int = 5) -> list[FabricDataAgentOutput]:
"""Search for similar documents in Fabric Data Agent.

Args:
query: The search query string
k: Number of results to return (default: 5)

Returns:
FabricDataAgentOutput: A Pydantic model containing the search results
"""
# FIXME: do not create every time
wrapper = FabricDataAgentWrapper()
results = wrapper.search(query=query, k=k)
outputs = []
for result in results:
outputs.append(
FabricDataAgentOutput(
content=result["content"],
id=result["id"],
),
)
return outputs
Loading