<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ronit Solanki</title>
    <description>The latest articles on DEV Community by Ronit Solanki (@ronit_solanki).</description>
    <link>https://dev.to/ronit_solanki</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4153026%2F30698017-f96d-4793-83d4-64e2681390d6.jpg</url>
      <title>DEV Community: Ronit Solanki</title>
      <link>https://dev.to/ronit_solanki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ronit_solanki"/>
    <language>en</language>
    <item>
      <title>VaultExam AI: Mock Tests from Your Notes, Without Uploading Them Anywhere</title>
      <dc:creator>Ronit Solanki</dc:creator>
      <pubDate>Sat, 17 Oct 2026 23:40:09 +0000</pubDate>
      <link>https://dev.to/ronit_solanki/vaultexam-ai-mock-tests-from-your-notes-without-uploading-them-anywhere-1kph</link>
      <guid>https://dev.to/ronit_solanki/vaultexam-ai-mock-tests-from-your-notes-without-uploading-them-anywhere-1kph</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;VaultExam AI is a 100% local, privacy-first tool that turns a chapter (In any format) into a ready-to-print question paper + answer key and lets you ask questions of the same document with page-cited answers.&lt;/p&gt;

&lt;p&gt;Who would pay for it: independent coaching institutes, test-prep tutors, university professors and corporate trainers. Their curated notes and question banks are their intellectual property, and they don't want to upload them to a cloud API. They also spend hours every week typing up mock tests, DPPs and Set A/B variations by hand.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload Notes in any format. It is chunked and embedded locally, and the file is deleted from disk straight after ingestion.&lt;/li&gt;
&lt;li&gt;Ask the document: answers come only from your notes, with Page citations.&lt;/li&gt;
&lt;li&gt;Generate an exam: choose the institute name, exam type (Coaching Mock Test, University Mid-Sem, Corporate SOP Quiz), difficulty (Recall, Application, Analytical/Edge Cases) and the number of MCQs, short answers and long answers.&lt;/li&gt;
&lt;li&gt;Set A/B/C: each set draws on different parts of the document and avoids repeating earlier questions.&lt;/li&gt;
&lt;li&gt;Answer key included: MCQ answers with explanations, model answers for short and long questions, marking-scheme key points, and the source page for every question so a teacher can verify it.&lt;/li&gt;
&lt;li&gt;Print or save as PDF straight from the browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifewhp5fnwtcan713z3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifewhp5fnwtcan713z3l.png" alt=" " width="799" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe3ifuhjmu6840752j68t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe3ifuhjmu6840752j68t.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fokouh0oesziqzsuq3qas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fokouh0oesziqzsuq3qas.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ronitsolanki-01/VaultExam.git" rel="noopener noreferrer"&gt;https://github.com/ronitsolanki-01/VaultExam.git&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Everything runs on the user's own machine. No cloud calls, no per-token fees.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend: Java 21, Spring Boot 4.1.1 and Spring AI 2.0.1&lt;/li&gt;
&lt;li&gt;LLM: an open-weight model (qwen3.5:4b) served by local Ollama&lt;/li&gt;
&lt;li&gt;Embeddings: &lt;code&gt;nomic-embed-text&lt;/code&gt; via Ollama&lt;/li&gt;
&lt;li&gt;Vector store: PostgreSQL with PGVector (pgvector/pgvector:pg16 via Docker Compose), with metadata filtering by &lt;code&gt;document_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ingestion: Spring AI's &lt;code&gt;TikaDocumentReader and PagePdfDocumentReader&lt;/code&gt; keeps page number on every chunk, then &lt;code&gt;TokenTextSplitter&lt;/code&gt; chunks it&lt;/li&gt;
&lt;li&gt;Frontend: one Next.js page (TypeScript, Tailwind), with window.print() for output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How the exam generator works: it retrieves a sample of chunks from the document, asks the model for MCQs, short answers and long answers in separate structured-output calls, then validates each result (question count, exactly four options, valid answer index) and retries if the local model returns bad JSON. Each set uses a different seeded sample of the document, plus a "don't repeat these questions" list.&lt;/p&gt;

&lt;p&gt;Things that bit me on a small local model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning models like &lt;code&gt;qwen3.5&lt;/code&gt; can spend their whole token budget "thinking" and return an empty answer, which breaks JSON parsing. I fixed it by disabling thinking in the Ollama options.&lt;/li&gt;
&lt;li&gt;Ollama's default context window silently truncates long RAG prompts, so I set a larger &lt;code&gt;num-ctx&lt;/code&gt; and tuned how many chunks each call retrieves.&lt;/li&gt;
&lt;li&gt;Small models sometimes return a bare JSON array instead of an object, so the parsing and validation code handles that and retries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A closed API would have made this product impossible to sell to its target customers. A coaching institute's notes are its business, and "send your question bank to a third party" is a dealbreaker.&lt;/p&gt;

&lt;p&gt;Open-weight models let the whole pipeline run inside the customer's own machine. That also changes the economics: generating a hundred papers costs electricity, not tokens, so a tutor can regenerate Set B at 11pm without watching a bill. And because the stack is open, institutes can swap the model for a bigger one as their hardware allows.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>java</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
