PracterViews
AI Interviewer With Realistic Avatar
The problem PracterViews solves
🎙️ PracterViews — AI-Powered Real-Time Interview Mentor
PracterViews — Turn your mock interviews into real recruiter conversations.
Real-time voice + talking-avatar + résumé & GitHub-aware adaptive questioning.
🔥 Key Features
- Real-time voice interview using Google Gemini Live (brain + TTS).
- Lifelike avatar: Tavus primary + Beyond Presence automatic fallback via LiveKit streaming.
- Résumé Analyzer: upload PDF → AI extracts skills/projects → asks personalized questions.
- GitHub Analyzer: paste GitHub URL → parser reads repos/README → asks repo/project-specific questions.
- Stateful interview flow: normal → resume mode → github mode → resumes normal flow seamlessly.
- Pluggable avatar: option to run local open-source talking-head (Ditto / LivePortrait) when self-hosting.
- Extensible: future integration for local emotion & tone analysis (MediaPipe + OpenSMILE).
🔍 Problem It Solves
- Students often prepare with static Q&A or videos — not realistic recruiter interactions.
- Generic mock interview platforms don’t adapt to a candidate’s actual résumé or code.
- Paid avatar services (Tavus) can stop mid-session due to credits, breaking the experience.
PracterViews addresses these by providing:
- Adaptive, résumé- and GitHub-aware questioning.
- Real-time voice + visual interviewer presence.
- Automatic avatar fallback so interviews never stop.
🧰 Tech Stack
- AI / Brain: Google Gemini Live (responses + audio)
- Backend: Python — FastAPI, async WebSocket handlers
- Real-time media: LiveKit (WebRTC)
- Avatars: Tavus (primary), Beyond Presence (fallback) — optional local Ditto/LivePortrait
- Frontend: React (LiveKit SDK), React Dropzone for uploads
- Parsing / Tools: PyMuPDF (PDF), GitHub REST API, Whisper (optional local STT)
- Local emotion/tone (planned): MediaPipe + OpenSMILE / pyannote
🛠️ Installation (Dev / Local)
Tested on Linux / Windows. For local Ditto (talking-head) runs, GPU (NVIDIA RTX 20xx/30xx/40xx) recommended.
Prereqs
- Node >= 16
- Python >= 3.10
- FFmpeg installed & on PATH
- (Optional GPU) NVIDIA drivers + CUDA + cuDNN for local Ditto/LivePortrait
Clone
git clone https://github.com/ash-echo/PracterViews-AI-Interviewer cd PracterViews-AI-Interviewer
Challenges we ran into
The Problem It Solves
🎯Mock interviews feel fake — real interviews are personal
Most students practice using:
- ❌ Generic question banks
- ❌ Random YouTube videos
- ❌ Static MCQ-based mock tests
- ❌ Chatbots that do not adapt
- ❌ Platforms that ignore your résumé and GitHub
These tools fail to replicate an actual recruiter who:
- Reads your resume
- Analyzes your projects
- Asks personalized questions
- Evaluates how you speak
- Responds to your answers
- Follows up intelligently
🔥 Our Solution
We built a real-time AI Interviewer that feels like a human recruiter:
- 🎙️ Live voice conversation powered by Gemini
- 🧑💼 Realistic AI avatar with Tavus (with Beyond Presence fallback)
- 📄 Résumé Analyzer — upload your resume, get personalized questions
- 💻 GitHub Analyzer — paste your GitHub link, AI reads repos & asks project-based questions
- 🧠 Adaptive interviewing — AI asks follow-ups based on your answers
- 🔄 Stateful interview flow — smooth transitions between modes
⭐ Why It Matters
Students gain:
- Realistic interview experience
- Personalized technical questions
- Confidence in communication
- Exposure to real recruiter behavior
- In-depth project-based questioning
This transforms mock interviews into real, human-like interview simulations.
🛠️ Challenges I Ran Into
⚠️ 1. Tavus Avatar Credits Running Out
Tavus consumes credits quickly, causing interviews to crash mid-session.
💡 Solution
A smart fallback:
If Tavus fails → automatically switch to Beyond Presence without interrupting the interview.
⚠️ 2. Managing Multi-Mode Interview Flow
Interview had different states:
- Normal questions
- Resume questions
- GitHub questions
- Returning back to normal mode
Unmanaged flow → mixed/random questions.
💡 Solution
We built a state machine:
normal → resume_mode → normal → github_mode → normal
yaml
Copy code
This makes the AI behave exactly like a structured professional interviewer.
⚠️ 3. Parsing Complex Résumés
PDF résumés often had:
- Multi-column layouts
- Scanned images
- Unextractable text
💡 Solution
A hybrid PDF parser:
- 📝 Local text extraction
- 🤖 Fallback to Gemini Document AI for OCR & parsing
Guarantees reliable résumé understanding.
⚠️ 4. Inconsistent GitHub Repositories
Common problems:
- Empty repos
- No README
- Dead projects
- Too many repos
💡 Solution
Filtering by:
- Recency
- README existence
- Language relevance
- Project quality
Then summarizing repos before sending to AI.
⚠️ 5. Keeping the AI in Interviewer Mode
LLMs naturally:
- Over-explain
- Act like teachers
- Break character
💡 Solution
A strict system prompt enforcing recruiter behavior:
- Ask one question at a time
- Never explain concepts
- Never break character
- Natural follow-ups only
⚠️ 6. Real-Time Avatar + Audio Sync
Gemini → Avatar → LiveKit syncing was difficult at first.
💡 Solution
Used:
- Buffered audio streams
- Async response handling
- Retry & auto-fallback logic
Now it's smooth & real-time.
Technologies used

