Watch AI outperform traditional 5G network allocation in real time.
NetPulse AI is a full-stack 5G bandwidth allocation simulator that runs three strategies — a traditional equal-split baseline, an AI weighted-priority allocator, and a reinforcement-learning Multi-Armed Bandit — against identical traffic demands and streams the comparison to your browser in real time. Every 50 simulation ticks, a Groq-hosted Llama 3.3-70B model evaluates the current network state and adjusts the AI allocator's priorities, narrating its reasoning in plain English. The result is a live, measurable demonstration that AI allocation produces consistently higher QoS scores than the baseline — visible within seconds of starting a simulation.
Live demo → netpulseai.tanisheesh.in API docs → netpulseai.onrender.com/docs
- Three-way live comparison — Baseline, AI, and RL allocators run against the same tick-by-tick traffic demands; charts update every 100 ms over WebSocket.
- Groq-powered explainability — Llama 3.3-70B evaluates network state every 5 seconds and tells you exactly why it shifted bandwidth priorities between gaming, video, VoIP, and IoT traffic.
- RL that visibly learns — an epsilon-greedy Multi-Armed Bandit starts exploring and converges toward optimal weights over hundreds of ticks; you can watch its Q-values stabilise in the stats panel.
- Simulation history and replay — every run is persisted to Supabase; you can replay any past session tick-by-tick or export it as CSV/JSON.
| Layer | Tech |
|---|---|
| Frontend | Next.js (App Router, TypeScript) · Tailwind CSS |
| Backend | Python 3.11 · FastAPI 0.115 · uvicorn |
| Real-time | WebSocket (FastAPI native) — 100 ms tick broadcast |
| AI | Groq API — Llama 3.3-70B-Versatile |
| RL | NumPy — Multi-Armed Bandit (epsilon-greedy, no ML framework) |
| Database | Supabase PostgreSQL — optional, graceful degradation |
| Hosting | Vercel (frontend) · Render (backend) |
Why one shared traffic snapshot per tick? The comparison only means something if all three allocators face identical inputs. Separate demand generation would let randomness masquerade as strategy quality. One snapshot per tick is the controlled-experiment approach.
Why Groq async, not blocking the tick loop? Groq's median response time is 1–3 seconds. Awaiting it inside a 100 ms loop would freeze the simulation. The Groq call fires asynchronously every 50 ticks; the result updates the AI allocator's weights when it lands, independently of the loop clock.
Why Multi-Armed Bandit over DQN? A bandit converges visibly within a few hundred ticks — fast enough to show learning in a live demo. A DQN would need a replay buffer, state representation design, and a neural network, adding complexity with no visible payoff for a demonstration. NumPy-only also means zero heavy-ML dependencies.
What would I do differently in v2? Sign session tokens with JWTs instead of bare UUID headers (currently session IDs are opaque — anyone who guesses one can view that session's metrics). Also move off Render's free tier to eliminate the 30–60 s cold-start delay, which is the largest UX friction point for first-time visitors.
| Document | Description |
|---|---|
| PRD | Product requirements — goals, user stories, non-goals |
| Architecture | System design, data flow, component breakdown |
| Decisions | Every major technical decision and why |
| Setup | Local dev setup, env vars, deployment |
Tanish Poddar — tanisheesh.in · LinkedIn · GitHub
