# Chroma DB in Docker: code for the tutorial Run order: `build_chunks.py` (optional, makes `chunks.jsonl`), `run_chroma.sh`, `minimal.py`, `collection_config.py`, `default_ef_gotcha.py`, `load.py`, `query.py`, `filters.py`, `reingest.py`, `persist_check.sh`, `size_check.sh`, `langchain_query.py`, `cleanup.sh`. Compose alternative: `docker-compose.yml` (`compose_check.sh` stops the `docker run` container first, same port). `gotchas.py` and `version_check.py` are the edge-case checks. `probe.py` is the helper that `persist_check.sh` calls. Setup: `python3 -m venv .venv && .venv/bin/pip install -r requirements.txt` (create the venv outside any repo). Versions of the run (2026-11-05): Chroma server `chromadb/chroma:1.5.9` (digest sha256:1e0b73a187a28757c572acba508c46f48c9e8b0acaf5c20e6d95cdedce1acdf6, arm64), `chromadb` 1.5.9, `langchain-chroma` 1.1.0, Python 3.11.2, Docker 24.0.6. Full list in `pip-freeze.txt`. The host port is 8010 (8000 was taken by another container). Telemetry is off with `ANONYMIZED_TELEMETRY=False`. `build_chunks.py` crawls via the WebCrawlerAPI `/v1/crawl` and `/v1/job/:id` endpoints (key in env `WEBCRAWLERAPI_API_KEY`), splits by headers, embeds with Ollama and writes `chunks.jsonl`. Run on 2026-11-05 with `https://webcrawlerapi.com/docs --items-limit 50`: 50 pages, 304 chunks, summed item cost 0.1, 59.7 s (`build_chunks.out`); `load.py` loaded it unchanged (`build_load.out`). Needs only `requests`. Input: `chunks.jsonl` is NOT included (3.4 MB with embeddings). It had 304 rows, sha256 7c62db9258ba7b33bc75bf3e0593b0a7ffc73d0b0fb11da68db0eb27ebe4e145, built from webcrawlerapi.com/docs (crawl with `webcr`, split at headings, embed with Ollama nomic-embed-text, 768 dims). Build your own file with the fields id, url, heading, text, embedding, model, dim. `questions.json` (6 questions) is from the same pipeline. Point the scripts at them with `CHUNKS_PATH=/path/to/chunks.jsonl` and run from the folder that holds `questions.json`. Queries need Ollama at localhost:11434 with the same model. Saved outputs (`*.out`) are the real output of the run. `default_ef_gotcha.out` has the model download progress bar removed.