📁 File Structure
projects/sme-business-advisor/
├── main.py— FastAPI server + Google ADK agent + 6 analysis tools
├── index.html— Chat interface (demo page)
├── dataset.csv— E-commerce dataset (34,500 orders, 17 columns)
├── requirements.txt— Python dependencies
├── Dockerfile— Container config for Cloud Run
└── deploy.sh— One-command Cloud Run deployment
🔑 Key Code: Agent Setup (main.py)
The Google ADK agent is created with 6 specialized analysis tools. Each tool reads from the dataset and returns structured insights. The agent uses Gemini 2.0 Flash to interpret user questions and call the right tool.
from google.adk.agents import Agent
from google.adk.runners import Runner
agent = Agent(
model="gemini-2.0-flash",
name="sme_advisor",
instruction=SYSTEM_PROMPT,
tools=[sales_analysis, profit_analysis, discount_analysis,
return_analysis, customer_segments, delivery_analysis],
)
runner = Runner(
agent=agent,
app_name="sme_advisor_app",
session_service=session_service,
)
🔑 Key Code: Sales Analysis Tool
Each tool follows the same pattern: accept optional filters (category, region), query the dataset, and return a structured summary. The agent decides which tool to call based on the user's question.
def sales_analysis(category: str = "", region: str = "") -> dict:
"""Analyze sales performance by category and/or region.
Returns total_revenue, total_orders, and avg_order_value."""
df = pd.read_csv("dataset.csv")
if category:
df = df[df["Category"] == category]
if region:
df = df[df["Region"] == region]
total_revenue = float(df["Sales"].sum())
total_orders = len(df)
avg_order_value = float(df["Sales"].mean())
return {
"total_revenue": round(total_revenue, 2),
"total_orders": total_orders,
"avg_order_value": round(avg_order_value, 2),
"filters_applied": {"category": category, "region": region}
}
📦 Dependencies (requirements.txt)
google-adk
google-genai
fastapi
uvicorn
pandas