Back
Year
2025
Tech & Technique
Python, Flask, LangChain, FAISS, Docker, GitHub Actions, Nginx, AWS EC2
Description
A custom technical mock interview platform that uses RAG (Retrieval-Augmented Generation) to quiz candidates on their actual resumes or specific study materials. Instead of using generic online questions, candidates upload a PDF (like a resume or a specific chapter), and the tool dynamically generates custom interview questions based on the candidate's background and previous answers.
Under the hood, it parses the PDF document, creates chunks, and stores semantic embeddings in a local vector store. When the interview starts, the system retrieves relevant concepts, passes them to the LLM context, and manages the session memory state using LangChain.
Under the hood, it parses the PDF document, creates chunks, and stores semantic embeddings in a local vector store. When the interview starts, the system retrieves relevant concepts, passes them to the LLM context, and manages the session memory state using LangChain.
My Role
I built the end-to-end prototype, starting with the Python/Flask backend and LangChain integration. I also handled the infrastructure setup: containerizing the app with Docker, setting up routing and rate limiting with Nginx, and automating the deployment pipeline to AWS EC2 using GitHub Actions.
System Architecture Flow
Client➔Nginx Proxy➔Flask API (LangChain)➔FAISS Vector Index➔OpenAI/Local LLM
Client ➔ Nginx (HTTPS) ➔ Flask App ➔ Search FAISS ➔ Context + Prompt ➔ LLM Query ➔ Response to Client
The Challenge
Managing session state and memory across stateless Flask API requests without hitting LLM context limit thresholds or causing response delays.
Engineered Solution
Used LangChain's conversation buffer memory to summarize long chat histories, and implemented live response streaming to the frontend so candidates don't have to wait for the entire answer to generate.