Inspiration: My dad uses
AI constantly to analyse data — and it made me realise I'd never tried to
build something that actually solved a data problem end-to-end. That gap,
plus wanting to understand how tools like CrewAI work under the hood, drove
this project. Building it taught me more about agentic systems than using
them ever did.
What it does: You upload
a data file through the React frontend. It gets pushed to a CrewAI backend
hosted on HuggingFace, where four specialised agents handle it in sequence:
a context agent figures out what you want, a prompt engineer writes precise
instructions for the analyst, a senior data analyst identifies outliers and
summarises findings, and an output agent formats the result and rates how
well the response matched the original request — so you can see if the
agents actually answered your question.
How it was built: React +
Vite frontend hosted on Vercel, a REST API connecting it to the backend via
async functions, and CrewAI managing the agent pipeline on HuggingFace.
LLMs sourced through OpenRouter's free tier with a model rotation fallback
in backend/bots.py to handle rate limits across providers.
Challenges: LLM models
kept erroring despite correct OpenRouter calls. Deep agent reasoning made
testing slow. API keys maxed out constantly during development — there were
moments where pivoting felt like the only option.
What I learned: CrewAI is
a genuine game-changer for agentic workflows. I've started integrating it
into other repos. The hardest part wasn't the agents — it was writing
prompts precise enough that the agents didn't go off-track mid-pipeline.
What's next: Using this
as the data processing backbone for PhysTech 2026 and integrating it into
major GitHub repos for clustering and growth analysis.
Agent Pipeline
Data Analyst AI Agent — CrewAI Pipeline
══════════════════════════════════════════
┌─────────────────────────────────────────┐
│ User Upload (Frontend) │
│ React + Vite · Vercel │
└──────────────────┬──────────────────────┘
│ REST API (async)
▼
┌─────────────────────────────────────────┐
│ CrewAI Backend (HuggingFace) │
│ │
│ 1. Context Agent │
│ rewrites user request into a │
│ precise, unambiguous directive │
│ │ │
│ ▼ │
│ 2. Prompt Engineer │
│ builds step-by-step instructions │
│ for the data analyst │
│ │ │
│ ▼ │
│ 3. Senior Data Analyst │
│ reads file, identifies outliers, │
│ summarises findings │
│ │ │
│ ▼ │
│ 4. Output Formatter │
│ enforces JSON schema, selects │
│ chart type, rates answer quality │
└──────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Structured Result │
│ chart / report + quality rating │
└─────────────────────────────────────────┘
LLMs: OpenRouter free tier (Groq fast pool + fallback rotation)
Core logic: backend/bots.py
Rate limits handled by bots.py: per-model cooldown tracking with automatic fallback across provider tiers.
Dev Notes
Tech Stack
React + Vite (Vercel), Python + CrewAI (HuggingFace), REST API, OpenRouter free LLMs. Rate-limit rotation logic in backend/bots.py.
Hardest Part
API keys maxing out during testing with no time to pivot. Also: LLM errors that weren't caused by incorrect API calls — just flaky free-tier model availability.
What I'd Do Differently
Set up model rotation from day one instead of treating it as a fix. Testing multi-agent pipelines is expensive — mock the LLM calls for unit testing and only hit real APIs for integration tests.