add_document_from_file, add_document_from_url, add_document_from_text and delete_document are gone. create_mcp_server and _covering lose read_only; the client always opens with read_only=True, so the --read-only flag before `mcp` is redundant and the docs, Dockerfiles and compose example drop it. Ingestion is `haiku-rag add`/`add-src`/`delete` and haiku-ingester. No known consumer used the write tools; one stdio server per client window made multi-writer the accidental default, and streamable HTTP has no auth. The test_app stub drops a comment and __init__ that described run_mcp constructing the client positionally; every path goes through _covering. Refs #599 |
||
|---|---|---|
| .. | ||
| Dockerfile | ||
| Dockerfile.slim | ||
| README.md | ||
haiku.rag Docker Image
The full haiku.rag Docker image includes all features and extras (docling, voyageai, cross-encoder). You can build it locally using the provided Dockerfile.
Building the Image
Build the full image with all features:
docker build -f docker/Dockerfile -t haiku-rag .
This creates an image with:
- All document processing capabilities (Docling)
- VoyageAI embeddings
- MixedBread AI reranking
- Full feature set
Configuration
Create a configuration file haiku.rag.yaml:
# haiku.rag.yaml
environment: production
embeddings:
model:
provider: ollama
name: nomic-embed-text
vector_dim: 768
qa:
model:
provider: ollama
name: qwen3
See Configuration docs for all available options.
Running
Mount your config file and data directory:
docker run -p 8001:8001 \
-v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
-v /path/to/data:/data \
haiku-rag
For continuous ingestion of a watched directory, run haiku-ingester in a
separate container against the same data volume:
docker run \
-v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
-v /path/to/data:/data \
-v /path/to/docs:/docs \
-p 8765:8765 \
haiku-rag haiku-ingester --config /app/haiku.rag.yaml serve
Configure the watched directory in haiku.rag.yaml using the container
path:
ingester:
queue:
path: /data/ingester.db # persist queue in the data volume
sources:
- type: fs
id: docs
root: /docs # container path, not host path
delete_orphans: true
The MCP server running in the first container must be started with
--read-only when an ingester is writing to the same database — LanceDB
allows one writer and N readers per URI. See
examples/docker/docker-compose.yml for a working two-service setup.
For API keys (OpenAI, Anthropic, etc.), pass them as environment variables:
docker run -p 8001:8001 \
-v /path/to/haiku.rag.yaml:/app/haiku.rag.yaml \
-v /path/to/data:/data \
-e OPENAI_API_KEY=your-key-here \
haiku-rag
Docker Compose
See examples/docker/ for a complete setup example.