From 24dbef21588b2eee879da66e09cf7ccaa816faf9 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 17:22:38 -0500 Subject: [PATCH 1/7] (feat): MCP server functionality & new prompt module - Updated logging configuration in `logging.py` to improve structured logging. - Refactored AzureOpenAIProvider in `provider.py` to build kwargs dynamically for better handling of optional parameters. - Introduced MCP server structure with new modules: `__init__.py`, `context.py`, `resources.py`, `server.py`, and `tools.py` for better organization and modularity. - Implemented resource registration for listing datasources and schemas in `resources.py`. - Added context management for MCP server in `context.py` to handle connections and state. - Created tools for executing queries, listing datasources, and validating SQL in `tools.py`. - Updated prompt handling by introducing a new `builder.py` for assembling prompts from components. - Added dialect-specific SQL guidelines in `dialects.py` to assist with query generation based on datasource type. - Enhanced default prompts in `defaults.py` to provide clearer instructions and context for users. - Improved response formatting in `response.py` and `data_nodes.py` for better user interaction. - Updated dependencies in `uv.lock` to include the new MCP package and ensure compatibility. --- .editorconfig | 12 + README.md | 3 + docs/CONFIGURATION.md | 15 +- docs/MCP.md | 147 +++ docs/PROMPTS.md | 184 +++ docs/langchain.png | Bin 0 -> 349345 bytes pyproject.toml | 2 + src/data_agent/__init__.py | 18 +- src/data_agent/a2a/agent_card.py | 6 +- src/data_agent/a2a/executor.py | 16 +- src/data_agent/agent.py | 125 +- .../{config => agents}/adventure_works.yaml | 25 - src/data_agent/{config => agents}/amex.yaml | 66 +- .../{config => agents}/contoso.yaml | 25 - .../schema/agent_config.schema.json | 17 - src/data_agent/agents/wmt_retail.yaml | 1009 +++++++++++++++++ src/data_agent/cli/app.py | 85 +- src/data_agent/config.py | 20 +- src/data_agent/config_loader.py | 23 +- src/data_agent/core/logging.py | 14 +- src/data_agent/llm/provider.py | 21 +- src/data_agent/mcp/__init__.py | 16 + src/data_agent/mcp/context.py | 60 + src/data_agent/mcp/resources.py | 89 ++ src/data_agent/mcp/server.py | 150 +++ src/data_agent/mcp/tools.py | 267 +++++ src/data_agent/models/__init__.py | 6 +- src/data_agent/nodes/data_nodes.py | 38 +- src/data_agent/nodes/response.py | 4 +- src/data_agent/prompts/__init__.py | 14 +- src/data_agent/prompts/builder.py | 84 ++ src/data_agent/prompts/defaults.py | 57 +- src/data_agent/prompts/dialects.py | 162 +++ src/data_agent/utils/__init__.py | 6 +- src/data_agent/validators/__init__.py | 6 +- tests/test_a2a.py | 14 +- uv.lock | 8 +- 37 files changed, 2521 insertions(+), 293 deletions(-) create mode 100644 .editorconfig create mode 100644 docs/MCP.md create mode 100644 docs/PROMPTS.md create mode 100644 docs/langchain.png rename src/data_agent/{config => agents}/adventure_works.yaml (96%) rename src/data_agent/{config => agents}/amex.yaml (57%) rename src/data_agent/{config => agents}/contoso.yaml (96%) rename src/data_agent/{config => agents}/schema/agent_config.schema.json (96%) create mode 100644 src/data_agent/agents/wmt_retail.yaml create mode 100644 src/data_agent/mcp/__init__.py create mode 100644 src/data_agent/mcp/context.py create mode 100644 src/data_agent/mcp/resources.py create mode 100644 src/data_agent/mcp/server.py create mode 100644 src/data_agent/mcp/tools.py create mode 100644 src/data_agent/prompts/builder.py create mode 100644 src/data_agent/prompts/dialects.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f1a2378 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false diff --git a/README.md b/README.md index 4444457..748278d 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Built on top of LangChain's [`SQLDatabase`](https://docs.langchain.com/oss/pytho - **Data Visualization**: Generate charts and graphs from query results using natural language (e.g., "show me a bar chart") - **Configurable Agents**: YAML-based configuration for adding new data sources - **A2A Protocol**: Agent-to-Agent interoperability for integration with other A2A-compliant systems +- **MCP Protocol**: Model Context Protocol support for Claude Desktop, VS Code, and other MCP clients ## Architecture @@ -51,7 +52,9 @@ Generates, validates, and executes SQL queries with retry logic. - [Database Setup](docs/DATABASE_SETUP.md) - [Configuration](docs/CONFIGURATION.md) - [Data Visualization](docs/VISUALIZATION.md) +- [Prompts & Dialects](docs/PROMPTS.md) - [A2A Protocol](docs/A2A.md) +- [MCP Protocol](docs/MCP.md) ## Quick Start diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index f2f2c27..cf79cd2 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,19 +1,6 @@ # Configuration -Data agents are configured via YAML files. See `src/data_agent/config/contoso.yaml` for a complete example. - -## Intent Detection - -```yaml -intent_detection_agent: - llm: - model: gpt-4o - provider: azure_openai - temperature: 0.0 - system_prompt: | - You are an intent detection assistant... - {agent_descriptions} -``` +Data agents are configured via YAML files. See `src/data_agent/agents/contoso.yaml` for a complete example. ## Data Agent Definition diff --git a/docs/MCP.md b/docs/MCP.md new file mode 100644 index 0000000..3ffb2da --- /dev/null +++ b/docs/MCP.md @@ -0,0 +1,147 @@ +# MCP Protocol Support + +The Data Agent supports the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/), enabling integration with Claude Desktop, VS Code, Cursor, and other MCP-compatible clients. + +## Quick Start + +```bash +# Start MCP server with SSE transport (default) +uv run data-agent mcp + +# Start with a specific config +uv run data-agent mcp --config contoso + +# Start with stdio transport (for Claude Desktop) +uv run data-agent mcp --transport stdio + +# Start on a custom port +uv run data-agent mcp --port 9000 +``` + +## Server Options + +| Option | Default | Description | +|--------|---------|-------------| +| `--config, -c` | all | Configuration name (e.g., `contoso`). Loads all configs if not specified. | +| `--transport, -t` | sse | Transport: `sse` for HTTP clients (VS Code, Cursor), `stdio` for Claude Desktop | +| `--port, -p` | 8002 | Port for SSE transport | +| `--log-level` | warning | Logging level | + +## Available Tools + +The MCP server exposes the following tools: + +| Tool | Description | +|------|-------------| +| `query` | Execute natural language queries against datasources | +| `list_datasources` | List all configured datasources with descriptions | +| `list_tables` | List tables for a specific datasource | +| `get_schema` | Get database schema for a specific datasource | +| `validate_sql` | Validate SQL syntax without executing | + +## Available Resources + +| Resource URI | Description | +|--------------|-------------| +| `datasources://list` | List of available datasources | +| `schema://{datasource}` | Database schema for a datasource | +| `tables://{datasource}` | List of tables for a datasource | + +## Client Configuration + +### Claude Desktop + +Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows): + +```json +{ + "mcpServers": { + "data-agent": { + "command": "uv", + "args": ["run", "data-agent-mcp"], + "cwd": "/path/to/langchain_data_agent" + } + } +} +``` + +### VS Code + +Add to `.vscode/mcp.json` in your workspace: + +```json +{ + "servers": { + "data-agent": { + "type": "sse", + "url": "http://127.0.0.1:8002/sse" + } + } +} +``` + +> **Note:** Start the MCP server first with `uv run data-agent mcp` before connecting. + +Or for stdio transport (runs server automatically): + +```json +{ + "servers": { + "data-agent": { + "type": "stdio", + "command": "uv", + "args": ["run", "data-agent-mcp", "--transport", "stdio"] + } + } +} +``` + +### Cursor / Windsurf + +Similar configuration to VS Code. Check your IDE's MCP documentation. + +## Example Usage + +Once configured, you can interact with the Data Agent directly from your AI client: + +``` +User: What datasources are available? +AI: [calls list_datasources] → Shows contoso, adventure_works, amex + +User: What's the schema for the contoso database? +AI: [calls get_schema("contoso")] → Shows tables, columns, types + +User: Show me the top 5 products by sales in Q4 2024 +AI: [calls query("top 5 products by sales Q4 2024")] → Returns results +``` + +## Programmatic Client Example + +```python +from mcp import ClientSession, StdioServerParameters +from mcp.client.stdio import stdio_client + +async def main(): + server_params = StdioServerParameters( + command="uv", + args=["run", "data-agent-mcp"] + ) + + async with stdio_client(server_params) as (read, write): + async with ClientSession(read, write) as session: + await session.initialize() + + # List available tools + tools = await session.list_tools() + print("Available tools:", [t.name for t in tools.tools]) + + # Execute a query + result = await session.call_tool( + "query", + arguments={"question": "What are the top selling products?"} + ) + print(result.content) + +import asyncio +asyncio.run(main()) +``` diff --git a/docs/PROMPTS.md b/docs/PROMPTS.md new file mode 100644 index 0000000..ae8c864 --- /dev/null +++ b/docs/PROMPTS.md @@ -0,0 +1,184 @@ +# Prompts Module + +This module manages system prompts for the Data Agent's LLM interactions. It provides a modular, extensible prompt architecture that supports multiple database dialects and customization through configuration. + +## Architecture + +``` +src/data_agent/prompts/ +├── __init__.py # Public exports +├── builder.py # Prompt assembly logic +├── defaults.py # Default prompt templates +└── dialects.py # Database-specific SQL guidelines +``` + +## Components + +### defaults.py - Core Prompt Templates + +Contains the default system prompts used across the agent: + +| Prompt | Purpose | +|--------|---------| +| `DEFAULT_INTENT_DETECTION_PROMPT` | Routes user questions to the appropriate data agent | +| `DEFAULT_GENERAL_CHAT_PROMPT` | Handles greetings and capability questions | +| `DEFAULT_SQL_PROMPT` | Guides SQL generation with schema context | +| `DEFAULT_RESPONSE_PROMPT` | Formats query results into natural language | +| `VISUALIZATION_SYSTEM_PROMPT` | Generates matplotlib visualization code | +| `COSMOS_PROMPT_ADDENDUM` | Cosmos DB-specific constraints and best practices | + +### dialects.py - Database-Specific Guidelines + +Provides SQL dialect guidelines that are automatically appended based on datasource type: + +| Dialect | Datasource Types | +|---------|------------------| +| BigQuery | `bigquery` | +| PostgreSQL | `postgres`, `postgresql` | +| Azure SQL / SQL Server | `azure_sql`, `mssql`, `sqlserver` | +| Azure Synapse | `synapse` | +| Databricks | `databricks` | +| Cosmos DB | `cosmos`, `cosmosdb` | + +Each dialect includes: +- Syntax conventions (date functions, data types, quoting) +- Aggregation function usage +- String manipulation functions +- Performance best practices + +### builder.py - Prompt Assembly + +The `build_prompt()` function assembles the final system prompt: + +``` +┌─────────────────────────────────────┐ +│ Date Context (current date) │ +├─────────────────────────────────────┤ +│ Base Prompt (custom or default) │ +│ - Schema context │ +│ - Few-shot examples │ +├─────────────────────────────────────┤ +│ Dialect Guidelines │ +│ (based on datasource type) │ +├─────────────────────────────────────┤ +│ Cosmos Addendum (if applicable) │ +│ - Partition key constraints │ +└─────────────────────────────────────┘ +``` + +## Usage + +### Basic Prompt Building + +```python +from data_agent.prompts import build_prompt + +# Build a prompt for PostgreSQL +prompt = build_prompt( + datasource_type="postgres", + schema_context="Tables: customers (id, name, email), orders (id, customer_id, total)", + few_shot_examples="Q: How many customers?\nA: SELECT COUNT(*) FROM customers", +) +``` + +### Custom Prompts via Configuration + +Teams can override default prompts in their YAML configuration: + +```yaml +name: my_agent +datasource: + type: postgres + # ... +prompts: + sql_prompt: | + You are a SQL expert for our e-commerce database. + Focus on sales metrics and customer behavior. + + {schema_context} + + {few_shot_examples} + response_prompt: | + Provide insights focused on business impact. + Always mention revenue implications. +``` + +### Getting Dialect Guidelines + +```python +from data_agent.prompts import get_dialect_guidelines + +# Get BigQuery-specific SQL guidelines +guidelines = get_dialect_guidelines("bigquery") +``` + +## Prompt Template Variables + +The following variables are automatically substituted: + +| Variable | Description | Used In | +|----------|-------------|---------| +| `{schema_context}` | Database schema information | SQL prompt | +| `{few_shot_examples}` | Example Q&A pairs | SQL prompt | +| `{agent_descriptions}` | Available data agents | Intent detection, general chat | +| `{partition_key}` | Cosmos DB partition key | Cosmos addendum | + +## Extending + +### Adding a New Dialect + +1. Add guidelines constant to `dialects.py`: + +```python +MY_DATABASE_GUIDELINES = """## My Database SQL Guidelines + +1. **Syntax conventions:** + - Use MY_DATE_FUNC() for date operations + - ... +""" +``` + +2. Register in `DIALECT_GUIDELINES_MAP`: + +```python +DIALECT_GUIDELINES_MAP: dict[str, str] = { + # ... existing entries + "mydatabase": MY_DATABASE_GUIDELINES, +} +``` + +### Adding a New Prompt Type + +1. Add the template to `defaults.py`: + +```python +MY_NEW_PROMPT = """You are a specialized assistant for... + +{custom_variable} +""" +``` + +2. Export in `__init__.py`: + +```python +from data_agent.prompts.defaults import MY_NEW_PROMPT + +__all__ = [ + # ... existing exports + "MY_NEW_PROMPT", +] +``` + +## Best Practices + +1. **Keep prompts focused** - Each prompt should have a single responsibility +2. **Use schema context** - Always include relevant schema information for SQL generation +3. **Provide few-shot examples** - Examples significantly improve query accuracy +4. **Test with your data** - Dialect guidelines may need tuning for specific schemas +5. **Log prompts during development** - Use `DEBUG` logging to inspect assembled prompts + +## Related Modules + +- [`config.py`](../src/data_agent/config.py) - Configuration models including prompt overrides +- [`nodes/data_nodes.py`](../src/data_agent/nodes/data_nodes.py) - Nodes that consume prompts +- [`nodes/visualization.py`](../src/data_agent/nodes/visualization.py) - Visualization prompt usage diff --git a/docs/langchain.png b/docs/langchain.png new file mode 100644 index 0000000000000000000000000000000000000000..b959e54c80d3c823adf570705d710e7f44dfa07f GIT binary patch literal 349345 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⪼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⪼mmL5(r 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

    >;0;LYK3%9AhGjL&j>^sEjuD||DM=5(7 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 U6^AC3GXMYp07*qoM6N<$f?K^{1poj5 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 612dca7..17ad1f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,12 +47,14 @@ dependencies = [ "langchain-azure-dynamic-sessions>=0.2.0", "matplotlib>=3.10.8", "tabulate>=0.9.0", + "mcp>=1.25.0", ] [project.scripts] data-agent = "data_agent.cli:main" data-agent-ui = "data_agent.ui:main" data-agent-a2a = "data_agent.a2a.server:main" +data-agent-mcp = "data_agent.mcp.server:main" [project.optional-dependencies] dev = [ diff --git a/src/data_agent/__init__.py b/src/data_agent/__init__.py index 41e7e0c..525d599 100644 --- a/src/data_agent/__init__.py +++ b/src/data_agent/__init__.py @@ -3,15 +3,15 @@ from data_agent.adapters import CosmosAdapter, create_sql_database from data_agent.agent import DataAgentFlow from data_agent.config import ( - AgentConfig, - AzureSQLDatasource, - BigQueryDatasource, - CosmosDatasource, - DataAgentConfig, - DatabricksDatasource, - Datasource, - PostgresDatasource, - SynapseDatasource, + AgentConfig, + AzureSQLDatasource, + BigQueryDatasource, + CosmosDatasource, + DataAgentConfig, + DatabricksDatasource, + Datasource, + PostgresDatasource, + SynapseDatasource, ) from data_agent.config_loader import ConfigLoader, SchemaFormatter from data_agent.core import setup_logging diff --git a/src/data_agent/a2a/agent_card.py b/src/data_agent/a2a/agent_card.py index 5501767..e67b251 100644 --- a/src/data_agent/a2a/agent_card.py +++ b/src/data_agent/a2a/agent_card.py @@ -5,9 +5,9 @@ """ from a2a.types import ( - AgentCapabilities, - AgentCard, - AgentSkill, + AgentCapabilities, + AgentCard, + AgentSkill, ) SUPPORTED_CONTENT_TYPES = ["text", "text/plain"] diff --git a/src/data_agent/a2a/executor.py b/src/data_agent/a2a/executor.py index c52c61d..2fb1a3d 100644 --- a/src/data_agent/a2a/executor.py +++ b/src/data_agent/a2a/executor.py @@ -10,16 +10,16 @@ from a2a.server.events import EventQueue from a2a.server.tasks import TaskUpdater from a2a.types import ( - InternalError, - InvalidParamsError, - Part, - TaskState, - TextPart, - UnsupportedOperationError, + InternalError, + InvalidParamsError, + Part, + TaskState, + TextPart, + UnsupportedOperationError, ) from a2a.utils import ( - new_agent_text_message, - new_task, + new_agent_text_message, + new_task, ) from a2a.utils.errors import ServerError diff --git a/src/data_agent/agent.py b/src/data_agent/agent.py index 0b9fd02..395daa4 100644 --- a/src/data_agent/agent.py +++ b/src/data_agent/agent.py @@ -19,19 +19,23 @@ from data_agent.adapters import CosmosAdapter, create_sql_database from data_agent.config import ( - AgentConfig, - AzureSQLDatasource, - BigQueryDatasource, - CosmosDatasource, - DataAgentConfig, - DatabricksDatasource, - PostgresDatasource, - SynapseDatasource, + AgentConfig, + AzureSQLDatasource, + BigQueryDatasource, + CosmosDatasource, + DataAgentConfig, + DatabricksDatasource, + PostgresDatasource, + SynapseDatasource, ) from data_agent.config_loader import ConfigLoader from data_agent.graph import create_data_agent from data_agent.llm import get_llm from data_agent.models.state import AgentState, InputState, OutputState +from data_agent.prompts.defaults import ( + DEFAULT_GENERAL_CHAT_PROMPT, + DEFAULT_INTENT_DETECTION_PROMPT, +) from data_agent.utils.callbacks import AgentCallback from data_agent.utils.message_utils import get_recent_history @@ -83,17 +87,6 @@ def __init__( self._agent_descriptions: dict[str, str] = {} self._shared_db = shared_db - self._intent_llm = get_llm( - provider=self.config.intent_detection.llm_config.provider, - azure_endpoint=azure_endpoint, - api_key=api_key, - deployment_name=self.config.intent_detection.llm_config.model - or deployment_name, - api_version=self.config.intent_detection.llm_config.api_version - or api_version, - temperature=self.config.intent_detection.llm_config.temperature, - ) - self._default_llm_settings = { "azure_endpoint": azure_endpoint, "api_key": api_key, @@ -210,7 +203,16 @@ def _create_datasource(self, name: str, ds: Any) -> Datasource | None: return None def _create_agent_graph(self, name: str, agent_config: DataAgentConfig) -> None: - """Create the LangGraph agent for a data agent.""" + """Create the LangGraph agent for a data agent. + + LLM configuration is a hybrid of YAML and default settings: + - From YAML: provider, model, api_version, temperature + - From defaults (init params): azure_endpoint, api_key + + Args: + name: Name of the agent. + agent_config: Data agent configuration from YAML. + """ llm_cfg = agent_config.llm_config agent_llm = get_llm( provider=llm_cfg.provider or "azure_openai", @@ -262,8 +264,31 @@ def _build_workflow(self) -> CompiledStateGraph: """ agent_names = list(self.data_agents.keys()) agent_descriptions = self._agent_descriptions - intent_llm = self._intent_llm - intent_system_prompt = self.config.intent_detection.system_prompt + + # Use the first data agent's LLM config for intent detection, or defaults + if self.config.data_agents: + first_llm_cfg = self.config.data_agents[0].llm_config + llm = get_llm( + provider=first_llm_cfg.provider or "azure_openai", + azure_endpoint=self._default_llm_settings["azure_endpoint"], + api_key=self._default_llm_settings["api_key"], + deployment_name=first_llm_cfg.model + or self._default_llm_settings["deployment_name"], + api_version=first_llm_cfg.api_version + or self._default_llm_settings["api_version"], + temperature=first_llm_cfg.temperature, + ) + else: + llm = get_llm( + provider="azure_openai", + azure_endpoint=self._default_llm_settings["azure_endpoint"], + api_key=self._default_llm_settings["api_key"], + deployment_name=self._default_llm_settings["deployment_name"], + api_version=self._default_llm_settings["api_version"], + ) + + # Valid intents include all agent names plus "general_chat" + valid_intents = agent_names + ["general_chat"] def intent_detection_node(state: AgentState) -> dict[str, Any]: """Detect user intent and select the appropriate data agent.""" @@ -273,7 +298,9 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: [f"- {name}: {desc}" for name, desc in agent_descriptions.items()] ) - system_content = intent_system_prompt.format(agent_descriptions=agent_list) + system_content = DEFAULT_INTENT_DETECTION_PROMPT.format( + agent_descriptions=agent_list + ) history = get_recent_history(state.get("messages", []), max_messages=4) @@ -283,7 +310,7 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: HumanMessage(content=question), ] - response = intent_llm.invoke(messages) + response = llm.invoke(messages) content = response.content selected_agent = ( content.strip() @@ -291,7 +318,7 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: else str(content[0]).strip() if content else "" ) - if selected_agent not in agent_names: + if selected_agent not in valid_intents: clarification = interrupt( { "type": "clarification_needed", @@ -310,14 +337,14 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: SystemMessage(content=system_content), HumanMessage(content=clarified_question), ] - response = intent_llm.invoke(messages) + response = llm.invoke(messages) content = response.content selected_agent = ( content.strip() if isinstance(content, str) else str(content[0]).strip() if content else "" ) - if selected_agent in agent_names: + if selected_agent in valid_intents: return { "question": clarified_question, "datasource_name": selected_agent, @@ -388,7 +415,7 @@ def query_rewrite_node(state: AgentState) -> dict[str, Any]: Respond with ONLY the rewritten question, nothing else.""" messages = [HumanMessage(content=rewrite_prompt)] - response = intent_llm.invoke(messages) + response = llm.invoke(messages) content = response.content rewritten = ( content.strip() @@ -414,6 +441,40 @@ def route_to_agent(state: AgentState) -> str: return "out_of_scope" return datasource + def general_chat_node(state: AgentState) -> dict[str, Any]: + """Handle general conversation like greetings and capability questions.""" + question = state["question"] + + agent_list = "\n".join( + [f"- **{name}**: {desc}" for name, desc in agent_descriptions.items()] + ) + + system_content = DEFAULT_GENERAL_CHAT_PROMPT.format( + agent_descriptions=agent_list + ) + + messages = [ + SystemMessage(content=system_content), + HumanMessage(content=question), + ] + + response = llm.invoke(messages) + content = response.content + response_text = ( + content.strip() + if isinstance(content, str) + else str(content[0]).strip() if content else "" + ) + + return { + "final_response": response_text, + "error": None, + "messages": [ + HumanMessage(content=question, name="user"), + AIMessage(content=response_text, name="general_chat"), + ], + } + def out_of_scope_node(state: AgentState) -> dict[str, Any]: """Handle out-of-scope requests.""" agent_list = "\n".join( @@ -440,6 +501,7 @@ def out_of_scope_node(state: AgentState) -> dict[str, Any]: workflow.add_node("intent_detection", intent_detection_node) workflow.add_node("query_rewrite", query_rewrite_node) + workflow.add_node("general_chat", general_chat_node) workflow.add_node("out_of_scope", out_of_scope_node) for name, agent in self.data_agents.items(): @@ -448,16 +510,18 @@ def out_of_scope_node(state: AgentState) -> dict[str, Any]: workflow.add_edge(START, "intent_detection") def route_after_intent(state: AgentState) -> str: - """Route to query_rewrite or out_of_scope after intent detection.""" + """Route to query_rewrite, general_chat, or out_of_scope after intent detection.""" datasource = state.get("datasource_name", "") if not datasource or state.get("error") == "out_of_scope": return "out_of_scope" + if datasource == "general_chat": + return "general_chat" return "query_rewrite" workflow.add_conditional_edges( "intent_detection", route_after_intent, - path_map=["query_rewrite", "out_of_scope"], + path_map=["query_rewrite", "general_chat", "out_of_scope"], ) routing_map: dict[str, str] = {name: name for name in agent_names} @@ -468,6 +532,7 @@ def route_after_intent(state: AgentState) -> str: path_map=list(routing_map.keys()), ) + workflow.add_edge("general_chat", END) workflow.add_edge("out_of_scope", END) for name in agent_names: workflow.add_edge(name, END) diff --git a/src/data_agent/config/adventure_works.yaml b/src/data_agent/agents/adventure_works.yaml similarity index 96% rename from src/data_agent/config/adventure_works.yaml rename to src/data_agent/agents/adventure_works.yaml index 78b6dbb..9dda68f 100644 --- a/src/data_agent/config/adventure_works.yaml +++ b/src/data_agent/agents/adventure_works.yaml @@ -1,28 +1,3 @@ -intent_detection_agent: - llm: - model: gpt-5-mini - provider: azure_openai - api_version: 2024-12-01-preview - temperature: 1.0 - max_tokens: 500 - system_prompt: | - You are an intent detection assistant responsible for routing user questions to the appropriate data agent. - - ## Available Data Agents - - {agent_descriptions} - - ## Instructions - - 1. Analyze the user's question to understand what data they are asking about. - 2. Match the question to the most relevant data agent based on the domain and data types. - 3. If the question is ambiguous, choose the agent most likely to have the relevant data. - 4. If no agent is a clear match, respond with "unknown". - - ## Response Format - - Respond with ONLY the agent name (e.g., "contoso_hr" or "hotel_analytics"). Do not include any explanation. - data_agents: - name: contoso_hr datasource: diff --git a/src/data_agent/config/amex.yaml b/src/data_agent/agents/amex.yaml similarity index 57% rename from src/data_agent/config/amex.yaml rename to src/data_agent/agents/amex.yaml index c8ec50a..666fbe3 100644 --- a/src/data_agent/config/amex.yaml +++ b/src/data_agent/agents/amex.yaml @@ -1,28 +1,3 @@ -intent_detection_agent: - llm: - model: gpt-5-mini - provider: azure_openai - api_version: 2024-12-01-preview - temperature: 1.0 - max_tokens: 500 - system_prompt: | - You are an intent detection assistant responsible for routing user questions to the appropriate data agent. - - ## Available Data Agents - - {agent_descriptions} - - ## Instructions - - 1. Analyze the user's question to understand what data they are asking about. - 2. Match the question to the most relevant data agent based on the domain and data types. - 3. If the question is ambiguous, choose the agent most likely to have the relevant data. - 4. If no agent is a clear match, respond with "unknown". - - ## Response Format - - Respond with ONLY the agent name (e.g., "financial_transactions"). Do not include any explanation. - data_agents: - name: financial_transactions description: Financial transactions, accounts, customers, and fraud alerts @@ -57,24 +32,6 @@ data_agents: {few_shot_examples} - ## BigQuery SQL Generation Guidelines - - 1. **Use only tables and columns defined in the schema above.** Never reference tables or columns not listed. - 2. **Use BigQuery SQL syntax.** This includes: - - DATE_TRUNC, DATE_ADD, DATE_SUB for date operations - - CURRENT_DATE(), CURRENT_TIMESTAMP() for current time - - EXTRACT(YEAR FROM date), EXTRACT(MONTH FROM date) for date parts - - STRING, INT64, FLOAT64, NUMERIC, BOOL data types - - TIMESTAMP for datetime values - 3. **Always qualify column names** with table aliases to avoid ambiguity. - 4. **Use appropriate JOINs** when combining data from multiple tables. - 5. **Include WHERE clauses** to filter data when the question implies filtering. - 6. **Use GROUP BY** for aggregations and ORDER BY for sorting results. - 7. **Use LIMIT** to restrict results (e.g., LIMIT 100) unless the user specifies otherwise. - 8. **Handle NULL values** appropriately with IFNULL, COALESCE, or IS NOT NULL checks. - 9. **Use fully qualified table names** in format `project.dataset.table` or just `dataset.table`. - 10. **DISTINCT with ORDER BY limitation**: When using DISTINCT inside aggregate functions (e.g., ARRAY_AGG, STRING_AGG), ORDER BY can only reference the column being aggregated, not other columns. - ## Response Format Provide your response as JSON with these fields: @@ -82,27 +39,8 @@ data_agents: - "sql_query": The generated BigQuery SQL query - "explanation": Brief explanation of what the query does - "visualization_requested": Set to true if the user is asking for a chart, graph, plot, bar chart, pie chart, line chart, histogram, or any visual representation of the data. Set to false for plain data queries. - response_prompt: | - You are a helpful financial analyst for banking and transaction data. - - Given the user's question, the SQL query that was executed, and the results, - provide a clear and concise natural language response. - - Be conversational but precise. Include relevant numbers, percentages, and insights. - Format currency values with $ and commas. Format large numbers for readability. - When discussing fraud or risk, be clear about severity levels and recommended actions. - If the results are empty, explain what that means in context. - - ## Data Presentation - - When the query returns tabular data (multiple rows/columns), ALWAYS include a formatted markdown table showing the results. - - Use proper markdown table syntax with headers - - Align numeric columns to the right - - Format currency with $ and commas (e.g., $1,234.56) - - Format dates in readable format (e.g., Dec 16, 2025) - - Limit tables to 20 rows max; if more rows exist, show first 20 and note "... and X more rows" - - After the table, provide a brief summary or insight about the data - # table_schemas omitted - will use dynamic schema discovery from BigQuery + # response_prompt: omitted - will use default prompt + # table_schemas: omitted - will use dynamic schema discovery from BigQuery few_shot_examples: - question: What are the total deposits by customer segment this month? answer: This query shows total deposits grouped by customer segment (VIP, Premium, Standard) for the current month. diff --git a/src/data_agent/config/contoso.yaml b/src/data_agent/agents/contoso.yaml similarity index 96% rename from src/data_agent/config/contoso.yaml rename to src/data_agent/agents/contoso.yaml index 05b6b37..ad38ab0 100644 --- a/src/data_agent/config/contoso.yaml +++ b/src/data_agent/agents/contoso.yaml @@ -1,28 +1,3 @@ -intent_detection_agent: - llm: - model: gpt-5-mini - provider: azure_openai - api_version: 2024-12-01-preview - temperature: 1.0 - max_tokens: 500 - system_prompt: | - You are an intent detection assistant responsible for routing user questions to the appropriate data agent. - - ## Available Data Agents - - {agent_descriptions} - - ## Instructions - - 1. Analyze the user's question to understand what data they are asking about. - 2. Match the question to the most relevant data agent based on the domain and data types. - 3. If the question is ambiguous, choose the agent most likely to have the relevant data. - 4. If no agent is a clear match, respond with "unknown". - - ## Response Format - - Respond with ONLY the agent name (e.g., "contoso_sales", "contoso_products" or "contoso_inventory"). Do not include any explanation. - data_agents: - name: contoso_sales description: Sales transactions, customers, and revenue analytics diff --git a/src/data_agent/config/schema/agent_config.schema.json b/src/data_agent/agents/schema/agent_config.schema.json similarity index 96% rename from src/data_agent/config/schema/agent_config.schema.json rename to src/data_agent/agents/schema/agent_config.schema.json index 98e601f..674d54f 100644 --- a/src/data_agent/config/schema/agent_config.schema.json +++ b/src/data_agent/agents/schema/agent_config.schema.json @@ -6,9 +6,6 @@ "type": "object", "additionalProperties": false, "properties": { - "intent_detection_agent": { - "$ref": "#/$defs/intent_detection_config" - }, "data_agents": { "type": "array", "description": "List of data agent configurations", @@ -72,20 +69,6 @@ "model" ] }, - "intent_detection_config": { - "type": "object", - "description": "Configuration for intent detection agent", - "additionalProperties": false, - "properties": { - "llm": { - "$ref": "#/$defs/llm_config" - }, - "system_prompt": { - "type": "string", - "description": "System prompt for intent detection. Use {agent_descriptions} placeholder." - } - } - }, "column_schema": { "type": "object", "description": "Schema definition for a table column", diff --git a/src/data_agent/agents/wmt_retail.yaml b/src/data_agent/agents/wmt_retail.yaml new file mode 100644 index 0000000..a5532cf --- /dev/null +++ b/src/data_agent/agents/wmt_retail.yaml @@ -0,0 +1,1009 @@ +data_agents: + - name: wmt_retail_sales + description: Walmart US retail point-of-sale transactions, items, stores, channels, and financial data + datasource: + type: bigquery + project_id: wmt-edw-prod + dataset: US_FIN_SALES_DL_RPT_VM + location: US + llm: + model: gpt-5-mini + provider: azure_openai + api_version: 2024-12-01-preview + temperature: 1.0 + max_tokens: 2000 + validation: + max_rows: 5000 + blocked_functions: + - session_user + - external_query + system_prompt: | + You are an expert SQL assistant for a Walmart US retail point-of-sale database running on Google BigQuery. + + ## Your Role + + Generate accurate, efficient BigQuery SQL queries based on natural language questions. You have access to comprehensive retail transaction data including stores, items, channels, fulfillment, and financial hierarchies. + + ## Database Context + + {schema_context} + + ## Examples + + {few_shot_examples} + + ## Key Business Concepts + + ### Transaction Identifiers + - **VISIT_NBR**: 29-character unique identifier for B&M register transactions (format: void_flag + country + store + register + transaction + datetime) + - **ORDER_NBR**: Walmart.com order number for online-initiated sales + + ### Sales Channels + - **CHNL_TYPE_ID**: High-level channel (1=Store Sale, 30=Layaway, 86=Online Initiated) + - **FULFMT_TYPE_ID**: Fulfillment method (6=Scheduled Pickup, 7=Scheduled Delivery, etc.) + - **CHNL_CONS_HIER_LVL_***: Channel consumption hierarchy for reporting + + ### Item Hierarchy (Walmart) + Department → Category Group → Category → Subcategory → Fineline + + ### Financial Hierarchy + FIN_GROUP → FIN_SEG → FIN_SUBGROUP → FIN_PORTF + + ### Store Classifications + - **COMP_CD**: Comparable store indicator (C=Comparable, L/T=New, S/E=Expansion, M/R=Relocation) + - **BANNER_CD**: Store banner (A1=Supercenter, etc.) + - **STORE_TYPE_CD**: Physical building type + + ### Fiscal Calendar + - Walmart fiscal year starts in February + - **WM_YR_WK_NBR**: YYYYWW format fiscal year-week + - **FISCAL_MTH_NBR**: 1=February through 12=January + + ## Data Asset Information + + ### Timeframe & Timeliness + - **Historical Data**: VISIT_LOCAL_DT from 2017-01-01 to current + - **Data Refresh**: Updates daily with yesterday's data by 6:00 AM CDT + - **Table Grain**: Store/Day/Register/Transaction/Item level + + ### Data Quality + - Quality variance: Less than +/- 1 basis point to SAP per month at Walmart segment level + - Completeness validations ensure data equals source and all Data Lake layers are consistent + - Primary source: CTH (Customer Transaction History) + + ### Data Metrics Available + - Retail Sales & Returns (SALES_AMT) + - Unit Quantity (UOM_QTY, OPS_UNIT_QTY) + - Associate Discount (ASSOC_DISC_AMT) + + ### SAP Alignment Rules (CRITICAL) + - **OTHER_INCOME_IND = 0**: Aligns to GL accounts 4101010 + 4101030 + 4102001 (Parent IDs: FN105 + BRUS975) + - **OTHER_INCOME_IND = 1**: Revenue from items posting to other GL accounts via FN105 + - **For top-line merchandise sales only**: Use `OTHER_INCOME_IND = 0 AND VENDOR_NBR != 481890` + - Note: Bottle deposit revenue (state-imposed) is flagged OII=0 because it posts to 4101010, exclude via VENDOR_NBR filter if needed + + ## Response Format + + Provide your response as JSON with these fields: + - "thinking": Step-by-step reasoning about how to construct the query + - "sql_query": The generated BigQuery SQL query + - "explanation": Brief explanation of what the query does + - "visualization_requested": Set to true if the user is asking for a chart, graph, plot, or any visual representation + + response_prompt: | + You are a helpful retail analyst for Walmart US sales data. + + Given the user's question, the SQL query that was executed, and the results, + provide a clear and concise natural language response. + + Be conversational but precise. Include relevant numbers, percentages, and insights. + Format currency values with $ and commas. Format large numbers for readability. + When discussing sales performance, provide context about comparable stores, channels, and time periods. + If the results are empty, explain what that means in context. + + ## Data Presentation + + When the query returns tabular data (multiple rows/columns), ALWAYS include a formatted markdown table showing the results. + - Use proper markdown table syntax with headers + - Align numeric columns to the right + - Format currency with $ and commas (e.g., $1,234.56) + - Format dates in readable format (e.g., Jun 21, 2025) + - Limit tables to 20 rows max; if more rows exist, show first 20 and note "... and X more rows" + - After the table, provide a brief summary or insight about the data + + table_schemas: + - table_name: WMT_STORE_SALES_DTL_D + table_description: Point-of-sale item-level transaction data for Walmart US stores including online-initiated store-fulfilled orders. + columns: + # Transaction Identifiers + - column_name: STORE_NBR + data_type: INT64 + description: "Store Number - Unique numeric identifier for retail locations, DCs, Home Office departments" + - column_name: VISIT_NBR + data_type: STRING + description: "Visit Number - 29-character unique identifier for B&M register transactions. Format: void(1) + country(2) + store(5) + register(3) + transaction(4) + datetime(14)" + - column_name: SCAN_ID + data_type: INT64 + description: "Scan ID - Company-assigned number for each item sold. Interpretation varies by SCAN_TYPE" + - column_name: SCAN_TYPE + data_type: INT64 + description: "Scan Type - Item type indicator: 0=Corporate Item, 1=Dept Hand-Keyed, 2=Local Store Item, 3=Rx, 4=Old Number, -999=Unknown" + - column_name: SCAN_TYPE_DESC + data_type: STRING + description: "Scan Type Description" + - column_name: SEQ_LINE_NBR + data_type: INT64 + description: "Sequence Line Number - Position of item in register transaction or eComm order" + + # Channel & Fulfillment + - column_name: CHNL_TYPE_ID + data_type: INT64 + description: "Channel Type ID - 1=Store Sale, 30=Layaway, 86=Online Initiated Sale" + - column_name: CHNL_TYPE_DESC + data_type: STRING + description: "Channel Type Description" + - column_name: CHNL_SUBTYPE_ID + data_type: INT64 + description: "Channel Subtype ID - Granular channel code (VISIT_SUBTYPE_CD for B&M, SVC_ID for eComm)" + - column_name: CHNL_SUBTYPE_DESC + data_type: STRING + description: "Channel Subtype Description" + - column_name: FULFMT_TYPE_ID + data_type: INT64 + description: "Fulfillment Type ID - 1=Site to Home, 6=Scheduled Pickup, 7=Scheduled Delivery, 8=Express Pickup, 9=Express Delivery, 16=Store" + - column_name: FULFMT_TYPE_DESC + data_type: STRING + description: "Fulfillment Type Description" + - column_name: ORDER_NBR + data_type: STRING + description: "Walmart.com order number for online-initiated store-fulfilled sales" + - column_name: CHNL_ACTV_GRP_NBR + data_type: INT64 + description: "Channel Activity Group Number for business channel identification" + - column_name: CHNL_ACTV_GRP_DESC + data_type: STRING + description: "Channel Activity Group Description" + + # Channel Consumption Hierarchy + - column_name: CHNL_CONS_HIER_LVL_0_DESC + data_type: STRING + description: "Channel Hierarchy Level 0 - Total Channel Consumption" + - column_name: CHNL_CONS_HIER_LVL_1_DESC + data_type: STRING + description: "Channel Hierarchy Level 1" + - column_name: CHNL_CONS_HIER_LVL_2_DESC + data_type: STRING + description: "Channel Hierarchy Level 2" + - column_name: CHNL_CONS_HIER_LVL_3_DESC + data_type: STRING + description: "Channel Hierarchy Level 3" + - column_name: CHNL_CONS_HIER_LVL_4_DESC + data_type: STRING + description: "Channel Hierarchy Level 4" + - column_name: CHNL_BASE_DESC + data_type: STRING + description: "Channel Base Description" + - column_name: SRC_OF_ORIGN_CD + data_type: STRING + description: "Source of Origin Code" + + # Sales Metrics + - column_name: SALES_AMT + data_type: NUMERIC + description: "Sales Amount - Retail amount charged or refunded" + - column_name: UNIT_COST_AMT + data_type: NUMERIC + description: "Unit Cost Amount - Synthetic cost metric (multiply by UOM_QTY for total cost)" + - column_name: UOM_QTY + data_type: NUMERIC + description: "Unit of Measure Quantity - Packages sold (or pounds/yards for variable-priced items)" + - column_name: SCAN_CNT + data_type: INT64 + description: "Scan Count - Number of items physically scanned" + - column_name: OPS_UNIT_QTY + data_type: NUMERIC + description: "Operations Unit Quantity - Business-defined package count metric for all items" + - column_name: ASSOC_DISC_AMT + data_type: NUMERIC + description: "Associate Discount Amount" + - column_name: SVC_VAL_AMT + data_type: NUMERIC + description: "Services Value Amount - Company service income (auto services, warranty, financial services)" + - column_name: PRC_OVERRIDEN_AMT + data_type: NUMERIC + description: "Price Overridden Amount - Original unit price before override" + + # Report & Pricing Codes + - column_name: RPT_CD + data_type: STRING + description: "Report Code - Sell status: 0=Regular, 1=Store Tab, 2=Company Tab, 7=Rollback, 8=Clearance" + - column_name: RPT_CD_DESC + data_type: STRING + description: "Report Code Description" + + # Transaction Indicators + - column_name: RTN_ITEM_IND + data_type: INT64 + description: "Return Item Indicator - 1 if item was returned" + - column_name: EXCHANGE_ITEM_IND + data_type: INT64 + description: "Exchange Item Indicator - 1 if even exchange for returned item" + - column_name: VOID_ITEM_IND + data_type: INT64 + description: "Void Item Indicator - 1 on void records (negative SALES_AMT)" + - column_name: VOID_CMPLT_TRANS_IND + data_type: INT64 + description: "Void Complete Transaction Indicator - 1 if entire transaction voided after completion" + - column_name: OTHER_INCOME_IND + data_type: INT64 + description: "Other Income Indicator - 1 if item routes to non-sales GL accounts" + - column_name: SELF_CHKOUT_IND + data_type: INT64 + description: "Self Checkout Indicator - 1 if sold on self-checkout register" + - column_name: FUEL_CONV_STORE_IND + data_type: INT64 + description: "Fuel Convenience Store Indicator - 1 if store has company-owned gas station" + - column_name: DSV_IND + data_type: INT64 + description: "Drop Ship Vendor Indicator - 1 if shipped directly from vendor" + - column_name: INSTACART_IND + data_type: INT64 + description: "Instacart Indicator - 1 if purchased by Instacart shopper" + + # Item Identifiers + - column_name: MDS_FAM_ID + data_type: INT64 + description: "Merchandise Family ID - Unique corporate item identifier" + - column_name: UPC_SRC_NBR + data_type: NUMERIC + description: "UPC Number from source" + - column_name: UPC_DESC + data_type: STRING + description: "UPC Description - 12-character receipt description" + - column_name: ITEM_NBR + data_type: INT64 + description: "Item Number - Vendor-specific company-assigned number" + - column_name: ITEM_DESC_1 + data_type: STRING + description: "Item Description 1 - Primary item description" + - column_name: ITEM_DESC_2 + data_type: STRING + description: "Item Description 2 - Secondary item description" + - column_name: ITEM_STATUS_CD + data_type: STRING + description: "Item Status Code - A=Active, I=Inactive, D=Delete" + - column_name: SIGNING_DESC + data_type: STRING + description: "Signing Description - Shelf sign description" + - column_name: UOM_CD + data_type: STRING + description: "Unit of Measure Code - EA, LB, YD, etc." + + # Item Hierarchy (Walmart) + - column_name: DEPT_NBR + data_type: INT64 + description: "Department Number - Merchandising department" + - column_name: DEPT_DESC + data_type: STRING + description: "Department Description" + - column_name: ACCTG_DEPT_NBR + data_type: INT64 + description: "Accounting Department Number - SAP posting department" + - column_name: ACCTG_DEPT_DESC + data_type: STRING + description: "Accounting Department Description" + - column_name: DEPT_CATG_GRP_NBR + data_type: INT64 + description: "Department Category Group Number" + - column_name: DEPT_CATG_GRP_DESC + data_type: STRING + description: "Department Category Group Description" + - column_name: DEPT_CATG_NBR + data_type: INT64 + description: "Department Category Number" + - column_name: DEPT_CATG_DESC + data_type: STRING + description: "Department Category Description" + - column_name: DEPT_SUBCATG_NBR + data_type: INT64 + description: "Department Subcategory Number" + - column_name: DEPT_SUBCATG_DESC + data_type: STRING + description: "Department Subcategory Description" + - column_name: FINELINE_NBR + data_type: INT64 + description: "Fineline Number - Lowest hierarchy level for Walmart" + - column_name: FINELINE_DESC + data_type: STRING + description: "Fineline Description" + - column_name: SUBCLASS_NBR + data_type: INT64 + description: "Subclass Number - Sam's hierarchy (not used for Walmart)" + - column_name: SUBCLASS_DESC + data_type: STRING + description: "Subclass Description" + + # Financial Hierarchy + - column_name: FIN_GROUP_NBR + data_type: INT64 + description: "Finance Group Number" + - column_name: FIN_GROUP_DESC + data_type: STRING + description: "Finance Group Description" + - column_name: FIN_SEG_NBR + data_type: INT64 + description: "Finance Segment Number (SBU)" + - column_name: FIN_SEG_DESC + data_type: STRING + description: "Finance Segment Description" + - column_name: FIN_SUBGROUP_NBR + data_type: INT64 + description: "Finance Subgroup Number" + - column_name: FIN_SUBGROUP_DESC + data_type: STRING + description: "Finance Subgroup Description" + - column_name: FIN_PORTF_NBR + data_type: INT64 + description: "Finance Portfolio Number" + - column_name: FIN_PORTF_DESC + data_type: STRING + description: "Finance Portfolio Description" + - column_name: GL_ACCT_ALGN_NBR + data_type: INT64 + description: "GL Account Aligned Number - SAP GL account alignment" + - column_name: GL_ACCT_ALGN_NM + data_type: STRING + description: "GL Account Aligned Name" + + # Brand & Vendor + - column_name: BRAND_ID + data_type: INT64 + description: "Brand ID" + - column_name: BRAND_NM + data_type: STRING + description: "Brand Name" + - column_name: BRAND_OWNR_ID + data_type: INT64 + description: "Brand Owner ID" + - column_name: BRAND_OWNR_NM + data_type: STRING + description: "Brand Owner Name" + - column_name: VENDOR_NBR + data_type: INT64 + description: "Vendor Number" + - column_name: VENDOR_NM + data_type: STRING + description: "Vendor Name" + + # Store Attributes + - column_name: STORE_NM + data_type: STRING + description: "Store Name" + - column_name: BANNER_CD + data_type: STRING + description: "Banner Code - A1=Supercenter, etc." + - column_name: BANNER_DESC + data_type: STRING + description: "Banner Description" + - column_name: STORE_TYPE_CD + data_type: STRING + description: "Store Type Code - R=Regular, U=Supercenter/NHM, S=Sam's" + - column_name: STORE_TYPE_DESC + data_type: STRING + description: "Store Type Description" + - column_name: STORE_SIZE_SQFT + data_type: INT64 + description: "Store Size in Square Feet" + - column_name: GRAND_OPEN_DT + data_type: DATE + description: "Grand Open Date" + - column_name: EXPND_OPEN_DT + data_type: DATE + description: "Expansion/Relocation Open Date" + - column_name: OPEN_STATUS_CD + data_type: STRING + description: "Open Status Code - 0=Scheduled, 1=New<13mo, 2=Open>13mo, 7=Closed" + - column_name: OPEN_STATUS_DESC + data_type: STRING + description: "Open Status Description" + + # Comparable Store + - column_name: COMP_CD + data_type: STRING + description: "Comparable Code - C=Comparable, L/T=New, S/E=Expansion, M/R=Relocation, N/X=Closed" + - column_name: COMP_DESC + data_type: STRING + description: "Comparable Description" + + # Geographic Hierarchy + - column_name: STATE_PROV_CD + data_type: STRING + description: "State/Province Code" + - column_name: POSTAL_CD + data_type: STRING + description: "Postal Code (5 digits, zero-padded)" + - column_name: LAT_DGR + data_type: NUMERIC + description: "Latitude Degrees" + - column_name: LONG_DGR + data_type: NUMERIC + description: "Longitude Degrees" + - column_name: TZ_CD + data_type: STRING + description: "Timezone Code - EST, CST, MST, PST, etc." + - column_name: MARKET_NBR + data_type: INT64 + description: "Market Number" + - column_name: MARKET_NM + data_type: STRING + description: "Market Name" + - column_name: REGION_NBR + data_type: INT64 + description: "Region Number" + - column_name: REGION_NM + data_type: STRING + description: "Region Name" + - column_name: SUBDIV_NBR + data_type: STRING + description: "Subdivision Number" + - column_name: SUBDIV_NM + data_type: STRING + description: "Subdivision Name" + - column_name: BUO_AREA_NBR + data_type: INT64 + description: "Business Unit Area Number" + - column_name: BUO_AREA_NM + data_type: STRING + description: "Business Unit Area Name" + - column_name: MDSE_MAJ_ZONE_NBR + data_type: INT64 + description: "Merchandise Major Zone Number" + - column_name: MDSE_SUB_ZONE_NBR + data_type: INT64 + description: "Merchandise Sub Zone Number" + + # Price Investment + - column_name: PRICE_INVST_IND + data_type: INT64 + description: "Price Investment Indicator" + - column_name: PRICE_INVST_COMP_IND + data_type: INT64 + description: "Price Investment Comparable Indicator" + - column_name: PRICE_INVST_START_DT + data_type: DATE + description: "Price Investment Start Date" + - column_name: PRICE_INVST_WAVE_DESC + data_type: STRING + description: "Price Investment Wave Description" + + # Fiscal Calendar + - column_name: POSTG_DT + data_type: DATE + description: "Posting Date - Financial business date" + - column_name: VISIT_LOCAL_DT + data_type: DATE + description: "Visit Local Date - Store local date from POS" + - column_name: VISIT_LOCAL_TM + data_type: STRING + description: "Visit Local Time - Store local time (hh:mm:ss)" + - column_name: VISIT_UTC_DT + data_type: DATE + description: "Visit UTC Date" + - column_name: VISIT_UTC_TM + data_type: STRING + description: "Visit UTC Time" + - column_name: FISCAL_FULL_YR_NBR + data_type: INT64 + description: "Fiscal Full Year Number" + - column_name: FISCAL_MTH_NBR + data_type: INT64 + description: "Fiscal Month Number (1=Feb, 12=Jan)" + - column_name: FISCAL_MTH_ABBR + data_type: STRING + description: "Fiscal Month Abbreviation" + - column_name: FISCAL_QTR_NBR + data_type: INT64 + description: "Fiscal Quarter Number" + - column_name: WM_FULL_YR_NBR + data_type: INT64 + description: "Walmart Full Year Number" + - column_name: WM_MTH_NBR + data_type: INT64 + description: "Walmart Month Number" + - column_name: WM_MTH_ABBR + data_type: STRING + description: "Walmart Month Abbreviation" + - column_name: WM_QTR_NBR + data_type: INT64 + description: "Walmart Quarter Number" + - column_name: WM_WK_NBR + data_type: INT64 + description: "Walmart Week Number" + - column_name: WM_YR_WK_NBR + data_type: INT64 + description: "Walmart Year Week Number (YYYYWW)" + - column_name: WM_WK_DAY_NBR + data_type: INT64 + description: "Walmart Weekday Number (1=Sat, 7=Fri)" + - column_name: CAL_WK_DAY_ABBR + data_type: STRING + description: "Calendar Week Day Abbreviation" + + # Item Seasonal + - column_name: SEASN_CD + data_type: INT64 + description: "Season Code - 0=Basic, 1=Spring, 2=Summer, 3=BTS/Fall, 4=Winter" + - column_name: SEASN_DESC + data_type: STRING + description: "Season Description" + - column_name: SEASN_YR + data_type: INT64 + description: "Season Year" + + # Item Linkage + - column_name: ALL_LINKS_ITEM_NBR + data_type: INT64 + description: "All Links Item Number - Prime item at top of linkage chains" + - column_name: ALL_LINKS_MDSE_FAM_ID + data_type: INT64 + description: "All Links Merchandise Family ID" + - column_name: REPL_GROUP_NBR + data_type: NUMERIC + description: "Replenishment Group Number" + + # Distribution Center + - column_name: PRMRY_DC_NBR + data_type: INT64 + description: "Primary Distribution Center Number" + - column_name: UPSTRM_DC_NBR + data_type: INT64 + description: "Upstream Distribution Center Number" + - column_name: WHSE_ALGN_TYPE_CD + data_type: STRING + description: "Warehouse Align Type Code" + - column_name: POS_DEPT_NBR + data_type: INT64 + description: "POS Department Number" + - column_name: BUYG_REGION_CD + data_type: INT64 + description: "Buying Region Code - 1=Alaska, 2=Hawaii, 3=Puerto Rico" + - column_name: BUYG_REGION_DESC + data_type: STRING + description: "Buying Region Description" + + # Register Details + - column_name: REG_NBR + data_type: INT64 + description: "Register Number" + - column_name: TRANS_NBR + data_type: INT64 + description: "Transaction Number" + - column_name: OPERATOR_NBR + data_type: INT64 + description: "Operator Number" + + # Return Details + - column_name: RTN_RSN_CD + data_type: INT64 + description: "Return Reason Code - 0=Unknown, 1=Doesn't Work, 2=Damaged, 3=Incorrect, 4=Poor Quality, 5=Changed Mind" + - column_name: RTN_RSN_DESC + data_type: STRING + description: "Return Reason Description" + - column_name: RCPT_SEQ_NBR + data_type: INT64 + description: "Receipt Sequence Number for returns" + - column_name: DEFECTIVE_ITEM_IND + data_type: INT64 + description: "Defective Item Indicator" + + # Tax Indicators + - column_name: TAX_XMPT_IND + data_type: INT64 + description: "Tax Exempt Indicator" + - column_name: TAX_XMPT_TYPE_DESC + data_type: STRING + description: "Tax Exempt Type Description" + - column_name: TAX_1_IND + data_type: INT64 + description: "Tax 1 Indicator" + - column_name: TAX_2_IND + data_type: INT64 + description: "Tax 2 Indicator" + - column_name: FOODSTAMP_ELIGIBLE_IND + data_type: INT64 + description: "Foodstamp/SNAP Eligible Indicator" + + # WIC (Women, Infants, Children) + - column_name: WIC_CATG_NBR + data_type: INT64 + description: "WIC Category Number" + - column_name: WIC_SUBCATG_NBR + data_type: INT64 + description: "WIC Subcategory Number" + - column_name: WIC_REDEEMED_IND + data_type: INT64 + description: "WIC Redeemed Indicator" + - column_name: WIC_PARTIAL_REDEEM_IND + data_type: INT64 + description: "WIC Partial Redemption Indicator" + + # Price Override Indicators + - column_name: PRICE_OVERRIDE_IND + data_type: INT64 + description: "Price Override Indicator" + - column_name: CSC_CUST_SATISFY_IND + data_type: INT64 + description: "CSC Customer Satisfaction Indicator" + - column_name: MUMD1_PRICE_ERROR_IND + data_type: INT64 + description: "Price Error Indicator" + - column_name: MUMD2_COMP_AD_IND + data_type: INT64 + description: "Comp Ad Indicator" + - column_name: MUMD3_BATTERY_IND + data_type: INT64 + description: "Battery Exchange Indicator" + - column_name: MUMD4_MISC_IND + data_type: INT64 + description: "Miscellaneous Override Indicator" + - column_name: DSIM_IND + data_type: INT64 + description: "Dynamic Store Initiated Markdown Indicator" + + # Item Scan Indicators + - column_name: NOT_ON_FILE_IND + data_type: INT64 + description: "Not On File Indicator" + - column_name: KEYED_ITEM_IND + data_type: INT64 + description: "Keyed Item Indicator" + - column_name: QTY_ENTERED_IND + data_type: INT64 + description: "Quantity Entered Indicator" + - column_name: MEASURE_ITEM_IND + data_type: INT64 + description: "Measured Item Indicator" + - column_name: EMBEDDED_PRICE_IND + data_type: INT64 + description: "Embedded Price Indicator" + - column_name: VAR_WT_IND + data_type: INT64 + description: "Variable Weight Indicator" + + # eComm Order Details + - column_name: ORDER_LINE_NBR + data_type: INT64 + description: "Walmart.com Order Line Number" + - column_name: PG_CUST_ID + data_type: STRING + description: "Pangaea Customer ID for online sales" + + # Source & Operational + - column_name: SRC_TYPE_NM + data_type: STRING + description: "Source Type Name - STORE, STORE-ONLINE-INIT, ECOMMERCE" + - column_name: OP_CMPNY_CD + data_type: STRING + description: "Operational Company Code - WMT-US, SAMS-US, etc." + - column_name: FIN_RPT_CD + data_type: STRING + description: "Financial Report Code" + - column_name: FIN_RPT_DESC + data_type: STRING + description: "Financial Report Description" + - column_name: PICKER_TYPE_NM + data_type: STRING + description: "Picker Type Name for last-mile delivery" + - column_name: CUST_ACCT_TYPE_NM + data_type: STRING + description: "Customer Account Type Name (B2B, etc.)" + - column_name: SVC_TYPE_CD + data_type: STRING + description: "Service Type Code" + + # Surrogate Keys + - column_name: CAL_KEY + data_type: INT64 + description: "Calendar Dimension Key" + - column_name: ITEM_KEY + data_type: INT64 + description: "Item Dimension Key" + - column_name: ITEM_CURR_KEY + data_type: INT64 + description: "Item Current Dimension Key" + - column_name: STORE_KEY + data_type: INT64 + description: "Store Dimension Key" + - column_name: STORE_CURR_KEY + data_type: INT64 + description: "Store Current Dimension Key" + - column_name: FIN_DEPT_KEY + data_type: INT64 + description: "Financial Department Key" + - column_name: FIN_CURR_DEPT_KEY + data_type: INT64 + description: "Financial Current Department Key" + - column_name: DC_ALGN_KEY + data_type: INT64 + description: "DC Alignment Key" + - column_name: COMP_KEY + data_type: INT64 + description: "Comp Status Dimension Key" + - column_name: STORE_DAY_KEY + data_type: INT64 + description: "Store Day Key" + - column_name: CHNL_KEY + data_type: INT64 + description: "Channel Key" + - column_name: CHNL_BASE_ID + data_type: INT64 + description: "Channel Base ID" + - column_name: REG_TYPE_KEY + data_type: INT64 + description: "Register Type Key - 1=Regular, 2=Fuel, 3=SCO, 4=Fuel+SCO" + + # Timestamps + - column_name: LOAD_TS + data_type: TIMESTAMP + description: "Load Timestamp" + - column_name: UPD_TS + data_type: TIMESTAMP + description: "Updated Timestamp" + + few_shot_examples: + - question: Show me all line items for a specific register transaction + answer: | + This query retrieves all item-level details for a single register transaction. Note that some items like gift cards may have multiple records due to separate GL account postings (e.g., Starbucks gift card splits between 3rd party settlement and commission income). Associate discounts are shown at the item level. + sql_query: | + SELECT + STORE_NBR, + VISIT_LOCAL_DT, + VISIT_LOCAL_TM, + VISIT_NBR, + REG_NBR, + TRANS_NBR, + SEQ_LINE_NBR, + ACCTG_DEPT_NBR, + UPC_DESC, + UPC_SRC_NBR, + ITEM_DESC_1, + OTHER_INCOME_IND, + GL_ACCT_ALGN_NBR, + GL_ACCT_ALGN_NM, + UOM_QTY, + ASSOC_DISC_AMT, + SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT = '2025-01-31' -- Data partitioned on this column + AND STORE_NBR = 5260 + AND REG_NBR = 3 + AND TRANS_NBR = 3963 + ORDER BY STORE_NBR, VISIT_LOCAL_DT, REG_NBR, TRANS_NBR, SEQ_LINE_NBR + + - question: Compare store sales vs online-initiated store-fulfilled (OISF) sales + answer: | + This query compares traditional in-store sales (BIS - Brick & Mortar In-Store) versus online-initiated store-fulfilled (OISF) sales like pickup and delivery. + The SRC_TYPE_NM column distinguishes between STORE (pure in-store) and STORE-ONLINE-INIT (online orders fulfilled by stores). + sql_query: | + SELECT + CAST(FORMAT_TIMESTAMP('%Y%m', VISIT_LOCAL_DT) AS INT64) AS CAL_YR_MO, + SRC_TYPE_NM, + ROUND(SUM(SALES_AMT), 0) AS SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT BETWEEN '2025-01-01' AND '2025-01-31' -- Data partitioned on this column + AND OTHER_INCOME_IND = 0 -- Returns just top-line merchandise sales + GROUP BY ALL + ORDER BY CAL_YR_MO, SRC_TYPE_NM + + - question: Show me hourly sales distribution for a store + answer: | + This query analyzes sales by hour of day for a specific store. Useful for staffing optimization, understanding peak shopping times, and identifying overnight activity patterns. Hours are in 24-hour format based on store local time. + sql_query: | + SELECT + X.STORE_NBR, + X.CAL_YR_MO, + X.VISIT_LOCAL_HR_NBR, + ROUND(SUM(X.SALES_AMT), 0) AS SALES_AMT + FROM ( + SELECT + STORE_NBR, + CAST(FORMAT_TIMESTAMP('%Y%m', VISIT_LOCAL_DT) AS INT64) AS CAL_YR_MO, + SUBSTRING(VISIT_LOCAL_TM, 1, 2) AS VISIT_LOCAL_HR_NBR, + SUM(SALES_AMT) AS SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT BETWEEN '2025-01-01' AND '2025-01-31' -- Data partitioned on this column + AND STORE_NBR = 5260 + AND OTHER_INCOME_IND = 0 -- Returns just top-line merchandise sales + GROUP BY ALL + ) AS X + GROUP BY ALL + ORDER BY X.STORE_NBR, X.CAL_YR_MO, X.VISIT_LOCAL_HR_NBR + + - question: What items are frequently bought together with Sleepwear and Dairy? + answer: | + This basket analysis query identifies transactions where customers purchased items from both Sleepwear (Dept 29) and Dairy (Dept 90) departments. This pattern analysis helps understand cross-category shopping behavior and can inform store layout and promotional strategies. + sql_query: | + SELECT + A.STORE_NBR, + A.VISIT_LOCAL_DT, + ROUND(SUM(A.SLEEPWEAR_SALES_AMT), 0) AS SLEEPWEAR_SALES_AMT, + ROUND(SUM(B.DAIRY_SALES_AMT), 0) AS DAIRY_SALES_AMT + FROM ( + SELECT + STORE_NBR, + VISIT_LOCAL_DT, + VISIT_NBR, + SUM(SALES_AMT) AS SLEEPWEAR_SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE OP_CMPNY_CD = 'WMT-US' + AND VISIT_LOCAL_DT BETWEEN '2025-01-01' AND '2025-01-31' -- Data partitioned on this column + AND OTHER_INCOME_IND = 0 + AND STORE_NBR = 5260 + AND ACCTG_DEPT_NBR = 29 -- Sleepwear + GROUP BY ALL + HAVING SLEEPWEAR_SALES_AMT != 0 + ) AS A + INNER JOIN ( + SELECT + STORE_NBR, + VISIT_LOCAL_DT, + VISIT_NBR, + SUM(SALES_AMT) AS DAIRY_SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE OP_CMPNY_CD = 'WMT-US' + AND VISIT_LOCAL_DT BETWEEN '2025-01-01' AND '2025-01-31' -- Data partitioned on this column + AND OTHER_INCOME_IND = 0 + AND STORE_NBR = 5260 + AND ACCTG_DEPT_NBR = 90 -- Dairy + GROUP BY ALL + HAVING DAIRY_SALES_AMT != 0 + ) AS B + ON A.VISIT_NBR = B.VISIT_NBR + GROUP BY ALL + ORDER BY A.STORE_NBR, A.VISIT_LOCAL_DT + + - question: Show sales by GL account for SAP reconciliation + answer: | + This query summarizes sales by GL account alignment for SAP reconciliation. The GL_ACCT_ALGN_NBR indicates which SAP GL account the sales amount aligns to. Note that VISIT_LOCAL_DT reflects the actual transaction date, which may differ from SAP posting date due to timing differences. + sql_query: | + SELECT + VISIT_LOCAL_DT, + GL_ACCT_ALGN_NBR, + GL_ACCT_ALGN_NM, + ROUND(SUM(SALES_AMT), 0) AS SALES_AMT + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT = '2025-06-23' -- Data partitioned on this column + AND OP_CMPNY_CD = 'WMT-US' + GROUP BY VISIT_LOCAL_DT, GL_ACCT_ALGN_NBR, GL_ACCT_ALGN_NM + ORDER BY GL_ACCT_ALGN_NBR + + - question: What are total sales by department for last week? + answer: This query shows total sales amount and units by department for the last 7 days. + sql_query: | + SELECT + ACCTG_DEPT_NBR, + ACCTG_DEPT_DESC, + COUNT(DISTINCT VISIT_NBR) AS transaction_count, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + SUM(UOM_QTY) AS units_sold + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY ACCTG_DEPT_NBR, ACCTG_DEPT_DESC + ORDER BY total_sales DESC + LIMIT 20 + + - question: Show me pickup vs delivery sales breakdown + answer: This query compares sales by fulfillment type for online-initiated orders. + sql_query: | + SELECT + FULFMT_TYPE_ID, + FULFMT_TYPE_DESC, + CHNL_CONS_HIER_LVL_3_DESC AS channel_level_3, + COUNT(DISTINCT ORDER_NBR) AS order_count, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + SUM(OPS_UNIT_QTY) AS units_sold, + ROUND(SUM(SALES_AMT) / NULLIF(COUNT(DISTINCT ORDER_NBR), 0), 2) AS avg_order_value + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE SRC_TYPE_NM = 'STORE-ONLINE-INIT' + AND VISIT_LOCAL_DT >= DATE_TRUNC(CURRENT_DATE(), MONTH) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + GROUP BY FULFMT_TYPE_ID, FULFMT_TYPE_DESC, CHNL_CONS_HIER_LVL_3_DESC + ORDER BY total_sales DESC + + - question: Show comparable store sales by region + answer: This query shows sales for comparable stores (COMP_CD = 'C') grouped by region. + sql_query: | + SELECT + REGION_NBR, + REGION_NM, + COUNT(DISTINCT STORE_NBR) AS comp_store_count, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + SUM(OPS_UNIT_QTY) AS total_units, + ROUND(SUM(SALES_AMT) / NULLIF(COUNT(DISTINCT STORE_NBR), 0), 2) AS avg_store_sales + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE COMP_CD = 'C' -- Comparable stores only + AND VISIT_LOCAL_DT >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY REGION_NBR, REGION_NM + ORDER BY total_sales DESC + + - question: What is the return rate by department? + answer: This query calculates return rate (returns as percentage of gross sales) by department. + sql_query: | + SELECT + ACCTG_DEPT_NBR, + ACCTG_DEPT_DESC, + ROUND(SUM(CASE WHEN RTN_ITEM_IND = 0 THEN SALES_AMT ELSE 0 END), 0) AS gross_sales, + ROUND(SUM(CASE WHEN RTN_ITEM_IND = 1 THEN ABS(SALES_AMT) ELSE 0 END), 0) AS return_amount, + ROUND( + SAFE_DIVIDE( + SUM(CASE WHEN RTN_ITEM_IND = 1 THEN ABS(SALES_AMT) ELSE 0 END), + SUM(CASE WHEN RTN_ITEM_IND = 0 THEN SALES_AMT ELSE 0 END) + ) * 100, 2 + ) AS return_rate_pct + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY ACCTG_DEPT_NBR, ACCTG_DEPT_DESC + HAVING gross_sales > 0 + ORDER BY return_rate_pct DESC + + - question: Show me self-checkout vs regular checkout sales + answer: This query compares sales between self-checkout (SCO) and regular staffed checkout lanes. + sql_query: | + SELECT + CASE + WHEN SELF_CHKOUT_IND = 1 THEN 'Self Checkout' + ELSE 'Regular Checkout' + END AS checkout_type, + COUNT(DISTINCT VISIT_NBR) AS transaction_count, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + ROUND(SUM(SALES_AMT) / NULLIF(COUNT(DISTINCT VISIT_NBR), 0), 2) AS avg_basket_size + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE SRC_TYPE_NM = 'STORE' -- In-store sales only + AND VISIT_LOCAL_DT >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY checkout_type + ORDER BY total_sales DESC + + - question: What are sales by Walmart fiscal week? + answer: This query shows weekly sales trend using Walmart fiscal calendar (fiscal year starts in February). + sql_query: | + SELECT + WM_YR_WK_NBR, + FISCAL_FULL_YR_NBR, + WM_WK_NBR, + MIN(VISIT_LOCAL_DT) AS week_start, + MAX(VISIT_LOCAL_DT) AS week_end, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + SUM(OPS_UNIT_QTY) AS total_units, + COUNT(DISTINCT STORE_NBR) AS stores_with_sales + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE FISCAL_FULL_YR_NBR = 2026 + AND VOID_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY WM_YR_WK_NBR, FISCAL_FULL_YR_NBR, WM_WK_NBR + ORDER BY WM_YR_WK_NBR + + - question: Show clearance vs regular price sales + answer: This query compares sales by report code (pricing status) - Regular, Rollback, Clearance, etc. + sql_query: | + SELECT + RPT_CD, + RPT_CD_DESC, + ROUND(SUM(SALES_AMT), 0) AS total_sales, + SUM(OPS_UNIT_QTY) AS units_sold, + COUNT(DISTINCT MDS_FAM_ID) AS unique_items, + ROUND(SUM(SALES_AMT) / NULLIF(SUM(OPS_UNIT_QTY), 0), 2) AS avg_unit_price + FROM `wmt-edw-prod.US_FIN_SALES_DL_RPT_VM.WMT_STORE_SALES_DTL_D` + WHERE VISIT_LOCAL_DT >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY) -- Data partitioned on this column + AND VOID_ITEM_IND = 0 + AND RTN_ITEM_IND = 0 + AND OTHER_INCOME_IND = 0 + GROUP BY RPT_CD, RPT_CD_DESC + ORDER BY total_sales DESC diff --git a/src/data_agent/cli/app.py b/src/data_agent/cli/app.py index f2eef82..3a3b475 100644 --- a/src/data_agent/cli/app.py +++ b/src/data_agent/cli/app.py @@ -14,10 +14,10 @@ from data_agent import DataAgentFlow from data_agent.cli.console import console, print_error from data_agent.cli.output import ( - print_dashboard, - print_error_panel, - print_query_info, - print_response, + print_dashboard, + print_error_panel, + print_query_info, + print_response, ) from data_agent.config import CONFIG_DIR, AgentConfig from data_agent.config_loader import ConfigLoader @@ -507,5 +507,82 @@ def a2a( ) +@app.command() +def mcp( + config: Annotated[ + str | None, + typer.Option( + "--config", + "-c", + help="Configuration name to load. Loads all configs if not specified.", + ), + ] = None, + transport: Annotated[ + str, + typer.Option( + "--transport", + "-t", + help="Transport mechanism: stdio (for Claude Desktop) or sse (for HTTP).", + ), + ] = "stdio", + port: Annotated[ + int, + typer.Option( + "--port", + "-p", + help="Port for SSE transport.", + ), + ] = 8002, + log_level: Annotated[ + str, + typer.Option( + "--log-level", + help="Logging level.", + ), + ] = "warning", +) -> None: + """Start the MCP (Model Context Protocol) server. + + This exposes the NL2SQL Data Agent via MCP, enabling integration + with Claude Desktop, VS Code, Cursor, and other MCP clients. + + Available tools: + - query: Execute natural language queries + - list_datasources: List available datasources + - get_schema: Get database schema for a datasource + + Examples: + # Start with stdio transport (for Claude Desktop) + data-agent mcp + + # Start with SSE transport for HTTP clients + data-agent mcp --transport sse --port 8002 + + # Start with a specific config + data-agent mcp --config contoso + """ + from data_agent.mcp import create_mcp_server + + if config: + validate_config(config) + + console.print("[cyan]Starting MCP server...[/cyan]") + console.print(f" Transport: [green]{transport}[/green]") + console.print(f" Config: [green]{config or 'all'}[/green]") + if transport == "sse": + console.print(f" Port: [green]{port}[/green]") + console.print() + + mcp_server = create_mcp_server(config_name=config) + + if transport == "stdio": + mcp_server.run(transport="stdio") + else: + # Set port for SSE transport + mcp_server.settings.host = "127.0.0.1" + mcp_server.settings.port = port + mcp_server.run(transport="sse") + + if __name__ == "__main__": app() diff --git a/src/data_agent/config.py b/src/data_agent/config.py index 173cff0..9ff785d 100644 --- a/src/data_agent/config.py +++ b/src/data_agent/config.py @@ -11,7 +11,7 @@ from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict -CONFIG_DIR = Path(__file__).resolve().parent / "config" +CONFIG_DIR = Path(__file__).resolve().parent / "agents" DatasourceType = Literal[ "databricks", "cosmos", "postgres", "azure_sql", "synapse", "bigquery" @@ -362,27 +362,9 @@ class DataAgentConfig: few_shot_examples: list[FewShotExample] = field(default_factory=list) -@dataclass -class IntentDetectionConfig: - """Configuration for intent detection agent.""" - - llm_config: LLMConfig = field(default_factory=LLMConfig) - system_prompt: str = "" - - @classmethod - def from_dict(cls, data: dict[str, Any]) -> "IntentDetectionConfig": - return cls( - llm_config=LLMConfig.from_dict(data.get("llm", {})), - system_prompt=data.get("system_prompt", ""), - ) - - @dataclass class AgentConfig: """Complete agent configuration.""" - intent_detection: IntentDetectionConfig = field( - default_factory=IntentDetectionConfig - ) data_agents: list[DataAgentConfig] = field(default_factory=list) max_retries: int = 3 diff --git a/src/data_agent/config_loader.py b/src/data_agent/config_loader.py index c109912..ab658ea 100644 --- a/src/data_agent/config_loader.py +++ b/src/data_agent/config_loader.py @@ -13,16 +13,15 @@ from pydantic_settings import BaseSettings from .config import ( - CONFIG_DIR, - DATASOURCE_TYPES, - AgentConfig, - DataAgentConfig, - Datasource, - FewShotExample, - IntentDetectionConfig, - LLMConfig, - TableSchema, - ValidationConfig, + CONFIG_DIR, + DATASOURCE_TYPES, + AgentConfig, + DataAgentConfig, + Datasource, + FewShotExample, + LLMConfig, + TableSchema, + ValidationConfig, ) SCHEMA_PATH = CONFIG_DIR / "schema" / "agent_config.schema.json" @@ -126,7 +125,6 @@ def load_all(cls, validate: bool = True) -> AgentConfig: """Load and merge all configuration files from the config directory. Combines data_agents from all configs into a single AgentConfig. - Uses intent_detection settings from the first config found. Args: validate: Whether to validate against JSON schema (default True). @@ -150,9 +148,6 @@ def load_all(cls, validate: bool = True) -> AgentConfig: def _parse_config(cls, data: dict[str, Any]) -> AgentConfig: """Parse raw config dict into AgentConfig.""" return AgentConfig( - intent_detection=IntentDetectionConfig.from_dict( - data.get("intent_detection_agent", {}) - ), data_agents=[cls._parse_data_agent(a) for a in data.get("data_agents", [])], max_retries=data.get("max_retries", 3), ) diff --git a/src/data_agent/core/logging.py b/src/data_agent/core/logging.py index 71690e4..b7ba49a 100644 --- a/src/data_agent/core/logging.py +++ b/src/data_agent/core/logging.py @@ -1,13 +1,18 @@ -""" -Logging configuration for the Terminal Agent. -""" +"""Logging configuration for the Data Agent.""" import logging import logging.config def setup_logging(default_level: int = logging.INFO) -> None: - """Configure structured logging for the entire package.""" + """Configure structured logging for the entire package. + + Args: + default_level: Default logging level (e.g., logging.INFO). + + Returns: + None + """ level_name = logging.getLevelName(default_level) logging_config = { "version": 1, @@ -41,6 +46,7 @@ def setup_logging(default_level: int = logging.INFO) -> None: "httpx", "azure.identity", "chainlit", + "mcp.server.lowlevel.server", ] for logger_name in noisy_loggers: logging.getLogger(logger_name).setLevel(logging.WARNING) diff --git a/src/data_agent/llm/provider.py b/src/data_agent/llm/provider.py index 803c289..509c563 100644 --- a/src/data_agent/llm/provider.py +++ b/src/data_agent/llm/provider.py @@ -35,10 +35,17 @@ def create_llm(self, **kwargs: Any) -> BaseChatModel: Returns: Configured AzureChatOpenAI instance. """ - return AzureChatOpenAI( - azure_endpoint=kwargs.get("azure_endpoint"), - api_key=kwargs.get("api_key"), - azure_deployment=kwargs.get("deployment_name"), - api_version=kwargs.get("api_version", "2024-08-01-preview"), - temperature=kwargs.get("temperature", 0), - ) + # Build kwargs dict, only including non-None values to allow env var fallback + llm_kwargs: dict[str, Any] = { + "api_version": kwargs.get("api_version", "2024-08-01-preview"), + "temperature": kwargs.get("temperature", 0), + } + + if kwargs.get("azure_endpoint"): + llm_kwargs["azure_endpoint"] = kwargs["azure_endpoint"] + if kwargs.get("api_key"): + llm_kwargs["api_key"] = kwargs["api_key"] + if kwargs.get("deployment_name"): + llm_kwargs["azure_deployment"] = kwargs["deployment_name"] + + return AzureChatOpenAI(**llm_kwargs) diff --git a/src/data_agent/mcp/__init__.py b/src/data_agent/mcp/__init__.py new file mode 100644 index 0000000..93230d7 --- /dev/null +++ b/src/data_agent/mcp/__init__.py @@ -0,0 +1,16 @@ +"""MCP (Model Context Protocol) server for the NL2SQL Data Agent. + +The MCP server exposes: +- Tools: query, list_datasources, list_tables, get_schema, validate_sql +- Resources: datasources://list, schema://{datasource}, tables://{datasource} +""" + +from data_agent.mcp.context import MCPServerContext, set_context +from data_agent.mcp.server import create_mcp_server, main + +__all__ = [ + "create_mcp_server", + "main", + "MCPServerContext", + "set_context", +] diff --git a/src/data_agent/mcp/context.py b/src/data_agent/mcp/context.py new file mode 100644 index 0000000..87588f7 --- /dev/null +++ b/src/data_agent/mcp/context.py @@ -0,0 +1,60 @@ +"""MCP server context management with thread-safe state.""" + +import logging +from contextvars import ContextVar + +from data_agent.agent import DataAgentFlow +from data_agent.config import AgentConfig + +logger = logging.getLogger(__name__) + + +class MCPServerContext: + """Context holding initialized server components. + + Manages the lifecycle of the Data Agent and its connections, + providing thread-safe access to shared resources. + """ + + def __init__(self, config: AgentConfig): + """Initialize the MCP server context. + + Args: + config: Agent configuration with datasource definitions. + """ + self.config = config + self.agent = DataAgentFlow(config=config) + self._connected = False + + async def ensure_connected(self) -> None: + """Connect to all datasources if not already connected.""" + if not self._connected: + logger.info("Connecting to datasources...") + await self.agent.connect() + self._connected = True + logger.info("Connected to datasources") + + async def disconnect(self) -> None: + """Cleanup connections.""" + self._connected = False + logger.info("Disconnected from datasources") + + @property + def is_connected(self) -> bool: + """Check if datasources are connected.""" + return self._connected + + +# Thread-safe context variable for the server context +_context_var: ContextVar[MCPServerContext | None] = ContextVar( + "mcp_server_context", default=None +) + + +def set_context(ctx: MCPServerContext) -> None: + """Set the MCP server context. + + Args: + ctx: The MCPServerContext instance to set. + """ + _context_var.set(ctx) diff --git a/src/data_agent/mcp/resources.py b/src/data_agent/mcp/resources.py new file mode 100644 index 0000000..7b966de --- /dev/null +++ b/src/data_agent/mcp/resources.py @@ -0,0 +1,89 @@ +"""MCP resource definitions for the Data Agent.""" + +import logging + +from mcp.server.fastmcp import FastMCP + +from data_agent.mcp.context import MCPServerContext + +logger = logging.getLogger(__name__) + + +def register_resources(mcp: FastMCP, ctx: MCPServerContext) -> None: + """Register all MCP resources for the Data Agent. + + Args: + mcp: FastMCP server instance. + ctx: Server context with agent and configuration. + """ + + @mcp.resource("datasources://list") + async def datasources_list() -> str: + """List of available datasources as a resource. + + Returns: + Formatted list of datasources with descriptions. + """ + lines = ["Available Datasources:", ""] + for agent_cfg in ctx.config.data_agents: + desc = agent_cfg.description or "No description" + lines.append(f"- {agent_cfg.name}: {desc}") + + return "\n".join(lines) + + @mcp.resource("schema://{datasource}") + async def schema_resource(datasource: str) -> str: + """Database schema as a readable resource. + + Args: + datasource: Name of the datasource. + + Returns: + Schema information for the datasource. + """ + if datasource not in ctx.agent.datasources: + return f"Datasource '{datasource}' not found." + + ds = ctx.agent.datasources[datasource] + + from langchain_community.utilities.sql_database import SQLDatabase + + from data_agent.adapters import CosmosAdapter + + if isinstance(ds, SQLDatabase): + schema_info = ds.get_table_info() + return schema_info or f"No schema information for '{datasource}'." + elif isinstance(ds, CosmosAdapter): + return ( + f"Cosmos DB container: {ds.container_name}\n" + f"Partition key: {ds.partition_key_path}" + ) + + return f"Schema not available for '{datasource}'." + + @mcp.resource("tables://{datasource}") + async def tables_resource(datasource: str) -> str: + """List of tables in a datasource as a resource. + + Args: + datasource: Name of the datasource. + + Returns: + List of table names. + """ + if datasource not in ctx.agent.datasources: + return f"Datasource '{datasource}' not found." + + ds = ctx.agent.datasources[datasource] + + from langchain_community.utilities.sql_database import SQLDatabase + + from data_agent.adapters import CosmosAdapter + + if isinstance(ds, SQLDatabase): + tables = ds.get_usable_table_names() + return "\n".join(sorted(tables)) if tables else "No tables found." + elif isinstance(ds, CosmosAdapter): + return ds.container_name + + return f"Table listing not available for '{datasource}'." diff --git a/src/data_agent/mcp/server.py b/src/data_agent/mcp/server.py new file mode 100644 index 0000000..b64ccaa --- /dev/null +++ b/src/data_agent/mcp/server.py @@ -0,0 +1,150 @@ +"""MCP server for the NL2SQL Data Agent. + +This module provides the main MCP server implementation, integrating +tools, resources, and prompts for natural language to SQL queries. +""" + +import argparse +import logging + +from dotenv import load_dotenv + +load_dotenv() + +from mcp.server.fastmcp import FastMCP + +from data_agent.config import CONFIG_DIR +from data_agent.config_loader import ConfigLoader +from data_agent.core.logging import setup_logging +from data_agent.mcp.context import MCPServerContext, set_context +from data_agent.mcp.resources import register_resources +from data_agent.mcp.tools import register_tools + +setup_logging() +logger = logging.getLogger(__name__) + + +def create_mcp_server( + config_path: str | None = None, + config_name: str | None = None, +) -> FastMCP: + """Create and configure the MCP server. + + Args: + config_path: Path to agent configuration file. + config_name: Name of config to load from config directory. + If neither provided, loads all configs. + + Returns: + Configured FastMCP server instance. + """ + # Load configuration + if config_path: + config = ConfigLoader.load(config_path) + elif config_name: + config = ConfigLoader.load_by_name(config_name) + else: + config = ConfigLoader.load_all() + + # Create and set context (thread-safe) + ctx = MCPServerContext(config) + set_context(ctx) + + # Create the MCP server + mcp = FastMCP( + "data-agent", + instructions="""Data Agent is a natural language to SQL platform. +You can query databases using natural language, list available datasources, +and inspect database schemas. Use the 'query' tool to ask questions about data. + +IMPORTANT: Always include the SQL query that was executed in your response to the user. +Format results clearly with the data, SQL query used, and any relevant insights. + +Available tools: +- query: Execute natural language queries against databases +- list_datasources: See all available data sources +- list_tables: Quick list of tables in a datasource +- get_schema: Get detailed schema information +- validate_sql: Validate SQL syntax without executing + +Available resources: +- datasources://list: List of configured datasources +- schema://{datasource}: Database schema for a datasource +- tables://{datasource}: Tables in a datasource""", + ) + + # Register all components + register_tools(mcp, ctx) + register_resources(mcp, ctx) + + logger.info( + f"MCP server created with {len(config.data_agents)} datasource(s) configured" + ) + + return mcp + + +def get_config_choices() -> list[str]: + """Get available configuration file names. + + Returns: + List of config names (without .yaml extension). + """ + return [f.stem for f in CONFIG_DIR.glob("*.yaml")] + + +def main() -> None: + """Main entry point for the MCP server.""" + parser = argparse.ArgumentParser( + description="Data Agent MCP Server", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument( + "-c", + "--config", + choices=get_config_choices() or None, + default=None, + help="Configuration name to load (loads all if not specified)", + ) + parser.add_argument( + "--config-path", + type=str, + default=None, + help="Path to configuration file", + ) + parser.add_argument( + "--transport", + choices=["stdio", "sse"], + default="sse", + help="Transport mechanism (default: sse for VS Code/Cursor)", + ) + parser.add_argument( + "--port", + type=int, + default=8002, + help="Port for SSE transport (default: 8002)", + ) + parser.add_argument( + "--log-level", + choices=["debug", "info", "warning", "error"], + default="warning", + help="Logging level (default: warning)", + ) + + args = parser.parse_args() + + mcp = create_mcp_server( + config_path=args.config_path, + config_name=args.config, + ) + + if args.transport == "stdio": + mcp.run(transport="stdio") + else: + mcp.settings.host = "127.0.0.1" + mcp.settings.port = args.port + mcp.run(transport="sse") + + +if __name__ == "__main__": + main() diff --git a/src/data_agent/mcp/tools.py b/src/data_agent/mcp/tools.py new file mode 100644 index 0000000..49f656a --- /dev/null +++ b/src/data_agent/mcp/tools.py @@ -0,0 +1,267 @@ +"""MCP tool definitions for the Data Agent.""" + +import logging +from typing import Any + +from mcp.server.fastmcp import FastMCP + +from data_agent.mcp.context import MCPServerContext +from data_agent.models.state import OutputState + +logger = logging.getLogger(__name__) + + +def register_tools(mcp: FastMCP, ctx: MCPServerContext) -> None: + """Register all MCP tools for the Data Agent. + + Args: + mcp: FastMCP server instance. + ctx: Server context with agent and configuration. + """ + + @mcp.tool() + async def query(question: str, datasource: str | None = None) -> str: + """Execute a natural language query against the configured datasources. + + Args: + question: Natural language question to answer (e.g., "What are the top 10 customers by revenue?") + datasource: Optional specific datasource name to target. If not provided, the agent will auto-detect. + + Returns: + Query results as formatted text, including the SQL query used and the data returned. + """ + logger.debug(f"MCP query tool called with question: {question}") + logger.info(f"Executing query {question} on datasource: {datasource}") + + try: + result = await ctx.agent.run(question) + logger.info("Query execution completed") + return _format_query_result(result) + + except Exception as e: + logger.exception("Error executing query") + return f"Error executing query: {e}" + + @mcp.tool() + async def list_datasources() -> str: + """List all configured datasources available for querying. + + Returns: + Formatted list of available datasources with their descriptions. + """ + datasources = [] + for agent_cfg in ctx.config.data_agents: + ds_type = "unknown" + if agent_cfg.datasource: + ds_type = ( + type(agent_cfg.datasource) + .__name__.replace("Datasource", "") + .lower() + ) + + ds_info = f"- **{agent_cfg.name}** ({ds_type})" + if agent_cfg.description: + ds_info += f": {agent_cfg.description}" + + if agent_cfg.table_schemas: + tables = [schema.name for schema in agent_cfg.table_schemas] + ds_info += f"\n Tables: {', '.join(tables)}" + + datasources.append(ds_info) + + if not datasources: + return "No datasources configured." + + return "**Available Datasources:**\n\n" + "\n\n".join(datasources) + + @mcp.tool() + async def list_tables(datasource: str) -> str: + """List all tables available in a specific datasource. + + Args: + datasource: Name of the datasource to list tables for. + + Returns: + List of table names in the datasource. + """ + if datasource not in ctx.agent.datasources: + available = ", ".join(ctx.agent.datasources.keys()) + return f"Datasource '{datasource}' not found. Available: {available}" + + ds = ctx.agent.datasources[datasource] + + try: + from langchain_community.utilities.sql_database import SQLDatabase + + from data_agent.adapters import CosmosAdapter + + if isinstance(ds, SQLDatabase): + tables = ds.get_usable_table_names() + if tables: + return f"**Tables in {datasource}:**\n\n" + "\n".join( + f"- {t}" for t in sorted(tables) + ) + return f"No tables found in '{datasource}'." + elif isinstance(ds, CosmosAdapter): + return f"**Container in {datasource}:**\n\n- {ds.container_name}" + else: + return f"Table listing not supported for datasource '{datasource}'." + + except Exception as e: + logger.exception("Error listing tables") + return f"Error listing tables: {e}" + + @mcp.tool() + async def get_schema(datasource: str) -> str: + """Get the database schema for a specific datasource. + + Args: + datasource: Name of the datasource to get schema for (use list_datasources to see available options) + + Returns: + Database schema information including tables, columns, and their types. + """ + if datasource not in ctx.agent.datasources: + available = ", ".join(ctx.agent.datasources.keys()) + return f"Datasource '{datasource}' not found. Available: {available}" + + ds = ctx.agent.datasources[datasource] + + try: + from langchain_community.utilities.sql_database import SQLDatabase + + from data_agent.adapters import CosmosAdapter + + if isinstance(ds, SQLDatabase): + schema_info = ds.get_table_info() + if schema_info: + return f"**Schema for {datasource}:**\n\n{schema_info}" + return f"No schema information available for '{datasource}'." + elif isinstance(ds, CosmosAdapter): + return ( + f"**Schema for {datasource}:**\n\n" + f"Cosmos DB container: {ds.container_name}\n" + f"Partition key: {ds.partition_key_path}\n\n" + "Note: Cosmos DB is a NoSQL database. Use queries like 'SELECT * FROM c' to explore data." + ) + else: + return f"Schema inspection not supported for datasource '{datasource}'." + + except Exception as e: + logger.exception("Error getting schema") + return f"Error retrieving schema: {e}" + + @mcp.tool() + async def validate_sql(sql: str, datasource: str) -> str: + """Validate SQL syntax without executing the query. + + Args: + sql: The SQL query to validate. + datasource: Name of the datasource to validate against (for dialect detection). + + Returns: + Validation result indicating if the SQL is valid, with any errors or warnings. + """ + if datasource not in ctx.agent.datasources: + available = ", ".join(ctx.agent.datasources.keys()) + return f"Datasource '{datasource}' not found. Available: {available}" + + try: + from data_agent.validators.sql_validator import ( + SQLValidator, + ValidationStatus, + ) + + # Get dialect from datasource config + dialect = "postgres" # default + for agent_cfg in ctx.config.data_agents: + if agent_cfg.name == datasource and agent_cfg.datasource: + ds_type = type(agent_cfg.datasource).__name__.lower() + if "cosmos" in ds_type: + dialect = "cosmosdb" + elif "synapse" in ds_type or "azuresql" in ds_type: + dialect = "tsql" + elif "bigquery" in ds_type: + dialect = "bigquery" + elif "databricks" in ds_type: + dialect = "databricks" + break + + validator = SQLValidator(dialect=dialect) + result = validator.validate(sql) + + response_parts = [f"**SQL Validation Result:**\n"] + + if result.status == ValidationStatus.VALID: + response_parts.append("✅ **Status:** Valid\n") + if result.query != sql: + response_parts.append( + f"**Transformed Query:**\n```sql\n{result.query}\n```\n" + ) + elif result.status == ValidationStatus.INVALID: + response_parts.append("❌ **Status:** Invalid\n") + else: + response_parts.append("⚠️ **Status:** Unsafe\n") + + if result.errors: + response_parts.append( + f"**Errors:**\n" + "\n".join(f"- {e}" for e in result.errors) + ) + + if result.warnings: + response_parts.append( + f"\n**Warnings:**\n" + "\n".join(f"- {w}" for w in result.warnings) + ) + + return "\n".join(response_parts) + + except Exception as e: + logger.exception("Error validating SQL") + return f"Error validating SQL: {e}" + + +def _format_query_result(result: OutputState | dict[str, Any]) -> str: + """Format query result into a readable response. + + Args: + result: Query result dictionary or OutputState from the agent. + + Returns: + Formatted string response. + """ + if not isinstance(result, dict): + result = dict(result) + + response_parts = [] + + if result.get("final_response"): + response_parts.append(str(result.get("final_response"))) + + if result.get("generated_sql"): + response_parts.append( + f"\n**SQL Query:**\n```sql\n{result.get('generated_sql')}\n```" + ) + + if result.get("result") and not result.get("final_response"): + response_parts.append(f"\n**Results:**\n{result.get('result')}") + + if result.get("visualization_image"): + img_data = result.get("visualization_image") + response_parts.append( + f"\n**Visualization:**\n![Chart](data:image/png;base64,{img_data})" + ) + + if result.get("visualization_code"): + response_parts.append( + f"\n**Visualization Code:**\n```python\n{result.get('visualization_code')}\n```" + ) + + if result.get("visualization_error"): + response_parts.append( + f"\n**Visualization Error:** {result.get('visualization_error')}" + ) + + if result.get("error") and result.get("error") != "out_of_scope": + response_parts.append(f"\n**Error:** {result.get('error')}") + + return "\n".join(response_parts) if response_parts else "No results returned." diff --git a/src/data_agent/models/__init__.py b/src/data_agent/models/__init__.py index 8deffa9..9492c3f 100644 --- a/src/data_agent/models/__init__.py +++ b/src/data_agent/models/__init__.py @@ -1,9 +1,9 @@ """State and output models for the Data Agent.""" from data_agent.models.outputs import ( - ResponseGeneratorOutput, - SQLGeneratorOutput, - SQLValidationOutput, + ResponseGeneratorOutput, + SQLGeneratorOutput, + SQLValidationOutput, ) from data_agent.models.state import AgentState, InputState, OutputState diff --git a/src/data_agent/nodes/data_nodes.py b/src/data_agent/nodes/data_nodes.py index ff9a1ee..0bdbae8 100644 --- a/src/data_agent/nodes/data_nodes.py +++ b/src/data_agent/nodes/data_nodes.py @@ -14,12 +14,12 @@ from data_agent.config import DataAgentConfig from data_agent.config_loader import SchemaFormatter from data_agent.models.outputs import ( - QueryResult, - SQLGeneratorOutput, - SQLValidationOutput, + QueryResult, + SQLGeneratorOutput, + SQLValidationOutput, ) from data_agent.utils.message_utils import get_recent_history -from data_agent.utils.sql_utils import build_date_context, clean_sql_query +from data_agent.utils.sql_utils import clean_sql_query from data_agent.validators.sql_validator import SQLValidator, ValidationStatus if TYPE_CHECKING: @@ -28,7 +28,7 @@ from data_agent.adapters.azure.cosmos import CosmosAdapter from data_agent.models.state import AgentState -from data_agent.prompts import COSMOS_PROMPT_ADDENDUM, DEFAULT_SQL_PROMPT +from data_agent.prompts.builder import build_prompt logger = logging.getLogger(__name__) @@ -128,31 +128,29 @@ def _get_schema_context(self) -> str: return "" def _build_prompt(self) -> str: - """Build system prompt, adding Cosmos constraints if needed. + """Build system prompt using the centralized prompt builder. Returns: - Formatted system prompt with schema context and date. + Formatted system prompt with all components. """ schema_context = self._get_schema_context() few_shot = SchemaFormatter.format_few_shot_examples(self._config) - base_prompt = self._config.system_prompt or DEFAULT_SQL_PROMPT - formatted = base_prompt.format( + # Get partition key for Cosmos if applicable + partition_key = None + if self._is_cosmos and self._config.datasource: + partition_key = getattr( + self._config.datasource, "partition_key_path", "/id" + ) + + return build_prompt( + datasource_type=self._dialect, + user_prompt=self._config.system_prompt, schema_context=schema_context, few_shot_examples=few_shot, + partition_key=partition_key, ) - # Add Cosmos-specific constraints - if self._is_cosmos: - partition_key = "/id" - if self._config.datasource: - partition_key = getattr( - self._config.datasource, "partition_key_path", "/id" - ) - formatted += COSMOS_PROMPT_ADDENDUM.format(partition_key=partition_key) - - return build_date_context() + formatted - async def generate_sql(self, state: "AgentState") -> dict[str, Any]: """Generate query from natural language question. diff --git a/src/data_agent/nodes/response.py b/src/data_agent/nodes/response.py index 348a61f..a996c8f 100644 --- a/src/data_agent/nodes/response.py +++ b/src/data_agent/nodes/response.py @@ -17,7 +17,7 @@ if TYPE_CHECKING: from data_agent.models.state import AgentState -from data_agent.prompts import DEFAULT_RESPONSE_PROMPT +from data_agent.prompts.builder import build_response_prompt logger = logging.getLogger(__name__) @@ -58,7 +58,7 @@ def generate_response(self, state: "AgentState") -> dict[str, Any]: Returns: State update with final response and messages. """ - prompt = self._config.response_prompt or DEFAULT_RESPONSE_PROMPT + prompt = build_response_prompt(self._config.response_prompt) question = state["question"] sql = state.get("generated_sql", "") diff --git a/src/data_agent/prompts/__init__.py b/src/data_agent/prompts/__init__.py index ce50e04..42cdb5c 100644 --- a/src/data_agent/prompts/__init__.py +++ b/src/data_agent/prompts/__init__.py @@ -1,15 +1,21 @@ """Default prompts for the data agent.""" from data_agent.prompts.defaults import ( - COSMOS_PROMPT_ADDENDUM, - DEFAULT_RESPONSE_PROMPT, - DEFAULT_SQL_PROMPT, - VISUALIZATION_SYSTEM_PROMPT, + COSMOS_PROMPT_ADDENDUM, + DEFAULT_GENERAL_CHAT_PROMPT, + DEFAULT_INTENT_DETECTION_PROMPT, + DEFAULT_RESPONSE_PROMPT, + DEFAULT_SQL_PROMPT, + VISUALIZATION_SYSTEM_PROMPT, ) +from data_agent.prompts.dialects import get_dialect_guidelines __all__ = [ "COSMOS_PROMPT_ADDENDUM", + "DEFAULT_GENERAL_CHAT_PROMPT", + "DEFAULT_INTENT_DETECTION_PROMPT", "DEFAULT_RESPONSE_PROMPT", "DEFAULT_SQL_PROMPT", "VISUALIZATION_SYSTEM_PROMPT", + "get_dialect_guidelines", ] diff --git a/src/data_agent/prompts/builder.py b/src/data_agent/prompts/builder.py new file mode 100644 index 0000000..30f4d2a --- /dev/null +++ b/src/data_agent/prompts/builder.py @@ -0,0 +1,84 @@ +"""Prompt builder for assembling system prompts from components. + +This module provides the `build_prompt` function that assembles +the final system prompt by appending all components in order. +""" + +import logging + +from data_agent.prompts.defaults import ( + COSMOS_PROMPT_ADDENDUM, + DEFAULT_RESPONSE_PROMPT, + DEFAULT_SQL_PROMPT, +) +from data_agent.prompts.dialects import get_dialect_guidelines +from data_agent.utils.sql_utils import build_date_context + +logger = logging.getLogger(__name__) + + +def build_prompt( + datasource_type: str, + user_prompt: str | None = None, + schema_context: str = "", + few_shot_examples: str | None = None, + partition_key: str | None = None, +) -> str: + """Build the complete prompt by appending all components. + + Args: + datasource_type: Database type (e.g., 'bigquery', 'azure_sql', 'postgres', 'cosmosdb'). + user_prompt: Team's custom prompt from YAML (optional). + schema_context: Schema information (auto-discovered or from YAML). + few_shot_examples: Formatted examples string (optional). + partition_key: Cosmos DB partition key path (only for Cosmos datasources). + + Returns: + Complete prompt with all components assembled. + """ + sections: list[str] = [] + + sections.append(build_date_context().strip()) + + base_prompt = user_prompt.strip() if user_prompt else DEFAULT_SQL_PROMPT.strip() + + formatted_prompt = base_prompt.format( + schema_context=schema_context or "", + few_shot_examples=few_shot_examples or "", + ) + sections.append(formatted_prompt) + + dialect_guidelines = get_dialect_guidelines(datasource_type) + if dialect_guidelines: + sections.append(dialect_guidelines.strip()) + + if datasource_type.lower() in ("cosmos", "cosmosdb"): + cosmos_addendum = COSMOS_PROMPT_ADDENDUM.format( + partition_key=partition_key or "/id" + ) + sections.append(cosmos_addendum.strip()) + + prompt = "\n\n".join(sections) + + logger.debug( + "Built system prompt for %s (%d chars):\n%s", + datasource_type, + len(prompt), + prompt, + ) + + return prompt + + +def build_response_prompt(user_prompt: str | None = None) -> str: + """Build the response generation prompt. + + Args: + user_prompt: Team's custom response prompt from YAML (optional). + + Returns: + Response prompt (custom or default). + """ + if user_prompt: + return user_prompt.strip() + return DEFAULT_RESPONSE_PROMPT.strip() diff --git a/src/data_agent/prompts/defaults.py b/src/data_agent/prompts/defaults.py index 9aaa6e1..cb71fba 100644 --- a/src/data_agent/prompts/defaults.py +++ b/src/data_agent/prompts/defaults.py @@ -1,5 +1,37 @@ """Default system prompts for data agent nodes.""" +DEFAULT_INTENT_DETECTION_PROMPT = """You are an intent detection assistant responsible for routing user questions to the appropriate data agent. + +## Available Data Agents + +{agent_descriptions} + +## Instructions + +1. Analyze the user's question to understand what data they are asking about. +2. Match the question to the most relevant data agent based on the domain and data types. +3. If the question is ambiguous, choose the agent most likely to have the relevant data. +4. If the user is greeting you (e.g., "hello", "hi", "hey"), asking about your capabilities (e.g., "what can you do?", "help"), or engaging in general conversation that doesn't require data queries, respond with "general_chat". +5. If no agent is a clear match AND it's not general chat, respond with "unknown". + +## Response Format + +Respond with ONLY the agent name (e.g., "financial_transactions") or "general_chat". Do not include any explanation.""" + +DEFAULT_GENERAL_CHAT_PROMPT = """You are a friendly and helpful data assistant. Respond conversationally to the user's greeting or question about your capabilities. + +## Your Capabilities +You help users query and analyze data from the following domains: + +{agent_descriptions} + +## Instructions +- If the user greets you, respond with a friendly greeting and briefly mention what you can help with. +- If the user asks what you can do, explain your capabilities and list the available data domains. +- Keep responses concise, friendly, and helpful. +- Guide users toward asking data-related questions. +""" + DEFAULT_SQL_PROMPT = """You are a SQL expert. Generate a syntactically correct SQL query. Limit results to 10 unless specified. Only select relevant columns. @@ -11,7 +43,8 @@ {schema_context} -{few_shot_examples}""" +{few_shot_examples} +""" COSMOS_PROMPT_ADDENDUM = """ Key Cosmos DB constraints: @@ -24,11 +57,25 @@ 7. Max 4MB response per page; use continuation tokens for large results. """ -DEFAULT_RESPONSE_PROMPT = """You are a helpful data analyst. Given the user's question, -the SQL query that was executed, and the results, provide a clear and concise natural -language response that answers the user's question. +DEFAULT_RESPONSE_PROMPT = """You are a helpful retail analyst for Walmart US sales data. +Given the user's question, the SQL query that was executed, and the results, +provide a clear and concise natural language response. + +Be conversational but precise. Include relevant numbers, percentages, and insights. +Format currency values with $ and commas. Format large numbers for readability. +When discussing sales performance, provide context about comparable stores, channels, and time periods. +If the results are empty, explain what that means in context. -Be conversational but precise. Include relevant numbers and insights from the data.""" +## Data Presentation + +When the query returns tabular data (multiple rows/columns), ALWAYS include a formatted markdown table showing the results. +- Use proper markdown table syntax with headers +- Align numeric columns to the right +- Format currency with $ and commas (e.g., $1,234.56) +- Format dates in readable format (e.g., Jun 21, 2025) +- Limit tables to 20 rows max; if more rows exist, show first 20 and note "... and X more rows" +- After the table, provide a brief summary or insight about the data. +""" VISUALIZATION_SYSTEM_PROMPT = """You are a data visualization expert. Generate Python code using matplotlib to create a chart. diff --git a/src/data_agent/prompts/dialects.py b/src/data_agent/prompts/dialects.py new file mode 100644 index 0000000..4b12ef2 --- /dev/null +++ b/src/data_agent/prompts/dialects.py @@ -0,0 +1,162 @@ +"""SQL dialect-specific guidelines for query generation. + +This module provides dialect-specific SQL guidelines that are automatically +appended to system prompts based on the datasource type. +""" + +BIGQUERY_GUIDELINES = """## BigQuery SQL Guidelines + +1. **Use BigQuery SQL syntax:** + - DATE_TRUNC, DATE_ADD, DATE_SUB for date operations + - CURRENT_DATE(), CURRENT_TIMESTAMP() for current time + - EXTRACT(YEAR FROM date), EXTRACT(MONTH FROM date) for date parts + - STRING, INT64, FLOAT64, NUMERIC, BOOL data types + - Use backticks for table names: `project.dataset.table` + +2. **Aggregation functions:** + - SUM(), AVG(), COUNT(), MIN(), MAX() + - COUNTIF(), SUMIF() for conditional aggregations + - APPROX_COUNT_DISTINCT() for large cardinality counts + +3. **String functions:** + - CONCAT(), SUBSTR(), UPPER(), LOWER(), TRIM() + - REGEXP_CONTAINS(), REGEXP_EXTRACT() for regex + - FORMAT() for string formatting + +4. **Best practices:** + - Always qualify column names with table aliases + - Use LIMIT to restrict results unless user specifies otherwise + - Use fully qualified table names: `project.dataset.table` + - Partition filters improve performance (e.g., WHERE partition_date >= ...) +""" + +POSTGRES_GUIDELINES = """## PostgreSQL SQL Guidelines + +1. **Use PostgreSQL syntax:** + - DATE_TRUNC(), DATE_PART() for date operations + - NOW(), CURRENT_DATE, CURRENT_TIMESTAMP for current time + - EXTRACT(YEAR FROM date) for date parts + - TEXT, INTEGER, BIGINT, NUMERIC, BOOLEAN data types + - Use double quotes for identifiers with special characters + +2. **Aggregation functions:** + - SUM(), AVG(), COUNT(), MIN(), MAX() + - COUNT(*) FILTER (WHERE condition) for conditional counts + - ARRAY_AGG(), STRING_AGG() for aggregation + +3. **String functions:** + - CONCAT(), SUBSTRING(), UPPER(), LOWER(), TRIM() + - ~ operator or SIMILAR TO for regex matching + - FORMAT() for string formatting + +4. **Best practices:** + - Always qualify column names with table aliases + - Use LIMIT to restrict results unless user specifies otherwise + - Use schema-qualified table names: schema.table +""" + +AZURE_SQL_GUIDELINES = """## Azure SQL / SQL Server Guidelines + +1. **Use T-SQL syntax:** + - DATEPART(), DATEDIFF(), DATEADD() for date operations + - GETDATE(), GETUTCDATE() for current time + - VARCHAR, NVARCHAR, INT, BIGINT, DECIMAL, BIT data types + - Use square brackets for identifiers: [schema].[table] + +2. **Aggregation functions:** + - SUM(), AVG(), COUNT(), MIN(), MAX() + - COUNT(*) with CASE for conditional counts + - STRING_AGG() for string aggregation (SQL Server 2017+) + +3. **String functions:** + - CONCAT(), SUBSTRING(), UPPER(), LOWER(), LTRIM(), RTRIM() + - LIKE with wildcards for pattern matching + - FORMAT() for string formatting + +4. **Best practices:** + - Always qualify column names with table aliases + - Use TOP N instead of LIMIT + - Use schema-qualified table names: [schema].[table] +""" + +SYNAPSE_GUIDELINES = """## Azure Synapse Analytics Guidelines + +1. **Use Synapse SQL syntax:** + - Similar to T-SQL with distributed query optimizations + - DATEPART(), DATEDIFF(), DATEADD() for date operations + - GETDATE(), GETUTCDATE() for current time + - VARCHAR, NVARCHAR, INT, BIGINT, DECIMAL data types + +2. **Aggregation functions:** + - SUM(), AVG(), COUNT(), MIN(), MAX() + - APPROX_COUNT_DISTINCT() for large tables + +3. **Best practices:** + - Use TOP N instead of LIMIT + - Filter on distribution columns when possible + - Use schema-qualified table names: [schema].[table] + - Avoid SELECT * on large tables +""" + +DATABRICKS_GUIDELINES = """## Databricks SQL Guidelines + +1. **Use Databricks SQL syntax:** + - DATE_TRUNC(), DATE_ADD(), DATE_SUB() for date operations + - CURRENT_DATE(), CURRENT_TIMESTAMP() for current time + - STRING, INT, BIGINT, DOUBLE, DECIMAL, BOOLEAN data types + +2. **Aggregation functions:** + - SUM(), AVG(), COUNT(), MIN(), MAX() + - APPROX_COUNT_DISTINCT() for large cardinality + - COLLECT_LIST(), COLLECT_SET() for arrays + +3. **Best practices:** + - Always qualify column names with table aliases + - Use LIMIT to restrict results + - Use catalog.schema.table naming convention + - Delta Lake tables support time travel: SELECT * FROM table@v1 +""" + +COSMOS_GUIDELINES = """## Azure Cosmos DB SQL Guidelines + +1. **Use Cosmos DB SQL syntax:** + - SELECT, FROM, WHERE, ORDER BY, TOP + - No JOINs between containers (only within documents) + - Array functions: ARRAY_CONTAINS(), ARRAY_LENGTH() + +2. **Query limitations:** + - Always include partition key in WHERE clause for efficiency + - Cross-partition queries are expensive + - No GROUP BY or aggregations without partition key filter + +3. **Best practices:** + - Filter by partition key first + - Use TOP instead of LIMIT + - Prefer point reads over queries when possible +""" + +# Map datasource types to their guidelines +DIALECT_GUIDELINES_MAP: dict[str, str] = { + "bigquery": BIGQUERY_GUIDELINES, + "postgres": POSTGRES_GUIDELINES, + "postgresql": POSTGRES_GUIDELINES, + "azure_sql": AZURE_SQL_GUIDELINES, + "mssql": AZURE_SQL_GUIDELINES, + "sqlserver": AZURE_SQL_GUIDELINES, + "synapse": SYNAPSE_GUIDELINES, + "databricks": DATABRICKS_GUIDELINES, + "cosmos": COSMOS_GUIDELINES, + "cosmosdb": COSMOS_GUIDELINES, +} + + +def get_dialect_guidelines(datasource_type: str) -> str: + """Get SQL guidelines for a specific datasource type. + + Args: + datasource_type: Database type (e.g., 'bigquery', 'azure_sql', 'postgres'). + + Returns: + Dialect-specific SQL guidelines, or empty string if not found. + """ + return DIALECT_GUIDELINES_MAP.get(datasource_type.lower(), "") diff --git a/src/data_agent/utils/__init__.py b/src/data_agent/utils/__init__.py index 1d05d90..635fdc6 100644 --- a/src/data_agent/utils/__init__.py +++ b/src/data_agent/utils/__init__.py @@ -2,9 +2,9 @@ from data_agent.utils.message_utils import get_recent_history from data_agent.utils.sql_utils import ( - build_date_context, - clean_sql_query, - pretty_sql, + build_date_context, + clean_sql_query, + pretty_sql, ) __all__ = [ diff --git a/src/data_agent/validators/__init__.py b/src/data_agent/validators/__init__.py index 09f8806..492a464 100644 --- a/src/data_agent/validators/__init__.py +++ b/src/data_agent/validators/__init__.py @@ -4,9 +4,9 @@ """ from data_agent.validators.sql_validator import ( - SQLValidator, - ValidationResult, - ValidationStatus, + SQLValidator, + ValidationResult, + ValidationStatus, ) __all__ = ["SQLValidator", "ValidationResult", "ValidationStatus"] diff --git a/tests/test_a2a.py b/tests/test_a2a.py index 7629d31..0df13c8 100644 --- a/tests/test_a2a.py +++ b/tests/test_a2a.py @@ -14,15 +14,15 @@ import httpx from a2a.client import A2ACardResolver, ClientConfig, ClientFactory from a2a.types import ( - AgentCard, - Message, - Part, - Role, - TextPart, + AgentCard, + Message, + Part, + Role, + TextPart, ) from a2a.utils.constants import ( - AGENT_CARD_WELL_KNOWN_PATH, - EXTENDED_AGENT_CARD_PATH, + AGENT_CARD_WELL_KNOWN_PATH, + EXTENDED_AGENT_CARD_PATH, ) logger = logging.getLogger(__name__) diff --git a/uv.lock b/uv.lock index 6dda5dd..e5b00e5 100644 --- a/uv.lock +++ b/uv.lock @@ -841,6 +841,7 @@ dependencies = [ { name = "langgraph-api" }, { name = "langgraph-cli", extra = ["inmem"] }, { name = "matplotlib" }, + { name = "mcp" }, { name = "pandas" }, { name = "psycopg", extra = ["binary"] }, { name = "psycopg2" }, @@ -905,6 +906,7 @@ requires-dist = [ { name = "langgraph-api", specifier = ">=0.5.42" }, { name = "langgraph-cli", extras = ["inmem"], specifier = ">=0.4.10" }, { name = "matplotlib", specifier = ">=3.10.8" }, + { name = "mcp", specifier = ">=1.25.0" }, { name = "pandas", specifier = ">=2.0.0" }, { name = "poethepoet", marker = "extra == 'dev'" }, { name = "pre-commit", marker = "extra == 'dev'" }, @@ -2463,7 +2465,7 @@ wheels = [ [[package]] name = "mcp" -version = "1.24.0" +version = "1.25.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2481,9 +2483,9 @@ dependencies = [ { name = "typing-inspection" }, { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/2c/db9ae5ab1fcdd9cd2bcc7ca3b7361b712e30590b64d5151a31563af8f82d/mcp-1.24.0.tar.gz", hash = "sha256:aeaad134664ce56f2721d1abf300666a1e8348563f4d3baff361c3b652448efc", size = 604375, upload-time = "2025-12-12T14:19:38.205Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/2d/649d80a0ecf6a1f82632ca44bec21c0461a9d9fc8934d38cb5b319f2db5e/mcp-1.25.0.tar.gz", hash = "sha256:56310361ebf0364e2d438e5b45f7668cbb124e158bb358333cd06e49e83a6802", size = 605387, upload-time = "2025-12-19T10:19:56.985Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/0d/5cf14e177c8ae655a2fd9324a6ef657ca4cafd3fc2201c87716055e29641/mcp-1.24.0-py3-none-any.whl", hash = "sha256:db130e103cc50ddc3dffc928382f33ba3eaef0b711f7a87c05e7ded65b1ca062", size = 232896, upload-time = "2025-12-12T14:19:36.14Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fc/6dc7659c2ae5ddf280477011f4213a74f806862856b796ef08f028e664bf/mcp-1.25.0-py3-none-any.whl", hash = "sha256:b37c38144a666add0862614cc79ec276e97d72aa8ca26d622818d4e278b9721a", size = 233076, upload-time = "2025-12-19T10:19:55.416Z" }, ] [[package]] From c577099b8da8b6453c945f8eb40ddd81a95d842d Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 17:31:14 -0500 Subject: [PATCH 2/7] (chore): update prompts configuration --- docs/PROMPTS.md | 49 +++++++++++++++++++------------------------------ uv.lock | 2 +- 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/docs/PROMPTS.md b/docs/PROMPTS.md index ae8c864..eafa749 100644 --- a/docs/PROMPTS.md +++ b/docs/PROMPTS.md @@ -83,24 +83,27 @@ prompt = build_prompt( ### Custom Prompts via Configuration -Teams can override default prompts in their YAML configuration: +Teams can override default prompts in their agent YAML configuration using `system_prompt` and `response_prompt`: ```yaml -name: my_agent -datasource: - type: postgres - # ... -prompts: - sql_prompt: | - You are a SQL expert for our e-commerce database. - Focus on sales metrics and customer behavior. - - {schema_context} - - {few_shot_examples} - response_prompt: | - Provide insights focused on business impact. - Always mention revenue implications. +data_agents: + - name: my_agent + description: E-commerce sales database + datasource: + type: postgres + # ... + system_prompt: | + You are a SQL expert for our e-commerce database. + Focus on sales metrics and customer behavior. + + {schema_context} + + {few_shot_examples} + response_prompt: | + Provide insights focused on business impact. + Always mention revenue implications. + table_schemas: + # ... ``` ### Getting Dialect Guidelines @@ -168,17 +171,3 @@ __all__ = [ "MY_NEW_PROMPT", ] ``` - -## Best Practices - -1. **Keep prompts focused** - Each prompt should have a single responsibility -2. **Use schema context** - Always include relevant schema information for SQL generation -3. **Provide few-shot examples** - Examples significantly improve query accuracy -4. **Test with your data** - Dialect guidelines may need tuning for specific schemas -5. **Log prompts during development** - Use `DEBUG` logging to inspect assembled prompts - -## Related Modules - -- [`config.py`](../src/data_agent/config.py) - Configuration models including prompt overrides -- [`nodes/data_nodes.py`](../src/data_agent/nodes/data_nodes.py) - Nodes that consume prompts -- [`nodes/visualization.py`](../src/data_agent/nodes/visualization.py) - Visualization prompt usage diff --git a/uv.lock b/uv.lock index e5b00e5..b02c21a 100644 --- a/uv.lock +++ b/uv.lock @@ -819,7 +819,7 @@ wheels = [ [[package]] name = "data-agent" -version = "0.3.0" +version = "0.3.1" source = { editable = "." } dependencies = [ { name = "a2a-sdk", extra = ["http-server"] }, From 15d939e3c707b2f691a40e3882feaa6f9664c388 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 17:31:56 -0500 Subject: [PATCH 3/7] chore: remove unused .editorconfig file --- .editorconfig | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index f1a2378..0000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = crlf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = false From 12de3852617ab1bb6839d5831fc2b801aa5b89a8 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 17:33:24 -0500 Subject: [PATCH 4/7] style: format imports consistently across multiple files --- src/data_agent/__init__.py | 18 +++++++++--------- src/data_agent/a2a/agent_card.py | 6 +++--- src/data_agent/a2a/executor.py | 16 ++++++++-------- src/data_agent/agent.py | 20 ++++++++++---------- src/data_agent/cli/app.py | 8 ++++---- src/data_agent/config_loader.py | 18 +++++++++--------- src/data_agent/mcp/tools.py | 4 ++-- src/data_agent/models/__init__.py | 6 +++--- src/data_agent/nodes/data_nodes.py | 6 +++--- src/data_agent/prompts/__init__.py | 12 ++++++------ src/data_agent/prompts/builder.py | 6 +++--- src/data_agent/utils/__init__.py | 6 +++--- src/data_agent/validators/__init__.py | 6 +++--- tests/test_a2a.py | 14 +++++++------- 14 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/data_agent/__init__.py b/src/data_agent/__init__.py index 525d599..41e7e0c 100644 --- a/src/data_agent/__init__.py +++ b/src/data_agent/__init__.py @@ -3,15 +3,15 @@ from data_agent.adapters import CosmosAdapter, create_sql_database from data_agent.agent import DataAgentFlow from data_agent.config import ( - AgentConfig, - AzureSQLDatasource, - BigQueryDatasource, - CosmosDatasource, - DataAgentConfig, - DatabricksDatasource, - Datasource, - PostgresDatasource, - SynapseDatasource, + AgentConfig, + AzureSQLDatasource, + BigQueryDatasource, + CosmosDatasource, + DataAgentConfig, + DatabricksDatasource, + Datasource, + PostgresDatasource, + SynapseDatasource, ) from data_agent.config_loader import ConfigLoader, SchemaFormatter from data_agent.core import setup_logging diff --git a/src/data_agent/a2a/agent_card.py b/src/data_agent/a2a/agent_card.py index e67b251..5501767 100644 --- a/src/data_agent/a2a/agent_card.py +++ b/src/data_agent/a2a/agent_card.py @@ -5,9 +5,9 @@ """ from a2a.types import ( - AgentCapabilities, - AgentCard, - AgentSkill, + AgentCapabilities, + AgentCard, + AgentSkill, ) SUPPORTED_CONTENT_TYPES = ["text", "text/plain"] diff --git a/src/data_agent/a2a/executor.py b/src/data_agent/a2a/executor.py index 2fb1a3d..c52c61d 100644 --- a/src/data_agent/a2a/executor.py +++ b/src/data_agent/a2a/executor.py @@ -10,16 +10,16 @@ from a2a.server.events import EventQueue from a2a.server.tasks import TaskUpdater from a2a.types import ( - InternalError, - InvalidParamsError, - Part, - TaskState, - TextPart, - UnsupportedOperationError, + InternalError, + InvalidParamsError, + Part, + TaskState, + TextPart, + UnsupportedOperationError, ) from a2a.utils import ( - new_agent_text_message, - new_task, + new_agent_text_message, + new_task, ) from a2a.utils.errors import ServerError diff --git a/src/data_agent/agent.py b/src/data_agent/agent.py index 395daa4..ac70d87 100644 --- a/src/data_agent/agent.py +++ b/src/data_agent/agent.py @@ -19,22 +19,22 @@ from data_agent.adapters import CosmosAdapter, create_sql_database from data_agent.config import ( - AgentConfig, - AzureSQLDatasource, - BigQueryDatasource, - CosmosDatasource, - DataAgentConfig, - DatabricksDatasource, - PostgresDatasource, - SynapseDatasource, + AgentConfig, + AzureSQLDatasource, + BigQueryDatasource, + CosmosDatasource, + DataAgentConfig, + DatabricksDatasource, + PostgresDatasource, + SynapseDatasource, ) from data_agent.config_loader import ConfigLoader from data_agent.graph import create_data_agent from data_agent.llm import get_llm from data_agent.models.state import AgentState, InputState, OutputState from data_agent.prompts.defaults import ( - DEFAULT_GENERAL_CHAT_PROMPT, - DEFAULT_INTENT_DETECTION_PROMPT, + DEFAULT_GENERAL_CHAT_PROMPT, + DEFAULT_INTENT_DETECTION_PROMPT, ) from data_agent.utils.callbacks import AgentCallback from data_agent.utils.message_utils import get_recent_history diff --git a/src/data_agent/cli/app.py b/src/data_agent/cli/app.py index 3a3b475..907ca95 100644 --- a/src/data_agent/cli/app.py +++ b/src/data_agent/cli/app.py @@ -14,10 +14,10 @@ from data_agent import DataAgentFlow from data_agent.cli.console import console, print_error from data_agent.cli.output import ( - print_dashboard, - print_error_panel, - print_query_info, - print_response, + print_dashboard, + print_error_panel, + print_query_info, + print_response, ) from data_agent.config import CONFIG_DIR, AgentConfig from data_agent.config_loader import ConfigLoader diff --git a/src/data_agent/config_loader.py b/src/data_agent/config_loader.py index ab658ea..da469be 100644 --- a/src/data_agent/config_loader.py +++ b/src/data_agent/config_loader.py @@ -13,15 +13,15 @@ from pydantic_settings import BaseSettings from .config import ( - CONFIG_DIR, - DATASOURCE_TYPES, - AgentConfig, - DataAgentConfig, - Datasource, - FewShotExample, - LLMConfig, - TableSchema, - ValidationConfig, + CONFIG_DIR, + DATASOURCE_TYPES, + AgentConfig, + DataAgentConfig, + Datasource, + FewShotExample, + LLMConfig, + TableSchema, + ValidationConfig, ) SCHEMA_PATH = CONFIG_DIR / "schema" / "agent_config.schema.json" diff --git a/src/data_agent/mcp/tools.py b/src/data_agent/mcp/tools.py index 49f656a..8ef875c 100644 --- a/src/data_agent/mcp/tools.py +++ b/src/data_agent/mcp/tools.py @@ -168,8 +168,8 @@ async def validate_sql(sql: str, datasource: str) -> str: try: from data_agent.validators.sql_validator import ( - SQLValidator, - ValidationStatus, + SQLValidator, + ValidationStatus, ) # Get dialect from datasource config diff --git a/src/data_agent/models/__init__.py b/src/data_agent/models/__init__.py index 9492c3f..8deffa9 100644 --- a/src/data_agent/models/__init__.py +++ b/src/data_agent/models/__init__.py @@ -1,9 +1,9 @@ """State and output models for the Data Agent.""" from data_agent.models.outputs import ( - ResponseGeneratorOutput, - SQLGeneratorOutput, - SQLValidationOutput, + ResponseGeneratorOutput, + SQLGeneratorOutput, + SQLValidationOutput, ) from data_agent.models.state import AgentState, InputState, OutputState diff --git a/src/data_agent/nodes/data_nodes.py b/src/data_agent/nodes/data_nodes.py index 0bdbae8..6ffd27b 100644 --- a/src/data_agent/nodes/data_nodes.py +++ b/src/data_agent/nodes/data_nodes.py @@ -14,9 +14,9 @@ from data_agent.config import DataAgentConfig from data_agent.config_loader import SchemaFormatter from data_agent.models.outputs import ( - QueryResult, - SQLGeneratorOutput, - SQLValidationOutput, + QueryResult, + SQLGeneratorOutput, + SQLValidationOutput, ) from data_agent.utils.message_utils import get_recent_history from data_agent.utils.sql_utils import clean_sql_query diff --git a/src/data_agent/prompts/__init__.py b/src/data_agent/prompts/__init__.py index 42cdb5c..85d2c29 100644 --- a/src/data_agent/prompts/__init__.py +++ b/src/data_agent/prompts/__init__.py @@ -1,12 +1,12 @@ """Default prompts for the data agent.""" from data_agent.prompts.defaults import ( - COSMOS_PROMPT_ADDENDUM, - DEFAULT_GENERAL_CHAT_PROMPT, - DEFAULT_INTENT_DETECTION_PROMPT, - DEFAULT_RESPONSE_PROMPT, - DEFAULT_SQL_PROMPT, - VISUALIZATION_SYSTEM_PROMPT, + COSMOS_PROMPT_ADDENDUM, + DEFAULT_GENERAL_CHAT_PROMPT, + DEFAULT_INTENT_DETECTION_PROMPT, + DEFAULT_RESPONSE_PROMPT, + DEFAULT_SQL_PROMPT, + VISUALIZATION_SYSTEM_PROMPT, ) from data_agent.prompts.dialects import get_dialect_guidelines diff --git a/src/data_agent/prompts/builder.py b/src/data_agent/prompts/builder.py index 30f4d2a..5e05bb7 100644 --- a/src/data_agent/prompts/builder.py +++ b/src/data_agent/prompts/builder.py @@ -7,9 +7,9 @@ import logging from data_agent.prompts.defaults import ( - COSMOS_PROMPT_ADDENDUM, - DEFAULT_RESPONSE_PROMPT, - DEFAULT_SQL_PROMPT, + COSMOS_PROMPT_ADDENDUM, + DEFAULT_RESPONSE_PROMPT, + DEFAULT_SQL_PROMPT, ) from data_agent.prompts.dialects import get_dialect_guidelines from data_agent.utils.sql_utils import build_date_context diff --git a/src/data_agent/utils/__init__.py b/src/data_agent/utils/__init__.py index 635fdc6..1d05d90 100644 --- a/src/data_agent/utils/__init__.py +++ b/src/data_agent/utils/__init__.py @@ -2,9 +2,9 @@ from data_agent.utils.message_utils import get_recent_history from data_agent.utils.sql_utils import ( - build_date_context, - clean_sql_query, - pretty_sql, + build_date_context, + clean_sql_query, + pretty_sql, ) __all__ = [ diff --git a/src/data_agent/validators/__init__.py b/src/data_agent/validators/__init__.py index 492a464..09f8806 100644 --- a/src/data_agent/validators/__init__.py +++ b/src/data_agent/validators/__init__.py @@ -4,9 +4,9 @@ """ from data_agent.validators.sql_validator import ( - SQLValidator, - ValidationResult, - ValidationStatus, + SQLValidator, + ValidationResult, + ValidationStatus, ) __all__ = ["SQLValidator", "ValidationResult", "ValidationStatus"] diff --git a/tests/test_a2a.py b/tests/test_a2a.py index 0df13c8..7629d31 100644 --- a/tests/test_a2a.py +++ b/tests/test_a2a.py @@ -14,15 +14,15 @@ import httpx from a2a.client import A2ACardResolver, ClientConfig, ClientFactory from a2a.types import ( - AgentCard, - Message, - Part, - Role, - TextPart, + AgentCard, + Message, + Part, + Role, + TextPart, ) from a2a.utils.constants import ( - AGENT_CARD_WELL_KNOWN_PATH, - EXTENDED_AGENT_CARD_PATH, + AGENT_CARD_WELL_KNOWN_PATH, + EXTENDED_AGENT_CARD_PATH, ) logger = logging.getLogger(__name__) From d79cdba6724ce13421a50b591bc0d55b8de8d394 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 17:54:58 -0500 Subject: [PATCH 5/7] cleanup + small refactor in agent.py for llm --- src/data_agent/agent.py | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/src/data_agent/agent.py b/src/data_agent/agent.py index ac70d87..caa6f7c 100644 --- a/src/data_agent/agent.py +++ b/src/data_agent/agent.py @@ -11,6 +11,7 @@ from uuid import uuid4 from langchain_community.utilities.sql_database import SQLDatabase +from langchain_core.language_models import BaseChatModel from langchain_core.messages import AIMessage, HumanMessage, SystemMessage from langgraph.checkpoint.memory import InMemorySaver from langgraph.graph import END, START, StateGraph @@ -94,10 +95,16 @@ def __init__( "api_version": api_version, } - self._callback = AgentCallback(agent_name="data_agent_flow") + self._workflow_llm: BaseChatModel = get_llm( + provider="azure_openai", + azure_endpoint=azure_endpoint, + api_key=api_key, + deployment_name=deployment_name, + api_version=api_version, + ) + self._callback = AgentCallback(agent_name="data_agent_flow") self._initialize_agents() - self._graph = self._build_workflow() def _initialize_agents(self) -> None: @@ -265,28 +272,6 @@ def _build_workflow(self) -> CompiledStateGraph: agent_names = list(self.data_agents.keys()) agent_descriptions = self._agent_descriptions - # Use the first data agent's LLM config for intent detection, or defaults - if self.config.data_agents: - first_llm_cfg = self.config.data_agents[0].llm_config - llm = get_llm( - provider=first_llm_cfg.provider or "azure_openai", - azure_endpoint=self._default_llm_settings["azure_endpoint"], - api_key=self._default_llm_settings["api_key"], - deployment_name=first_llm_cfg.model - or self._default_llm_settings["deployment_name"], - api_version=first_llm_cfg.api_version - or self._default_llm_settings["api_version"], - temperature=first_llm_cfg.temperature, - ) - else: - llm = get_llm( - provider="azure_openai", - azure_endpoint=self._default_llm_settings["azure_endpoint"], - api_key=self._default_llm_settings["api_key"], - deployment_name=self._default_llm_settings["deployment_name"], - api_version=self._default_llm_settings["api_version"], - ) - # Valid intents include all agent names plus "general_chat" valid_intents = agent_names + ["general_chat"] @@ -310,7 +295,7 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: HumanMessage(content=question), ] - response = llm.invoke(messages) + response = self._workflow_llm.invoke(messages) content = response.content selected_agent = ( content.strip() @@ -337,7 +322,7 @@ def intent_detection_node(state: AgentState) -> dict[str, Any]: SystemMessage(content=system_content), HumanMessage(content=clarified_question), ] - response = llm.invoke(messages) + response = self._workflow_llm.invoke(messages) content = response.content selected_agent = ( content.strip() @@ -415,7 +400,7 @@ def query_rewrite_node(state: AgentState) -> dict[str, Any]: Respond with ONLY the rewritten question, nothing else.""" messages = [HumanMessage(content=rewrite_prompt)] - response = llm.invoke(messages) + response = self._workflow_llm.invoke(messages) content = response.content rewritten = ( content.strip() @@ -458,7 +443,7 @@ def general_chat_node(state: AgentState) -> dict[str, Any]: HumanMessage(content=question), ] - response = llm.invoke(messages) + response = self._workflow_llm.invoke(messages) content = response.content response_text = ( content.strip() From 288541cd6226723d3f01c8c91af6e018712836a4 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 18:09:25 -0500 Subject: [PATCH 6/7] refactor: streamline LLM configuration in DataAgentFlow --- src/data_agent/agent.py | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/src/data_agent/agent.py b/src/data_agent/agent.py index caa6f7c..f317384 100644 --- a/src/data_agent/agent.py +++ b/src/data_agent/agent.py @@ -88,13 +88,6 @@ def __init__( self._agent_descriptions: dict[str, str] = {} self._shared_db = shared_db - self._default_llm_settings = { - "azure_endpoint": azure_endpoint, - "api_key": api_key, - "deployment_name": deployment_name, - "api_version": api_version, - } - self._workflow_llm: BaseChatModel = get_llm( provider="azure_openai", azure_endpoint=azure_endpoint, @@ -212,25 +205,24 @@ def _create_datasource(self, name: str, ds: Any) -> Datasource | None: def _create_agent_graph(self, name: str, agent_config: DataAgentConfig) -> None: """Create the LangGraph agent for a data agent. - LLM configuration is a hybrid of YAML and default settings: - - From YAML: provider, model, api_version, temperature - - From defaults (init params): azure_endpoint, api_key + Uses the workflow LLM by default. If the agent has custom LLM settings + defined in its YAML, creates a new LLM instance. Args: name: Name of the agent. agent_config: Data agent configuration from YAML. """ llm_cfg = agent_config.llm_config - agent_llm = get_llm( - provider=llm_cfg.provider or "azure_openai", - azure_endpoint=self._default_llm_settings["azure_endpoint"], - api_key=self._default_llm_settings["api_key"], - deployment_name=llm_cfg.model - or self._default_llm_settings["deployment_name"], - api_version=llm_cfg.api_version - or self._default_llm_settings["api_version"], - temperature=llm_cfg.temperature, - ) + if llm_cfg: + agent_llm = get_llm( + provider=llm_cfg.provider or "azure_openai", + deployment_name=llm_cfg.model, + api_version=llm_cfg.api_version, + temperature=llm_cfg.temperature, + ) + else: + agent_llm = self._workflow_llm + self.data_agents[name] = create_data_agent( llm=agent_llm, datasource=self.datasources[name], From 767565f3ff285aef1471594c85bffcb9ac06b936 Mon Sep 17 00:00:00 2001 From: eosho Date: Wed, 14 Jan 2026 18:16:29 -0500 Subject: [PATCH 7/7] feat: add DEFAULT_QUERY_REWRITE_PROMPT for enhanced query clarity --- src/data_agent/agent.py | 27 ++++++--------------------- src/data_agent/prompts/__init__.py | 2 ++ src/data_agent/prompts/defaults.py | 23 +++++++++++++++++++++++ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/data_agent/agent.py b/src/data_agent/agent.py index f317384..f0db36b 100644 --- a/src/data_agent/agent.py +++ b/src/data_agent/agent.py @@ -36,6 +36,7 @@ from data_agent.prompts.defaults import ( DEFAULT_GENERAL_CHAT_PROMPT, DEFAULT_INTENT_DETECTION_PROMPT, + DEFAULT_QUERY_REWRITE_PROMPT, ) from data_agent.utils.callbacks import AgentCallback from data_agent.utils.message_utils import get_recent_history @@ -369,27 +370,11 @@ def query_rewrite_node(state: AgentState) -> dict[str, Any]: content = getattr(msg, "content", str(msg))[:500] conversation_context += f"- {msg_type}: {content}\n" - rewrite_prompt = f"""You are a query rewriter. Your job is to rewrite user questions to be more specific and clear for a database query system. - -## Target Agent -{agent_desc} - -## Conversation Context -{conversation_context} - -## Instructions -1. Keep the original intent of the question -2. If this is a follow-up question (e.g., "what's the average?", "show me the same for X", "filter those by Y"), use the conversation history to expand the question with the relevant context -3. For follow-up questions, make the implicit references explicit (e.g., "What's the average?" → "What is the average transaction amount?" if previous query was about transactions) -4. Make the question more specific if needed -5. If the question is already clear and specific, return it unchanged -6. Do NOT add information that wasn't implied by the original question or conversation - -## Original Question -{question} - -## Rewritten Question -Respond with ONLY the rewritten question, nothing else.""" + rewrite_prompt = DEFAULT_QUERY_REWRITE_PROMPT.format( + agent_description=agent_desc, + conversation_context=conversation_context, + question=question, + ) messages = [HumanMessage(content=rewrite_prompt)] response = self._workflow_llm.invoke(messages) diff --git a/src/data_agent/prompts/__init__.py b/src/data_agent/prompts/__init__.py index 85d2c29..b8b41f7 100644 --- a/src/data_agent/prompts/__init__.py +++ b/src/data_agent/prompts/__init__.py @@ -4,6 +4,7 @@ COSMOS_PROMPT_ADDENDUM, DEFAULT_GENERAL_CHAT_PROMPT, DEFAULT_INTENT_DETECTION_PROMPT, + DEFAULT_QUERY_REWRITE_PROMPT, DEFAULT_RESPONSE_PROMPT, DEFAULT_SQL_PROMPT, VISUALIZATION_SYSTEM_PROMPT, @@ -14,6 +15,7 @@ "COSMOS_PROMPT_ADDENDUM", "DEFAULT_GENERAL_CHAT_PROMPT", "DEFAULT_INTENT_DETECTION_PROMPT", + "DEFAULT_QUERY_REWRITE_PROMPT", "DEFAULT_RESPONSE_PROMPT", "DEFAULT_SQL_PROMPT", "VISUALIZATION_SYSTEM_PROMPT", diff --git a/src/data_agent/prompts/defaults.py b/src/data_agent/prompts/defaults.py index cb71fba..cf10879 100644 --- a/src/data_agent/prompts/defaults.py +++ b/src/data_agent/prompts/defaults.py @@ -32,6 +32,29 @@ - Guide users toward asking data-related questions. """ +DEFAULT_QUERY_REWRITE_PROMPT = """You are a query rewriter. Your job is to rewrite user questions to be more specific and clear for a database query system. + +## Target Agent +{agent_description} + +## Conversation Context +{conversation_context} + +## Instructions +1. Keep the original intent of the question +2. If this is a follow-up question (e.g., "what's the average?", "show me the same for X", "filter those by Y"), use the conversation history to expand the question with the relevant context +3. For follow-up questions, make the implicit references explicit (e.g., "What's the average?" → "What is the average transaction amount?" if previous query was about transactions) +4. Make the question more specific if needed +5. If the question is already clear and specific, return it unchanged +6. Do NOT add information that wasn't implied by the original question or conversation + +## Original Question +{question} + +## Rewritten Question +Respond with ONLY the rewritten question, nothing else. +""" + DEFAULT_SQL_PROMPT = """You are a SQL expert. Generate a syntactically correct SQL query. Limit results to 10 unless specified. Only select relevant columns.

-QgyTcd~ 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