ExamPilot AI RAG Exam Prep Assistant That Cites Your Own Notes | Django Final Year Project with Source Code

ExamPilot AI RAG Exam Prep Assistant That Cites Your Own Notes | Django Final Year Project with Source Code

Upload your notes and PYQ papers, get page-cited answers, spot which topics repeat every year, and auto-generate a predicted model paper. A Django RAG final year project with full source code.

Technology Used

Python | Django | Django REST Framework | ChromaDB | Sentence-Transformers | Groq API | PyMuPDF | scikit-learn | ReportLab | Chart.js | Tailwind CSS | SQLite

codeAj
codeAjVerified
🏆5K+ Projects Sold
Google Review
4991999

Get complete project source code + Installation guide + chat support


What This Project Actually Does

ExamPilot AI is a study assistant that only knows what you feed it. You upload your unit-wise notes and your college's previous-year question papers as PDFs, and the app does four things with them: answers your questions while citing the exact page it pulled the answer from, groups reworded duplicate questions across years to show which topics your university keeps repeating, builds a predicted model paper out of those repeat topics, and writes answers sized to the marks allotted.

Here's the part that matters for your viva. This isn't a ChatGPT wrapper with a nice UI on top. If the answer isn't in your uploaded notes, the Chat module replies "Not found in your notes" instead of confidently making something up. That behaviour is enforced twice — once by a cosine-distance threshold in core/rag.py that rejects weak retrieval matches, and again by a system prompt that forbids the model from answering out of its own general knowledge. When your examiner asks "how do you stop hallucination," you have a real, specific, two-layer answer.

Your PDFs never leave your laptop either. PyMuPDF extracts the text, all-MiniLM-L6-v2 from sentence-transformers embeds it locally, and ChromaDB stores the vectors in a folder called chroma_store/ right there on disk. The only outbound network call is the final answer generation, which hits the Groq API.

Key Features

Chat with page-level citations

Ask "what is thrashing" and you get an answer plus the page numbers it came from — not a vague "according to your notes." Chunking happens per page, not across page boundaries, precisely so a citation can never point to an ambiguous location.

PYQ Pattern Analyzer

Hit "Process PYQs" and the app extracts every individual question from your uploaded papers as structured JSON (question text, marks, unit), embeds each one, and clusters them with scikit-learn's AgglomerativeClustering at a cosine distance threshold of 0.35. Questions worded three different ways across three different years land in the same cluster. Each cluster gets scored by frequency plus a recency weight with a 3-year half-life, so a topic asked twice in 2024 and 2025 outranks one asked three times back in 2015. Output is a bar chart of top topics and a stacked chart of questions per unit split by marks band, both rendered with Chart.js.

Model Paper Generator

Pick a subject, pick how many questions you want per section, and it lays out Section A (2 marks), Section B (5 marks), and Section C (10 marks) from the highest-scoring clusters. Downloadable as a PDF via ReportLab.

Marks-aware answers

Click "Get Answer" next to any generated question. A 2-mark answer comes back as a 40–50 word definition with a short example. A 10-mark answer comes back with an intro, five or six headed points, a diagram description, a conclusion, and key terms bolded. Different marks, genuinely different answer shapes — not the same paragraph padded out.

Sample dataset that works with zero API key

Run python manage.py load_sample_data and you instantly get two subjects — Operating Systems and Database Management Systems — with notes for 3 units each and five years of PYQ papers from 2021 to 2025. Real PDFs, pushed through the real ingest pipeline, embedded by the real model, clustered by the real clustering code. The analyzer dashboard and paper generator work immediately, no Groq key needed.

AJAX everywhere, no build step

Upload, chat, PYQ processing, and answer generation all run through vanilla fetch() helpers in static/js/app.js with spinners and toasts. Django views branch on the X-Requested-With header to serve either a normal page or JSON from the same URL. And there's no Node, no npm install, no webpack — Tailwind comes off the Play CDN and the design tokens live in a hand-written static/css/app.css.

Real-World Applications

The obvious one is a student prepping for university semester exams with five years of departmental papers sitting in a WhatsApp group. But the pattern goes further than that.

Coaching institutes preparing students for GATE, UGC NET, or state PSC exams can feed in their own question banks and show learners exactly where the repeat weightage sits. College departments can run it over their own paper archive to check whether their question setting has gotten predictable. Corporate L&D teams use the same retrieval-with-citations pattern for internal policy documents where a wrong answer is a compliance problem, not just a lost mark. And any team building a document Q&A tool over private data — legal, medical, HR handbooks — is building this exact architecture, just with different PDFs going in.

What's Hard About It, and What's Easier Than It Looks

The hard part is the clustering threshold. There's no formula that hands you 0.35. Set it too low and "Explain paging" and "What is paging in OS" end up in separate clusters, which wrecks your frequency counts. Set it too high and paging gets merged with segmentation and your model paper starts recommending nonsense. The reasoning behind the chosen value and the average-linkage choice is written out in full inside core/clustering.py — read that docstring before your viva, it's written to be quoted from out loud.

Now the easy part. You'd assume a RAG project means Docker, a vector DB server, a Celery worker, and a Redis instance. This one has none of that. SQLite is the database, Chroma runs in persistent local mode with no server process, ingestion runs synchronously inside the request, and the whole thing starts with python manage.py runserver. If you've built literally any Django CRUD app before, you already know 70% of the structure here. The unfamiliar bits are five or six files inside core/, and each one does exactly one thing.

Who Should Buy This

If you're a student who needs a working project for your college submission, final-year project, semester project, internship, or academic demonstration, this is for you. Whether you're studying BCA, B.Tech, MCA, M.Tech, Computer Science, IT, AI, Data Science, or another related field, you can choose a project that fits your requirements. If you need the source code, project report, documentation, or help setting up and running the project, CodeAj gives you the resources and support to get started faster.

