# unimib-datai/dave architecture

> Architecture diagram of the GitHub repository unimib-datai/dave, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/unimib-datai/dave
- Repository: https://github.com/unimib-datai/dave

## Overview

DAVE supports document-collection exploration, entity-based search, conversational question answering, and human correction of annotations. The typical user workflow is to search or browse a collection, inspect documents and entities, then ask questions or refine annotations. Its indexing and retrieval services support that workflow alongside document and collection management. The graph combines README capabilities with sampled source; links involving unsampled routers and service internals are limited to documented responsibilities rather than inferred implementation details.

Main entry points: [`frontend/server/routers/document.ts`](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/document.ts) (Document routes), [`frontend/server/routers/search.ts`](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/search.ts) (Search routes), [`backend/documents/src/controllers/document.js`](https://github.com/unimib-datai/dave/blob/main/backend/documents/src/controllers/document.js) (Document service), [`frontend/lib/vectorSearch.ts`](https://github.com/unimib-datai/dave/blob/main/frontend/lib/vectorSearch.ts) (Vector retrieval)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["User interface"]
  node_search_ui["Search and chat<br/>[LLMSearch.tsx]"]
  node_documents_ui["Collection browser<br/>[DocumentsList.tsx]"]
  node_document_ui["Document annotation<br/>[DocumentViewer.tsx]"]
  node_infer_ui["Annotation inference<br/>[QueryText.tsx]"]
end

subgraph group_domain["Application services"]
  node_search_api["Search routes<br/>[search.ts]"]
  node_document_api["Document routes<br/>[document.ts]"]
  node_annotation_api["Annotation routes<br/>[annotation.ts]"]
  node_infer_api["Inference routes<br/>[infer.ts]"]
  node_docs_service["Document service<br/>[document.js]"]
  node_collection_service["Collection service"]
end

subgraph group_ai["Indexing and AI"]
  node_faceted_search["Faceted search<br/>[facetedSearch.ts]"]
  node_vector_search["Vector retrieval<br/>[vectorSearch.ts]"]
  node_vectorizer["Document vectorizer<br/>[app.py]"]
  node_annotation_pipeline["Entity extraction<br/>[pipeline.py]"]
  node_generation["Text generation<br/>[app.py]"]
end

subgraph group_state["Persistence and indexes"]
  node_mongo[("MongoDB<br/>[index.ts]")]
end

subgraph group_integrations["External services"]
  node_elastic[("Elasticsearch")]
  node_embedding_model["Embedding models"]
  node_llm["OpenAI-compatible model"]
end

node_user(("Domain expert"))

node_user -->|"searches or asks"| node_search_ui
node_user -->|"browses collections"| node_documents_ui
node_user -->|"reviews and corrects"| node_document_ui
node_user -->|"requests annotations"| node_infer_ui
node_search_ui -->|"requests search"| node_search_api
node_search_api -->|"runs faceted search"| node_faceted_search
node_search_api -->|"requests retrieval"| node_vector_search
node_faceted_search -->|"queries index"| node_elastic
node_vector_search -->|"embeds query"| node_embedding_model
node_vector_search -->|"requests answer generation"| node_generation
node_generation -->|"streams completion"| node_llm
node_documents_ui -->|"requests documents"| node_document_api
node_document_ui -->|"reads and updates"| node_document_api
node_document_api -->|"manages documents"| node_docs_service
node_document_api -->|"manages collections"| node_collection_service
node_docs_service -->|"reads and writes"| node_mongo
node_collection_service -->|"reads and writes"| node_mongo
node_docs_service -->|"deletes indexed document"| node_elastic
node_infer_ui -->|"submits text"| node_infer_api
node_infer_api -.->|"requests extraction"| node_annotation_pipeline
node_vectorizer -->|"generates embeddings"| node_embedding_model
node_vectorizer -->|"indexes documents"| node_elastic

click node_search_ui "https://github.com/unimib-datai/dave/blob/main/frontend/modules/search/LLMSearch.tsx"
click node_documents_ui "https://github.com/unimib-datai/dave/blob/main/frontend/modules/documents/DocumentsList.tsx"
click node_document_ui "https://github.com/unimib-datai/dave/blob/main/frontend/modules/document/DocumentViewer/DocumentViewer.tsx"
click node_infer_ui "https://github.com/unimib-datai/dave/blob/main/frontend/modules/infer/QueryText/QueryText.tsx"
click node_search_api "https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/search.ts"
click node_document_api "https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/document.ts"
click node_annotation_api "https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/annotation.ts"
click node_infer_api "https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/infer.ts"
click node_docs_service "https://github.com/unimib-datai/dave/blob/main/backend/documents/src/controllers/document.js"
click node_collection_service "https://github.com/unimib-datai/dave/blob/main/frontend/lib/documentsBackend/collectionController.ts"
click node_faceted_search "https://github.com/unimib-datai/dave/blob/main/frontend/lib/facetedSearch.ts"
click node_vector_search "https://github.com/unimib-datai/dave/blob/main/frontend/lib/vectorSearch.ts"
click node_vectorizer "https://github.com/unimib-datai/dave/blob/main/backend/qavectorizer/src/app.py"
click node_annotation_pipeline "https://github.com/unimib-datai/dave/blob/main/backend/annotationPipeline/pipeline.py"
click node_generation "https://github.com/unimib-datai/dave/blob/main/backend/text-generation/src/app.py"
click node_mongo "https://github.com/unimib-datai/dave/blob/main/frontend/lib/db/models/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_search_ui,node_documents_ui,node_document_ui,node_infer_ui toneBlue
class node_search_api,node_document_api,node_annotation_api,node_infer_api,node_docs_service,node_collection_service toneAmber
class node_faceted_search,node_vector_search,node_vectorizer,node_annotation_pipeline,node_generation toneMint
class node_mongo toneRose
class node_elastic,node_embedding_model,node_llm,node_user toneIndigo
```

## Components

### User interface

- [Search and chat](https://github.com/unimib-datai/dave/blob/main/frontend/modules/search/LLMSearch.tsx): `frontend/modules/search/LLMSearch.tsx`
- [Collection browser](https://github.com/unimib-datai/dave/blob/main/frontend/modules/documents/DocumentsList.tsx): `frontend/modules/documents/DocumentsList.tsx`
- [Document annotation](https://github.com/unimib-datai/dave/blob/main/frontend/modules/document/DocumentViewer/DocumentViewer.tsx): `frontend/modules/document/DocumentViewer/DocumentViewer.tsx`
- [Annotation inference](https://github.com/unimib-datai/dave/blob/main/frontend/modules/infer/QueryText/QueryText.tsx): `frontend/modules/infer/QueryText/QueryText.tsx`

### Application services

- [Search routes](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/search.ts): `frontend/server/routers/search.ts`
- [Document routes](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/document.ts): `frontend/server/routers/document.ts`
- [Annotation routes](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/annotation.ts): `frontend/server/routers/annotation.ts`
- [Inference routes](https://github.com/unimib-datai/dave/blob/main/frontend/server/routers/infer.ts): `frontend/server/routers/infer.ts`
- [Document service](https://github.com/unimib-datai/dave/blob/main/backend/documents/src/controllers/document.js): `backend/documents/src/controllers/document.js`
- [Collection service](https://github.com/unimib-datai/dave/blob/main/frontend/lib/documentsBackend/collectionController.ts): `frontend/lib/documentsBackend/collectionController.ts`

### Indexing and AI

- [Faceted search](https://github.com/unimib-datai/dave/blob/main/frontend/lib/facetedSearch.ts): `frontend/lib/facetedSearch.ts`
- [Vector retrieval](https://github.com/unimib-datai/dave/blob/main/frontend/lib/vectorSearch.ts): `frontend/lib/vectorSearch.ts`
- [Document vectorizer](https://github.com/unimib-datai/dave/blob/main/backend/qavectorizer/src/app.py): `backend/qavectorizer/src/app.py`
- [Entity extraction](https://github.com/unimib-datai/dave/blob/main/backend/annotationPipeline/pipeline.py): `backend/annotationPipeline/pipeline.py`
- [Text generation](https://github.com/unimib-datai/dave/blob/main/backend/text-generation/src/app.py): `backend/text-generation/src/app.py`

### Persistence and indexes

- [MongoDB](https://github.com/unimib-datai/dave/blob/main/frontend/lib/db/models/index.ts): `frontend/lib/db/models/index.ts`

### External services

- **Elasticsearch**
- **Embedding models**
- **OpenAI-compatible model**

### Other components

- **Domain expert**

## Connections

- Domain expert → Search and chat: searches or asks
- Domain expert → Collection browser: browses collections
- Domain expert → Document annotation: reviews and corrects
- Domain expert → Annotation inference: requests annotations
- Search and chat → Search routes: requests search
- Search routes → Faceted search: runs faceted search
- Search routes → Vector retrieval: requests retrieval
- Faceted search → Elasticsearch: queries index
- Vector retrieval → Embedding models: embeds query
- Vector retrieval → Text generation: requests answer generation
- Text generation → OpenAI-compatible model: streams completion
- Collection browser → Document routes: requests documents
- Document annotation → Document routes: reads and updates
- Document routes → Document service: manages documents
- Document routes → Collection service: manages collections
- Document service → MongoDB: reads and writes
- Collection service → MongoDB: reads and writes
- Document service → Elasticsearch: deletes indexed document
- Annotation inference → Inference routes: submits text
- Inference routes → Entity extraction: requests extraction
- Document vectorizer → Embedding models: generates embeddings
- Document vectorizer → Elasticsearch: indexes documents
