Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎯 ARIA β€” AI Readiness Interview Agent

Your Personal AI-Powered Mock Interview Coach

IBM watsonx FastAPI Streamlit Python Meta Llama License

IBM SkillsBuild Γ— AICTE Internship 2026 β€” Problem Statement #22


"Don't just prepare for interviews β€” simulate them with AI."


πŸ“Œ Table of Contents


πŸ€– About ARIA

ARIA (AI Readiness Interview Agent) is an intelligent conversational agent that conducts full end-to-end mock interviews for job seekers targeting top IT companies like TCS, Infosys, Wipro, Accenture, and Cognizant.

Unlike generic Q&A tools, ARIA runs a complete structured interview across three rounds, scores every answer in real-time, adapts difficulty as you progress, and hands you a personalised Final Report Card with a 7-day study roadmap β€” all powered by Meta Llama 3.3 70B Instruct via IBM watsonx.ai.

Now with Resume-Aware Interviews β€” upload your PDF/DOCX resume once and ARIA will ask questions directly tied to your real projects, skills, and achievements.


🎬 Demo

πŸŽ₯ Demo Video

Watch Demo


✨ Features

Feature Description
🎯 Role-Based Questions Tailored questions for any IT role and target company
πŸ“„ Resume-Aware Interviews Upload your PDF/DOCX/TXT resume β€” ARIA asks about your real projects, skills & achievements
πŸ“Š Real-Time Evaluation Score (X/10) + concise feedback after every answer
πŸ’‘ Confidence Tracking Measures confidence growth from start to finish
πŸ”„ Adaptive Difficulty Questions get progressively harder as you perform better
πŸŽ™οΈ Voice Input Speak your answers using your microphone (Chrome/Edge)
πŸ“‹ Final Report Card Overall scores, top strengths, improvement areas + Resume Alignment score
πŸ—ΊοΈ 7-Day Study Roadmap Personalised preparation plan based on your performance
πŸ’¬ Multi-Turn Chat Natural conversational interview flow β€” no forms or dropdowns
🏒 Multi-Company Support TCS, Infosys, Wipro, Accenture, Cognizant and more
⚑ Token-Optimised Server-side session store β€” flat token cost regardless of interview length

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    User (Browser)                        β”‚
β”‚           Chrome / Edge  (voice input supported)         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Streamlit Frontend  (app.py Β· :8501)           β”‚
β”‚                                                          β”‚
β”‚  β€’ Chat UI β€” displays messages                           β”‚
β”‚  β€’ Voice widget β€” Web Speech API (browser-native STT)    β”‚
β”‚  β€’ Resume uploader β€” PDF / DOCX / TXT (optional)         β”‚
β”‚  β€’ Sends only: { session_id, message }                   β”‚
β”‚    ↳ NO conversation history in the HTTP body            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚  POST /chat        { session_id, message }
                          β”‚  POST /session/new
                          β”‚  POST /resume/upload { session_id, file }
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           FastAPI Backend  (main.py Β· :8000)             β”‚
β”‚                                                          β”‚
β”‚  β€’ Server-side session store  (_SESSIONS dict)           β”‚
β”‚    ↳ { history: [...], resume_digest: str | None }       β”‚
β”‚  β€’ Resume parser β€” PyMuPDF (PDF) + python-docx (DOCX)    β”‚
β”‚  β€’ One-shot digest call β†’ compact ~120-word summary      β”‚
β”‚  β€’ History trimming + dynamic token budget               β”‚
β”‚  β€’ ARIA system prompt engine (digest injected when set)  β”‚
β”‚  β€’ Background model warmup at startup                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚  ibm-watsonx-ai SDK
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           IBM watsonx.ai                                 β”‚
β”‚           Meta Llama 3.3 70B Instruct                    β”‚
β”‚           (Free Lite tier β€” Dallas region)               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key design decision β€” server-side sessions: The frontend never sends conversation history. Only session_id + message travels over HTTP. The backend holds all history, trims it to a rolling window, and sends a fixed-size context to the LLM β€” keeping input token cost flat at every turn of the interview.

Resume design decision β€” one-shot digest: The raw resume is never stored or re-sent. One LLM call converts it to a ~120-word structured digest on upload. That digest (~130 tokens) is injected into the system prompt on every subsequent call β€” keeping the per-call overhead flat and the raw file off the wire entirely.


πŸ› οΈ Tech Stack

Layer Technology Purpose
LLM Meta Llama 3.3 70B Instruct Interview agent brain β€” question generation, scoring, report card
LLM Platform IBM watsonx.ai Hosted inference, API access, token usage tracking
Backend FastAPI + Uvicorn REST API, session management, prompt engineering
Frontend Streamlit Chat UI, sidebar controls, real-time display
Voice Input Browser Web Speech API Microphone-to-text (zero external dependencies)
Resume Parsing PyMuPDF + python-docx Extract text from PDF and DOCX resumes
SDK ibm-watsonx-ai Official Python SDK for watsonx.ai model calls
Language Python 3.10+ Core language
HTTP Client requests Frontend β†’ Backend API calls

🀝 AI Tools Used in Building ARIA

ARIA was built using a combination of human engineering and AI-assisted development:

Tool Role in This Project
IBM watsonx.ai Hosts Meta Llama 3.3 70B β€” the LLM that powers ARIA's interview agent at runtime
IBM Bob (AI Software Engineer) Used throughout development to architect, debug, and optimise the entire codebase β€” from designing the server-side session store and token budget system, to fixing prompt behaviour bugs, implementing the voice input feature, and writing all deployment configuration
Meta Llama 3.3 70B Instruct The foundation model ARIA uses to conduct interviews, score answers, and generate report cards

