What it does: Upload a data file through the React frontend. It gets pushed to a CrewAI backend on HuggingFace where four specialised agents process it in sequence — a context agent figures out what you want, a prompt engineer writes precise instructions, a senior data analyst identifies outliers and summarises findings, and an output agent formats the result and rates how well it matched your original request.
How it was built: React + Vite frontend hosted on Vercel, connected via REST API to a CrewAI backend on HuggingFace. LLMs sourced through OpenRouter's free tier with a model rotation fallback in backend/bots.py — when one model hits rate limits, the system automatically switches to the next available provider.
Why it exists: Built to understand how agentic frameworks like CrewAI work under the hood — and to make multi-step data analysis accessible without needing to write code.
How the Agents Work
Data Analyst AI Agents — CrewAI Pipeline
══════════════════════════════════════════
┌─────────────────────────────────────────┐
│ User Upload (React + Vite) │
│ Vercel frontend │
└──────────────────┬──────────────────────┘
│ REST API (async)
▼
┌─────────────────────────────────────────┐
│ CrewAI Backend (HuggingFace) │
│ │
│ 1. Context Agent │
│ rewrites request into a precise, │
│ unambiguous directive │
│ │ │
│ ▼ │
│ 2. Prompt Engineer │
│ builds step-by-step instructions │
│ tailored to the data and goal │
│ │ │
│ ▼ │
│ 3. Senior Data Analyst │
│ reads file, flags outliers, │
│ summarises findings │
│ │ │
│ ▼ │
│ 4. Output Formatter │
│ enforces JSON schema, picks │
│ chart type, rates answer quality │
└──────────────────┬──────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Structured result + quality rating │
│ (bar / line / pie chart or report) │
└─────────────────────────────────────────┘
LLMs: OpenRouter free tier · Groq fast pool with fallback rotation
bots.py handles rate limits with per-model cooldown tracking — when one provider fails, the pipeline automatically retries on the next.
Dev Notes
Tech Stack
React + Vite (Vercel), Python + CrewAI (HuggingFace), REST API, OpenRouter free LLMs with Groq fast pool and automatic fallback rotation in backend/bots.py.
Hardest Part
API keys maxing out constantly during testing. LLM models erroring despite correct OpenRouter calls — flaky free-tier availability made debugging slow and unpredictable.
What I Learned
CrewAI manages agentic workflows cleanly when the prompts are precise. The hard part isn't wiring the agents — it's writing instructions specific enough that each agent stays in its lane.