local-rag
Ask questions about your documents using local LLMs — no cloud, no API keys, your data stays on your machine.
$ rag add research-paper.pdf annual-report.docx notes.md
Loading research-paper.pdf…
128 chunks → embedding with nomic-embed-text…
Added 128 new chunks
Loading annual-report.docx…
94 chunks → embedding with nomic-embed-text…
Added 94 new chunks
$ rag ask "What were the main revenue drivers in Q3?"
╭─ Answer ────────────────────────────────────────────────────────╮
│ Based on the annual report, the main revenue drivers in Q3 │
│ were cloud services (+34% YoY) and professional services… │
│ [Source: annual-report.docx] │
╰─────────────────────────────────────────────────────────────────╯
Features
- Local-first — Ollama for embeddings + chat, ChromaDB for vector storage
- Multiple formats — PDF, DOCX, Markdown, plain text, RST
- Persistent store — add documents once, query forever
- Source filtering — restrict questions to specific files
- Smart chunking — overlapping word-based chunks for better context
- Rich terminal UI — markdown-rendered answers, source tables
Requirements
- Python ≥ 3.10
- Ollama running locally
- Embedding model:
ollama pull nomic-embed-text - Chat model:
ollama pull mistral
Installation
pip install local-rag
Or from source:
git clone https://github.com/dennisreichenberg/local-rag
cd local-rag
pip install -e ".[dev]"
Quick Start
# 1. Start Ollama (if not already running)
ollama serve
# 2. Pull required models
ollama pull nomic-embed-text
ollama pull mistral
# 3. Add documents
rag add report.pdf notes.md
# 4. Ask questions
rag ask "Summarize the key points"
rag ask "What are the risks mentioned?" --show-sources
Commands
rag add <files...>
Ingest one or more documents into the vector store. Supports .pdf, .docx, .txt, .md, .rst.
rag add report.pdf notes.md docs/
rag add report.pdf --embed-model nomic-embed-text --chunk-size 256
rag ask <question>
Ask a question. Retrieves the most relevant chunks and sends them to the LLM.
rag ask "What is the conclusion?"
rag ask "Explain the architecture" --chat-model llama3 --top-k 8
rag ask "What risks are mentioned?" --source report.pdf --show-sources
rag list
Show all ingested documents.
rag remove <source>
Remove a document (and all its chunks) from the store. Supports partial path matching.
rag remove report.pdf
rag clear
Remove everything from the store.
Options
| Command | Option | Default | Description |
|---|---|---|---|
add |
--embed-model |
nomic-embed-text |
Ollama embedding model |
add |
--chunk-size |
512 |
Words per chunk |
add |
--chunk-overlap |
64 |
Overlap between chunks |
ask |
--chat-model |
mistral |
Ollama chat model |
ask |
--embed-model |
nomic-embed-text |
Ollama embedding model |
ask |
--top-k |
5 |
Chunks to retrieve |
ask |
--source |
Filter by source file | |
ask |
--show-sources |
Show retrieved chunks | |
| All | --host |
http://localhost:11434 |
Ollama base URL |
How it works
Document → Chunking → Ollama Embeddings → ChromaDB
↓
Question → Ollama Embeddings → Vector Search → Top-K Chunks → Ollama LLM → Answer
- Ingestion: documents are split into overlapping chunks, embedded via Ollama (
nomic-embed-text), and stored in a local ChromaDB database (~/.local/share/local-rag/) - Retrieval: your question is embedded, then the closest chunks are retrieved via cosine similarity
- Generation: the retrieved chunks + question are sent to an Ollama chat model, which answers strictly from the provided context
Data storage
All data is stored locally at ~/.local/share/local-rag/chroma/. No data leaves your machine.
To move or backup your store, copy that directory.
License
MIT — see LICENSE
Metadata
Release files for ollama-local-rag 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ollama_local_rag-0.1.0.tar.gz | 11.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ollama_local_rag-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.4 kB
Release files / ollama_local_rag-0.1.0.tar.gz
| Download URL | ollama_local_rag-0.1.0.tar.gz |
|---|---|
| Size | 11.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
827332cb14c66f1b98e0c7178b26b1bb2c1480ba7ef9118a3c07c8004fdba1b1
|
|
BLAKE2b-256 checksum How to use checksums |
50ff728f71c3ba11dbafaa72f2467ec6888761057e95174d113a5ecea55970eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 17, 2026.
Transparency logRelease files / ollama_local_rag-0.1.0-py3-none-any.whl
| Download URL | ollama_local_rag-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d65d3e3bb64d81ecc77d2262911aa423584d2cfaa766538cdd1d4237719ffade
|
|
BLAKE2b-256 checksum How to use checksums |
1cd40040658a0b17e015388872dfdad1fafac9fbe949cff823579c06be19476a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 17, 2026.
Transparency log