A voice-powered news assistant that reads the latest headlines from Dawn back to you over a live voice session. You speak, it transcribes, figures out what you want, fetches from Dawn's RSS feed, and reads the answer back.
Frontend is Next.js. The agent itself is Python and runs on the LiveKit Agents framework, with Groq handling STT, LLM and TTS in a single provider.
- Frontend — Next.js 15, TypeScript, Tailwind, shadcn/ui, LiveKit React components
- Agent — Python, LiveKit Agents framework
- STT — Groq (
whisper-large-v3) - LLM — Groq (
llama-3.3-70b-versatile) - TTS — Groq TTS
- VAD — Silero
- News source — Dawn home feed (
https://www.dawn.com/feeds/home)
- User opens the web app and joins a LiveKit room.
- The Python agent joins the same room and starts listening.
- User speaks → Whisper transcribes on Groq → Llama-3.3-70b figures out intent.
- The LLM calls one of three tools:
get_latest_headlines— top N headlines from Dawn's RSSget_news_detail— title + summary for a specific headline by indexget_news_by_category— filter by Pakistan / World / Business / Sport
- Tool result gets read back over Groq TTS.
A few rails I added because the agent kept misbehaving without them:
- Headlines capped at 3 per response (longer outputs trip Groq TTS rate limits).
max_tool_steps=1so the model can't chain tool calls in one turn.- Auto-greeting on connect is disabled — the initial burst was hitting provider limits.
allow_interruptions=Falseand a 1.5smin_consecutive_speech_delayto space out TTS so playback doesn't overlap.
- Node.js 18+
- Python 3.9+
- LiveKit Cloud project (or self-hosted LiveKit server)
- Groq API key
Create .env.local in the project root with your own credentials:
LIVEKIT_URL=wss://your-livekit-url
LIVEKIT_API_KEY=your-livekit-api-key
LIVEKIT_API_SECRET=your-livekit-api-secret
GROQ_API_KEY=your-groq-api-key
NEXT_PUBLIC_APP_URL=http://localhost:3000npm install
npm run devRuns at http://localhost:3000.
In a separate terminal:
cd agent
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
pip install -r requirements.txt
python news_agent.py devOpen http://localhost:3000, click "Start listening to news", allow mic access, and try:
- "What are the top headlines?"
- "Tell me more about story 2"
- "Any world news?"
- "What's the latest business news?"
.
├── agent/
│ ├── news_agent.py # The Python agent — tools + entrypoint
│ └── requirements.txt
├── app/
│ ├── api/news/route.ts # Next API that fetches Dawn RSS for the frontend
│ └── ...
├── components/ # shadcn/ui
├── lib/
│ └── news-utils.ts # RSS parsing helpers
└── ...
The feed URL lives in two places:
lib/news-utils.ts(used by the Next API route)fetch_news()inagent/news_agent.py(used by the agent's tools)
Change both to point at any RSS feed.
MIT.