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 six specialised agents handle it in sequence: a context agent works out what you are asking, a data cleaner checks the data quality, a prompt engineer writes precise instructions for the analyst, a senior data analyst identifies outliers and summarises findings, an output formatter shapes the result for your use case, and a QA critic rates how well the answer matched the original request — so you can see whether 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