Try it!
View Live Site View on GitHub View Project Page
Hackathon code submission: backend/bots.py
Demo
Submission
CrewAI REST API Groq
Read the full write-up on Devpost
About the Project
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.
← Back to Hackathons Back to top