Thesis · 2026 · Source code ↗

EngageMind

A thesis prototype for studying with personal documents and model adapters.

A general chat model may answer a course question without using the course's definitions or lecture notes. The learner needs a way to connect answers to their material.

For my BSc thesis, I built EngageMind with document retrieval and per-user model adaptation behind the same chat interface.

Retrieval uses the learner's documents

Uploaded documents populate a FAISS index for each user. The retrieval path is scoped to that user's material.

A React interface connects to an Express authentication API and a Flask retrieval API. MongoDB stores users, documents, conversations, and training metadata.

Keeping indexes separate supports the intended access boundary. It does not, by itself, prove that every service enforces user isolation correctly.

Training runs outside the chat request

GPT-2 adaptation uses LoRA training jobs through Celery and Redis. A worker performs the training and reports status to the interface.

This separates a long training job from an HTTP request. The interface can remain responsive while the adapter is being built.

A conversation can use retrieved documents or the user's trained adapter. Supporting both paths made it possible to study them in the same application.

The prototype demonstrates an architecture

The documented checks cover API endpoint behavior, the fine-tuning contract, and security regressions. They support the implementation rather than a claim about learning outcomes.

The project explores whether per-user adaptation is useful enough to justify its additional services and training process. The portfolio does not report a measured improvement in answer quality.

It is not ready for a shared production service

The application has not been hardened for multi-tenant deployment. The services run locally, and the project does not provide a production deployment design.

Document-grounding checks reduce some unsupported answers but do not eliminate them. A retrieved passage still needs to support the answer that uses it.

All projects →