This folder is a portable local RAG bundle for indexing a 5eTools-style JSON data folder and querying it locally through a browser UI.
app.py- FastAPI app that can bootstrap Qdrant, ingest reference JSON, search, and chatsetup_linux.sh- Linux setup script to create a venv, install Python dependencies, and print next stepsrun_local.sh- starts the local API and UIrequirements.txt- Python packages to installPUT REFERENCES HERE/- drop your reference JSON tree hereui/- simple local browser UI for indexing and queryingdata/- local runtime data and configuration files created by the app
Install these first on a fresh Debian/Ubuntu-style machine:
sudo apt update
sudo apt install -y python3 python3-venv python3-pip curl ca-certificatescurl -fsSL https://ollama.com/install.sh | sh
ollama serveIn another shell, pull the models used by default:
ollama pull embeddinggemma
ollama pull qwen3-coder:30bIf you want smaller models, you can change them later in config.json.
Simplest option, Docker:
docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage \
qdrant/qdrantIf Docker is not installed, install it first or run Qdrant another way and update config.json.
From inside this folder:
bash setup_linux.shThat script will:
- create
.venv - install Python dependencies
- create runtime directories
- create a default
config.jsonif missing
Put your JSON reference tree inside:
PUT REFERENCES HERE/
Example:
PUT REFERENCES HERE/backgrounds.jsonPUT REFERENCES HERE/spells/spells-phb.jsonPUT REFERENCES HERE/bestiary/bestiary-mm.json
bash run_local.shThen open:
- API docs: http://127.0.0.1:8000/docs
- Local UI: http://127.0.0.1:8000/ui
- Start Ollama
- Start Qdrant
- Run
bash setup_linux.sh - Put your source JSON into
PUT REFERENCES HERE/ - Run
bash run_local.sh - In the UI, click bootstrap if needed
- In the UI, ingest the references folder
- Search or chat locally
- This bundle does not modify your source JSON files.
- It indexes one vector per entity/object where possible.
- Large entities are split into child chunks for better retrieval.
- Oversized parent entities are kept as metadata records but are not separately embedded when children exist.