DocuStore.io

Quickstart

Run DocuStore locally and process your first document.

You need Docker with Compose v2, uv (Python 3.12+), and Node.js with pnpm.

1. Clone the Repository

git clone https://github.com/sidxz/docu-store.git
cd docu-store/services

2. Configure Environment

Copy the example environment file and adjust settings:

cp .env.example .env

Key settings to configure:

# LLM Provider (ollama, openai, anthropic, or gemini)
LLM_PROVIDER=ollama
LLM_BASE_URL=http://localhost:11434

# Embedding model (runs locally on CPU; see Integration → Embedding Models)
EMBEDDING_MODEL_NAME=ibm-granite/granite-embedding-english-r2
EMBEDDING_DEVICE=cpu

# Authorization (Duar); DUAR_IDP_AUDIENCE is required
DUAR_URL=http://localhost:9003
DUAR_SERVICE_KEY=your-service-key
DUAR_IDP_AUDIENCE=your-oauth-client-id

See Authentication for the Duar setup.

3. Start the Stack

Start the infrastructure (EventStoreDB, MongoDB, Qdrant, Temporal, Kafka, Langfuse, Umami):

make docker-up

The first startup takes a few minutes as Docker pulls images and initializes databases. make docker-up starts infrastructure only. Run the DocuStore processes on the host:

make dev-install
make run-all   # API, read models, pipeline worker, Temporal workers, plugin consumer

Then start the web portal in another terminal:

cd ../web
cp apps/portal/.env.example apps/portal/.env.local
pnpm install
pnpm dev       # http://localhost:15000

4. Verify Services

Once running, verify the services are healthy:

The dev compose file publishes EventStoreDB on host port 2114 and Temporal on 7234 (not the usual 2113/7233), so .env should use esdb://localhost:2114?tls=false and localhost:7234.

5. Upload Your First Document

Upload through the portal, or via the API. API calls need your IdP token plus a Duar authz token for the workspace. Mint one through the API (it holds the service key):

AUTHZ_TOKEN=$(curl -s -X POST http://localhost:8000/auth/mint \
  -H "Content-Type: application/json" \
  -d "{\"idp_token\": \"$IDP_TOKEN\", \"provider\": \"google\", \"workspace_id\": \"$WORKSPACE_ID\"}" \
  | jq -r .authz_token)
curl -X POST http://localhost:8000/artifacts/upload \
  -H "Authorization: Bearer $IDP_TOKEN" \
  -H "X-Authz-Token: $AUTHZ_TOKEN" \
  -F "file=@/path/to/your/document.pdf" \
  -F "artifact_type=RESEARCH_ARTICLE"

DocuStore will automatically:

  1. Parse pages from the PDF
  2. Extract chemical compounds (OCSR)
  3. Run named entity recognition (NER)
  4. Generate page and document summaries
  5. Create text, summary, and SMILES embeddings

Monitor progress in the Temporal dashboard at http://localhost:8233.

6. Search Your Documents

Once processing completes, search via the API (same auth headers as above):

# Text search
curl -X POST http://localhost:8000/search/pages \
  -H "Authorization: Bearer $IDP_TOKEN" \
  -H "X-Authz-Token: $AUTHZ_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query_text": "kinase inhibitor"}'

# Hierarchical search (summaries + chunks)
curl -X POST http://localhost:8000/search/hierarchical \
  -H "Authorization: Bearer $IDP_TOKEN" \
  -H "X-Authz-Token: $AUTHZ_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query_text": "What compounds showed selectivity for CDK4?"}'

Next Steps