One honest filter though. If your syllabus is strictly a web-development-only paper and your guide wants zero machine learning involved, this might be more than you were asked for. Everyone else — especially if you want something in the AI and ML final year projects space that isn't another Iris flower classifier — should be fine.

Why CodeAj

You get the complete source code, every Python module and template and migration, plus a project report written to match what Indian university departments actually ask for — abstract, literature survey, system design, ER and data flow diagrams, testing, and results. Setup support is included, so if your virtualenv refuses to activate on your college lab machine at 11 PM the night before submission, that's a fixable problem and not a disaster. You'll find more Django-based builds in our Django projects with source code collection, and if you're still comparing options, the wider Python final year projects catalog is a good place to browse before deciding.

Frequently Asked Questions

You will get the complete source code along with an installation guide and chat support to help you set up and understand the project.
All our projects are thoroughly tested multiple times, so the code is completely error-free. But in case you still face any issue, you can reach out to us on WhatsApp (+91 8603862290) and we will fix it and provide you the updated code.
You can book a 1-on-1 Setup & Explanation Session where we connect via AnyDesk and Google Meet, set up the project on your laptop, and explain the complete code working and flow.
No, you cannot re-sell the project. This is completely illegal and a violation of our terms. If we find any such activity, we will take legal action.
Mostly, yeah. Run python manage.py load_sample_data and the PYQ Analyzer dashboard plus the Model Paper Generator work completely, because the embedding and clustering both happen locally on your machine. Only Chat and Marks-Aware Answers actually need the key, and those pages show a clear message on screen instead of crashing if it's missing. The key is free and takes maybe two minutes to create at console.groq.com, so there's no real reason to skip it before your demo.
Your own papers are the whole point. Create a subject, upload your notes tagged by unit and your PYQ papers tagged by year, then hit Process PYQs. Five years of papers gives the clustering enough signal to find real patterns. Three years still gives you something usable, just with less confidence in the scores. The sample dataset exists so the app isn't empty on first run, not because it's locked to those two subjects.
Because string matching breaks instantly. "Explain paging in OS" and "Write a short note on paging" are the same question with almost no shared structure, so exact matching counts them as two separate topics and your entire frequency analysis becomes garbage. Embedding both questions and clustering on cosine distance catches that semantic match. The full reasoning for why the threshold is 0.35 and why average linkage was chosen over complete linkage sits in the docstring of core/clustering.py — read it out loud a couple of times before the viva.
No. PDF text extraction, chunking, embedding and vector storage all run on your own machine. The embedding model, all-MiniLM-L6-v2, downloads once at around 90 MB and then works offline permanently. The only thing that crosses the network is the small retrieved chunk of text sent to Groq to phrase the final answer. If your guide asks about data privacy, this is a good thing to point at.
Not in their current state. If a PDF is basically a photograph of a page with no text layer underneath, you'll see a "No extractable text found" message, because OCR was deliberately kept out of scope. Push those files through any free OCR tool first, or grab the digital versions if your department publishes them. Bolting on OCR is actually a decent extension if your guide is pushing you to add something original.
Roughly fifteen minutes, and most of that is pip downloading packages and the one-time embedding model download. No Docker, no separate database server, no npm install — SQLite handles the database and Chroma runs in local persistent mode with no server process. Fewer moving parts means fewer things that can break at 2 AM. And setup support is included, so if your virtualenv refuses to activate, that's a message away from being fixed.
The report is included, structured the way Indian university departments actually want it: abstract, literature survey, system design with ER and data flow diagrams, module descriptions, testing and results. You'll obviously edit in your own name, college, guide and roll number. Read it fully before submitting though. Your viva questions come out of that document more often than out of the code.
Show them the refusal behaviour. A wrapper will answer anything you ask it. This one returns "Not found in your notes" when the closest match in Chroma sits above the cosine distance threshold, and the Chat system prompt separately forbids the model from answering from its own general knowledge — two independent guards, one in code and one in the prompt. Then point at the PYQ Analyzer, where the clustering, the recency-weighted scoring and the paper generation involve no LLM whatsoever beyond the initial question extraction step.
Installation Guide

Extra Add-Ons Available – Elevate Your Project

Add any of these professional upgrades to save time and impress your evaluators.

Live 1-on-1 Mentorship

Personal session with an expert developer

Project Setup

We'll install and configure the project on your PC via remote session (Google Meet, Zoom, or AnyDesk).

Source Code Explanation

1-hour live session to explain logic, flow, database design, and key features.

Want to know exactly how the setup works? Review our detailed step-by-step process before scheduling your session.

999

Custom Documents (College-Tailored)

  • Custom Project Report: ₹1,500
  • Custom Research Paper: ₹1,000
  • Custom PPT: ₹800

Fully customized to match your college format, guidelines, and submission standards.

Project Modification

Need feature changes, UI updates, or new features added?

Charges vary based on complexity.

We'll review your request and provide a clear quote before starting work.

Project Files

GoogleReviews

What Our Students Say

4.9(38+ reviews)
Google review 1
Google review 2
Google review 3
Google review 4
Google review 5
Google review 6
Google review 7
Google review 8
Google review 9
Google review 10
Google review 11
Google review 12
Google review 13
Google review 14
Google review 15
Google review 16
Google review 17
Google review 18
Google review 19
Google review 20
Google review 21
Google review 22
Google review 23
Google review 24
Google review 25
Google review 26
Google review 27
Google review 28
Google review 29
Google review 30
Google review 31
Google review 32
Google review 33
Google review 34
Google review 35
Google review 36
Google review 37
Google review 38
⭐ 98% SUCCESS RATE
  • Full Development
  • Documentation
  • Presentation Prep
  • 24/7 Support