A séance that refuses to make things up: an open-model archive that cites its sources A developer built InfoMind AI Enterprise, an open-source retrieval-augmented document archive that answers questions only from uploaded documents and returns the exact source passages, refusing to answer when evidence is insufficient. The system, built with React, FastAPI, PostgreSQL, Qdrant and Ollama, uses a small scikit-learn model to suggest document categories with uncertain cases routed to human review. Swapping the default llama3.2:3b model for llama3.1:8b via a single environment variable raised correct answers on a test question from 0 out of 5 to 10 out of 10, with the project's evaluation scoring 4/4 answerable questions answered and 3/3 unanswerable ones refused. This is my submission for the Hacktoberfest Open-Source AI Challenge: Week 4, "Ghost in the Machine" https://dev.to/challenges/hacktoberfest-week4-2026-10-26 . InfoMind AI Enterprise is a document archive that answers back, and only with what the archive actually says. You upload documents PDF, Word, Excel, CSV, text . InfoMind cuts them into passages, indexes them for keyword and meaning-based search, suggests a category for each with a small scikit-learn model uncertain cases go to a human reviewer , and lets you ask questions. Every answer arrives with the exact passages it came from. If the documents do not contain the answer, it says so: "The available documents do not contain sufficient evidence to answer this question reliably." I built it during the challenge window first commit 28 October 2026 as a full-stack project: React and TypeScript on the front, FastAPI and PostgreSQL behind it, Qdrant for vectors, and Ollama for the language model. The theme asks for something spooky, or something that honours the past. The thing that haunts every AI assistant is the confident answer from nowhere: a ghost in the machine that says things nobody ever wrote. I wanted the opposite, a medium at a séance who only repeats what the dead actually said, and who goes quiet when there is nothing to hear. An archive is how we honour the past, and an archive you cannot trust is worse than none. So InfoMind treats "I have no evidence for that" as a feature, not a failure. A fair disclaimer: my demo documents are synthetic office files policies, a backup runbook, a purchase order , not family letters. The engine works on any text, but I did not build a themed collection in time, and I would rather say that than dress it up. data/sample/documents backup runbook.txt , data retention policy.txt , acceptable use policy.txt , wait a few seconds for them to show https://github.com/Abhay-s-8/infomind-ai-enterprise https://github.com/Abhay-s-8/infomind-ai-enterprise MIT licence . A long, diagram-heavy explanation of every data flow is in docs/PROJECT EXPLAINED.md https://github.com/Abhay-s-8/infomind-ai-enterprise/blob/main/docs/PROJECT EXPLAINED.md . The assistant is a retrieval-augmented pipeline with several independent checks, because no single one is enough: supported , citations , answer , in that order. supported: true and a valid citation. The rest: a database-backed job queue and worker, role-based access admin, analyst, reviewer enforced on the server, an audit log, and an evaluation command that exports retrieval and answer-quality numbers. The tests 111 on the backend, plus a frontend suite run with no model downloads. Built with an AI coding assistant. I developed this with Claude Code, and this post was drafted with AI help and reviewed by me. The design decisions, the measurements and the limits below are all things I checked against the running system. This is where open models earned their place. Swapping the model is one setting, and it changed the result. With the small default model llama3.2:3b through Ollama , the assistant wrongly refused a question it could answer whenever a second, less relevant passage was also retrieved: 0 out of 5 tries. I tried rewording the prompt and filtering passages; neither held up. Changing one environment variable to llama3.1:8b answered the same question 10 out of 10 times, and the app's own evaluation scored 4/4 answerable questions answered and 3/3 unanswerable ones refused. I could only run that experiment because the model is mine to swap. Privacy is a deployment choice, not a promise. Run locally, the documents and the questions never leave your machine, and the whole thing works with the internet off. For the always-on demo I used Ollama's hosted cloud so that visitors need nothing installed. Be aware that in that mode, the passages for each question go to Ollama's servers. The hosted demo uses a model called beam , which Ollama describes as an open model built by Reflection; its page does not state a licence, so the open-weight claim in this post rests on the local Llama models, not on beam . No lock-in. The same code runs against a local Ollama, an Ollama behind a small gateway I wrote, or Ollama's cloud. If this made you want an assistant that can say "I don't know", the part to read is the evidence gate and the citation validation in rag service.py https://github.com/Abhay-s-8/infomind-ai-enterprise/blob/main/backend/app/services/rag service.py . Contributions are welcome; see CONTRIBUTING.md https://github.com/Abhay-s-8/infomind-ai-enterprise/blob/main/CONTRIBUTING.md .