# sothawang/local_retrieval_system architecture

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

- Interactive diagram: https://gitdiagram.com/sothawang/local_retrieval_system
- Repository: https://github.com/sothawang/local_retrieval_system

## Overview

Local Retrieval System is a cross-platform, offline multimodal desktop app. Users add local documents or images to a library; the app parses content, computes embeddings, and indexes it for later text or image search. Search combines semantic and keyword retrieval and presents ranked results. The README documents accessibility settings and supported formats; the tree supports the module paths below, but sampled source did not include the Dart implementations, so detailed internal call wiring is limited to documented workflow relationships.

Main entry points: [`lib/parsing/local_file_parser.dart`](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/local_file_parser.dart) (File parser), [`lib/ui`](https://github.com/sothawang/local_retrieval_system/tree/main/lib/ui) (Library and search), [`lib/retrieval/indexing/document_indexer.dart`](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/indexing/document_indexer.dart) (Document indexer), [`lib/retrieval/retrievers/hybrid_retriever.dart`](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/hybrid_retriever.dart) (Hybrid retriever)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["User interface"]
  node_app["App entry<br/>[main.dart]"]
  node_screens["Library and search"]
  node_settings["Accessibility settings"]
end

subgraph group_ingest["File ingestion"]
  node_backend["Backend assembly<br/>[app_backend.dart]"]
  node_parser["File parser"]
  node_parser_factory["Parser selection"]
  node_pdf["PDF extraction<br/>[pdfium_engine.dart]"]
  node_tika["Tika bridge<br/>[tika_bridge.dart]"]
  node_ocr["OCR engine<br/>[ocr_engine.dart]"]
end

subgraph group_models["Embedding inference"]
  node_embedding["Embedding engine"]
  node_text_embed["Text embedding"]
  node_image_embed["Image embedding"]
  node_bert_model["BERT model<br/>[bert.tflite]"]
  node_clip_model["MobileCLIP models"]
end

subgraph group_search["Indexing and retrieval"]
  node_indexer["Document indexer"]
  node_retrieval["Retrieval engine"]
  node_hybrid["Hybrid retriever"]
  node_keyword["Keyword retriever"]
  node_keyword_index[("Keyword index<br/>[keyword_index.dart]")]
  node_vector["Vector retriever"]
end

node_user(("User"))
node_tika_service["Apache Tika"]
node_tesseract["Tesseract runtime"]
node_chroma[("ChromaDB")]

node_user -->|"select files or query"| node_screens
node_screens -->|"request operations"| node_backend
node_app -->|"launches"| node_screens
node_user -->|"adjust accessibility"| node_settings
node_backend -->|"parse files"| node_parser
node_parser -->|"select parser"| node_parser_factory
node_parser -->|"extract PDF"| node_pdf
node_parser -->|"parse documents"| node_tika
node_tika -->|"dispatches to"| node_tika_service
node_parser -->|"recognize images"| node_ocr
node_ocr -->|"uses runtime"| node_tesseract
node_backend -->|"index content"| node_indexer
node_indexer -->|"compute embeddings"| node_embedding
node_embedding -->|"text inference"| node_text_embed
node_embedding -->|"image inference"| node_image_embed
node_text_embed -->|"runs model"| node_bert_model
node_image_embed -->|"runs model"| node_clip_model
node_indexer -->|"writes terms"| node_keyword_index
node_indexer -->|"writes vectors"| node_chroma
node_screens -->|"submit search"| node_retrieval
node_retrieval -->|"dispatch search"| node_hybrid
node_hybrid -->|"retrieve terms"| node_keyword
node_hybrid -->|"retrieve vectors"| node_vector
node_keyword -->|"searches"| node_keyword_index
node_vector -->|"searches"| node_chroma
node_vector -->|"embed query"| node_embedding
node_hybrid -->|"return ranked results"| node_screens

click node_app "https://github.com/sothawang/local_retrieval_system/blob/main/lib/main.dart"
click node_screens "https://github.com/sothawang/local_retrieval_system/tree/main/lib/ui"
click node_settings "https://github.com/sothawang/local_retrieval_system/blob/main/lib/ui/app_settings_controller.dart"
click node_backend "https://github.com/sothawang/local_retrieval_system/blob/main/lib/app/app_backend.dart"
click node_parser "https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/local_file_parser.dart"
click node_parser_factory "https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/parser_factory.dart"
click node_pdf "https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/pdfium_engine.dart"
click node_tika "https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/tika_bridge.dart"
click node_ocr "https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/ocr_engine.dart"
click node_tika_service "https://github.com/sothawang/local_retrieval_system/tree/main/lib/document_parsing_tool/tika_service"
click node_tesseract "https://github.com/sothawang/local_retrieval_system/tree/main/lib/document_parsing_tool/tesseract"
click node_embedding "https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/embedding_engine.dart"
click node_text_embed "https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/services/text_embedding_service.dart"
click node_image_embed "https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/services/image_embedding_service.dart"
click node_bert_model "https://github.com/sothawang/local_retrieval_system/blob/main/assets/bert_model/bert.tflite"
click node_clip_model "https://github.com/sothawang/local_retrieval_system/tree/main/assets/mobileclip_model"
click node_indexer "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/indexing/document_indexer.dart"
click node_retrieval "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrieval_engine.dart"
click node_hybrid "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/hybrid_retriever.dart"
click node_keyword "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/keyword_retriever.dart"
click node_keyword_index "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/keyword_index/keyword_index.dart"
click node_vector "https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/vector_retriever.dart"

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_app,node_screens,node_settings,node_user toneBlue
class node_backend,node_parser,node_parser_factory,node_pdf,node_tika,node_ocr,node_chroma toneAmber
class node_embedding,node_text_embed,node_image_embed,node_bert_model,node_clip_model toneMint
class node_indexer,node_retrieval,node_hybrid,node_keyword,node_keyword_index,node_vector toneRose
class node_tika_service,node_tesseract toneTeal
```

## Components

### User interface

- [App entry](https://github.com/sothawang/local_retrieval_system/blob/main/lib/main.dart): `lib/main.dart`
- [Library and search](https://github.com/sothawang/local_retrieval_system/tree/main/lib/ui): `lib/ui`
- [Accessibility settings](https://github.com/sothawang/local_retrieval_system/blob/main/lib/ui/app_settings_controller.dart): `lib/ui/app_settings_controller.dart`

### File ingestion

- [Backend assembly](https://github.com/sothawang/local_retrieval_system/blob/main/lib/app/app_backend.dart): `lib/app/app_backend.dart`
- [File parser](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/local_file_parser.dart): `lib/parsing/local_file_parser.dart`
- [Parser selection](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/parser_factory.dart): `lib/parsing/parser_factory.dart`
- [PDF extraction](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/pdfium_engine.dart): `lib/parsing/pdfium_engine.dart`
- [Tika bridge](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/tika_bridge.dart): `lib/parsing/tika_bridge.dart`
- [OCR engine](https://github.com/sothawang/local_retrieval_system/blob/main/lib/parsing/ocr_engine.dart): `lib/parsing/ocr_engine.dart`

### Embedding inference

- [Embedding engine](https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/embedding_engine.dart): `lib/embedding/embedding_engine.dart`
- [Text embedding](https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/services/text_embedding_service.dart): `lib/embedding/services/text_embedding_service.dart`
- [Image embedding](https://github.com/sothawang/local_retrieval_system/blob/main/lib/embedding/services/image_embedding_service.dart): `lib/embedding/services/image_embedding_service.dart`
- [BERT model](https://github.com/sothawang/local_retrieval_system/blob/main/assets/bert_model/bert.tflite): `assets/bert_model/bert.tflite`
- [MobileCLIP models](https://github.com/sothawang/local_retrieval_system/tree/main/assets/mobileclip_model): `assets/mobileclip_model`

### Indexing and retrieval

- [Document indexer](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/indexing/document_indexer.dart): `lib/retrieval/indexing/document_indexer.dart`
- [Retrieval engine](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrieval_engine.dart): `lib/retrieval/retrieval_engine.dart`
- [Hybrid retriever](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/hybrid_retriever.dart): `lib/retrieval/retrievers/hybrid_retriever.dart`
- [Keyword retriever](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/keyword_retriever.dart): `lib/retrieval/retrievers/keyword_retriever.dart`
- [Keyword index](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/keyword_index/keyword_index.dart): `lib/retrieval/keyword_index/keyword_index.dart`
- [Vector retriever](https://github.com/sothawang/local_retrieval_system/blob/main/lib/retrieval/retrievers/vector_retriever.dart): `lib/retrieval/retrievers/vector_retriever.dart`

### Other components

- **User**
- [Apache Tika](https://github.com/sothawang/local_retrieval_system/tree/main/lib/document_parsing_tool/tika_service): `lib/document_parsing_tool/tika_service`
- [Tesseract runtime](https://github.com/sothawang/local_retrieval_system/tree/main/lib/document_parsing_tool/tesseract): `lib/document_parsing_tool/tesseract`
- **ChromaDB**

## Connections

- User → Library and search: select files or query
- Library and search → Backend assembly: request operations
- App entry → Library and search: launches
- User → Accessibility settings: adjust accessibility
- Backend assembly → File parser: parse files
- File parser → Parser selection: select parser
- File parser → PDF extraction: extract PDF
- File parser → Tika bridge: parse documents
- Tika bridge → Apache Tika: dispatches to
- File parser → OCR engine: recognize images
- OCR engine → Tesseract runtime: uses runtime
- Backend assembly → Document indexer: index content
- Document indexer → Embedding engine: compute embeddings
- Embedding engine → Text embedding: text inference
- Embedding engine → Image embedding: image inference
- Text embedding → BERT model: runs model
- Image embedding → MobileCLIP models: runs model
- Document indexer → Keyword index: writes terms
- Document indexer → ChromaDB: writes vectors
- Library and search → Retrieval engine: submit search
- Retrieval engine → Hybrid retriever: dispatch search
- Hybrid retriever → Keyword retriever: retrieve terms
- Hybrid retriever → Vector retriever: retrieve vectors
- Keyword retriever → Keyword index: searches
- Vector retriever → ChromaDB: searches
- Vector retriever → Embedding engine: embed query
- Hybrid retriever → Library and search: return ranked results