ARIA was designed and developed with IBM Bob as the primary engineering assistant β€” responsible for the full architecture, all code optimisations, the voice feature, and the token-reduction work that brought input cost from ~1,400 tokens/call down to ~505 tokens/call.


βš™οΈ Installation (Local)

Prerequisites

  • Python 3.10+
  • IBM Cloud account β€” free at cloud.ibm.com
  • IBM watsonx.ai project + API key
  • Chrome or Edge browser (for voice input)

Steps

# 1. Clone the repository
git clone https://github.com/yourusername/interview-trainer.git
cd interview-trainer

# 2. Create virtual environment
python -m venv ml
ml\Scripts\activate        # Windows
source ml/bin/activate     # Mac/Linux

# 3. Install dependencies
pip install -r requirements.txt

# If upgrading an existing install, add the two new resume packages:
pip install pymupdf==1.24.9 python-docx==1.1.2

# 4. Create .env from template
copy .env.example .env     # Windows
cp .env.example .env       # Mac/Linux
# Open .env and fill in your IBM credentials

Environment Variables (.env)

IBM_API_KEY=your_ibm_cloud_api_key
WATSONX_PROJECT_ID=your_watsonx_project_id
WATSONX_URL=https://us-south.ml.cloud.ibm.com

Get your credentials at:


πŸš€ Running Locally

Open two terminals (both with ml\Scripts\activate):

Terminal 1 β€” Backend:

uvicorn main:app --reload

βœ… Wait for: Application startup complete.

Terminal 2 β€” Frontend:

streamlit run app.py

βœ… Opens at http://localhost:8501

Open in Chrome or Edge for voice input support.


☁️ Deployment

ARIA has two services β€” deploy them separately:

Service File Recommended Platform
FastAPI backend main.py Render (free)
Streamlit frontend app.py Streamlit Community Cloud (free)

Render (Backend)

  1. New Web Service β†’ connect GitHub repo
  2. Build: pip install -r requirements.txt
  3. Start: uvicorn main:app --host 0.0.0.0 --port $PORT
  4. Add env vars: IBM_API_KEY, WATSONX_PROJECT_ID, WATSONX_URL
  5. Copy your service URL: https://aria-api-xxxx.onrender.com

Streamlit Community Cloud (Frontend)

  1. New app β†’ select repo β†’ main file: app.py
  2. Settings β†’ Secrets β†’ add:
API_URL = "https://aria-api-xxxx.onrender.com"

πŸ“ Project Structure

interview-trainer/
β”‚
β”œβ”€β”€ main.py                  # FastAPI backend β€” ARIA agent, session store, resume upload, LLM calls
β”œβ”€β”€ app.py                   # Streamlit frontend β€” chat UI, voice input, resume uploader
β”œβ”€β”€ watsonx_client.py        # Standalone IBM watsonx.ai smoke-test helper
β”œβ”€β”€ prompt_templates.py      # Prompt builders β€” resume digest, interview questions, difficulty
β”œβ”€β”€ sample_prompts.py        # Pre-written test conversations for 5 companies/roles
β”‚
β”œβ”€β”€ good_interview.gif       # Demo β€” high-scoring interview run
β”œβ”€β”€ bad_interview.gif        # Demo β€” weak answers with ARIA's feedback
β”‚
β”œβ”€β”€ requirements.txt         # Python dependencies (pinned)
β”œβ”€β”€ Procfile                 # Process file for Render / Railway / Heroku
β”œβ”€β”€ .env.example             # Credentials template β€” safe to commit
β”œβ”€β”€ .env                     # Your live credentials β€” NEVER commit this
β”œβ”€β”€ .gitignore               # Excludes .env, ml/, videos, logs, uploaded resumes
└── README.md                # This file

⚑ Token Optimisation

ARIA was heavily optimised to stay within IBM watsonx.ai's free Lite tier limits.

Metric Before Optimisation After Optimisation
Input tokens / call ~1,400 ~505
History payload Sent from browser (unbounded) Held server-side (fixed window)
System prompt size ~650 tokens ~200 tokens
Truncation method Character-count (inaccurate) Word-count (token-accurate)
Output budget 280 tokens (fixed) 50 / 180 / 400 (dynamic per turn)
Full session cost ~18,000 tokens ~6,500 tokens
Sessions / month (free tier) ~2–3 ~7–8

Key changes: server-side session store, compressed system prompt, word-count truncation, dynamic output caps per interview phase, background model warmup at startup.


πŸ“„ Resume Feature

ARIA supports optional resume upload to personalise the interview with questions drawn from your actual experience.

Step What happens Token cost
Upload PDF/DOCX/TXT Text extracted server-side (PyMuPDF / python-docx) 0
Digest generation ONE LLM call β†’ ~120-word structured summary ~650 input + ~150 output (once)
Per interview call Digest injected into system prompt +~130 tokens/call
Full session w/ resume ~10,200 tokens total ~4–5 sessions/month

How it works:

  1. Click πŸš€ Start New Interview β€” creates your session
  2. Upload your resume in the πŸ“„ Resume Upload sidebar section
  3. ARIA reads your Role, Experience, Skills, Projects, and Achievements from the digest
  4. Questions are drawn from both general interview knowledge AND your specific resume
  5. Final Report Card includes a Resume Alignment score β€” how well your answers matched your CV claims

Supported formats: PDF Β· DOCX Β· TXT (max ~5 pages recommended)

Resume is never stored β€” raw text is discarded after the digest is generated. Only the ~120-word summary is kept in memory for the session duration.


Built with ❀️ using Meta Llama 3.3 70B via IBM watsonx.ai

IBM SkillsBuild Built with Bob

IBM SkillsBuild Γ— AICTE Internship 2026

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages