Skip to content
PracterViews

PracterViews

AI Interviewer With Realistic Avatar

Created on 10th December 2025

PracterViews

PracterViews

AI Interviewer With Realistic Avatar

The problem PracterViews solves

🎙️ PracterViews — AI-Powered Real-Time Interview Mentor

Project Status
License: MIT
Built with Gemini
LiveKit
Tavus ✓ BeyondPresence ✓

PracterViews — Turn your mock interviews into real recruiter conversations.
Real-time voice + talking-avatar + résumé & GitHub-aware adaptive questioning.


image

🔥 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.

Discussion

Builders also viewed

See more projects on Devfolio