*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 4:
What I Built
Somewhere there is a manual nobody opens, a teacher's notes in an old folder, a community's knowledge sitting in a file. The internet drops, and that knowledge becomes a ghost: still there, but out of reach.
Kioo gives that stored knowledge a voice. It is an offline-first AI assistant that answers from the documents on your own computer, shows the exact passage behind every answer, and keeps working with the internet turned off. Import a document, ask in English or French, and a local open-weight model answers using only your passages. If your documents do not contain the answer, Kioo says so.
The AI does not pretend to talk to spirits. It is a local interpreter for knowledge that would otherwise stay hidden.
Demo
- Project website : https://kioo-web.onrender.com/
Import a document with the internet on, ask a question and see the sources, turn Wi-Fi off, ask again and get an answer, then ask something the documents do not cover and watch Kioo refuse.
Code
Kioo
When the internet disappears, knowledge stays.
Kioo is an offline-first AI knowledge assistant. You import documents (text, Markdown, PDF), ask questions in English or French, and a local open-weight model (through Ollama) answers using only passages from your documents. Every answer shows the real source passages next to it, and Kioo says so when the documents do not contain the answer.
- Runs on your computer. The core workflow calls no remote AI service.
- Works with the internet off, after the one-time install and model download.
- Open source (MIT). The model name is a setting, so you can swap it.
A small model can still be wrong. Kioo shows its sources on every answer so you can check them. It never presents generated text as verified fact.
Features
| Feature | Status |
|---|---|
Local inference with Ollama (default qwen2.5:1.5b) |
Done |
Import .pdf (page numbers kept), .docx, .txt, .md, |
TypeScript, MIT licensed, 52 automated tests (46 server, 6 client).
How I Built It
- Interface: React + TypeScript + Vite. Status pills show what is actually true (server, model installed, documents, internet), so "offline" is never a decoration.
-
Local API: Node.js + Express + TypeScript on
127.0.0.1. It also rejects requests with a foreign Host header. -
Model: Ollama running
qwen2.5:1.5b. The model name is a setting. - Documents: text, Markdown and PDF. PDFs are read page by page so a source can say "page 4".
- Retrieval: a small BM25 keyword search written for this project, with accents removed and stop words dropped in English and French. A passage must match enough of the question or Kioo stops and says "not found" without calling the model.
-
Grounded answers: the prompt allows only the supplied passages and asks the model to answer
NOT_FOUNDotherwise. The sources shown to the user come from the index, not from the model, and a citation number the model invents is ignored. - Honest limits: a small model can still misread a correct passage, so every answer carries a reminder to check the sources.
I used BM25 instead of embeddings on purpose. It is fast, needs no second model, and can be tested in two days. The cost is that it cannot match different words with the same meaning.
Does it work?
I wrote a 12-question evaluation over four small sample documents. Retrieval found the right passage for 10 of 10 answerable questions, and stopped 1 of 2 unanswerable ones by itself (the other relies on the model to say NOT_FOUND). That is an easy test: small documents, one author.
My results with the real model on my laptop: npm run eval -- --with-model:
Why Does Open Innovation Matter?
The point of Kioo is that it still works when the connection does not. That is only possible because the model is open-weight: I can download it once and run it on a laptop with no internet and no API key. A closed API would stop working the moment the network did, and every document I asked about would have to leave my computer.
Open also means I can swap the model with one setting, read exactly how retrieval and the prompt work, and change them. The trade-off is real: a 1.5B model is slower and less capable than a hosted giant, which is why Kioo is built around showing its sources rather than trusting its answers.
The Spirit of It
Knowledge should not disappear just because a connection does. A student in a village with unstable data, a technician with a manual and no signal, a family keeping a recipe book: they should still be able to ask a question and get an answer they can check.
Prize Categories
- Best Use of Render: https://kioo-web.onrender.com/
`OLLAMA_MODEL=gemma3:1b
](https://dev.to/challenges/hacktoberfest-week4-2026-10-26)*




Top comments (0)