# jiaxianyan/biominer architecture

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

- Interactive diagram: https://gitdiagram.com/jiaxianyan/biominer
- Repository: https://github.com/jiaxianyan/biominer
- Video tour (about a minute): https://gitdiagram.com/jiaxianyan/biominer/video

## Overview

BioMiner turns scientific-paper PDFs into protein–ligand–bioactivity records, with a related structure-to-bioactivity annotation task. The documented workflow covers document preprocessing, chemical-structure extraction and recognition, bioactivity extraction, and result postprocessing; the UI supports reviewing and editing results. Edges reflect the README’s stated stages and the sampled interface/API evidence. Several implementation details are unsampled, so uncertain internal calls and data stores are omitted.

Main entry points: [`BioMiner/interface.py`](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/interface.py) (BioMiner orchestrator), [`biovista_component_evaluate.py`](https://github.com/jiaxianyan/biominer/blob/main/biovista_component_evaluate.py) (BioVista benchmark), [`BioMiner/commons/process_pdf.py`](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/process_pdf.py) (PDF preprocessing), [`BioMiner/MolScribe/molscribe/interface.py`](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/MolScribe/molscribe/interface.py) (Structure recognition)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Extraction workflow"]
  node_biominer["BioMiner orchestrator<br/>[interface.py]"]
  node_preprocess["PDF preprocessing<br/>[process_pdf.py]"]
  node_mineru["MinerU integration<br/>[mineru_pdf.py]"]
end

subgraph group_chemistry["Structure processing"]
  node_detection["Molecule detection<br/>[mol_detection.py]"]
  node_ocsr["Structure recognition<br/>[interface.py]"]
  node_molscribe_model["MolScribe model<br/>[model.py]"]
  node_structure_tools["Structure utilities<br/>[process_mol.py]"]
  node_structure_inference["Coreference and Markush<br/>[interface.py]"]
end

subgraph group_activity["Bioactivity extraction"]
  node_bioactivity["Bioactivity extraction<br/>[mllm.py]"]
end

subgraph group_results["Results and review"]
  node_postprocess["Result extraction<br/>[extractor.py]"]
  node_protein_utils["Protein utilities<br/>[protein_utils.py]"]
  node_ui_backend["Review API<br/>[app.py]"]
  node_ui_frontend["Review interface<br/>[app.js]"]
  node_output_files["Extraction outputs"]
end

subgraph group_benchmark["Benchmark tasks"]
  node_biovista["BioVista benchmark"]
  node_moldet_task["Detection task"]
  node_ocsr_task["OCSR task"]
  node_coref_task["Coreference task"]
  node_markush_task["Markush task"]
end

node_researcher(("Researcher"))
node_papers["Paper PDFs"]
node_llm_service{{"Language model API"}}

node_researcher -->|"submits papers"| node_biominer
node_papers -->|"provides PDFs"| node_biominer
node_biominer -->|"preprocesses papers"| node_preprocess
node_preprocess -->|"extracts pages"| node_mineru
node_biominer -->|"detects molecules"| node_detection
node_biominer -->|"recognizes structures"| node_ocsr
node_ocsr -->|"predicts structures"| node_molscribe_model
node_biominer -->|"resolves structures"| node_structure_inference
node_structure_inference -->|"processes chemistry"| node_structure_tools
node_biominer -->|"extracts measurements"| node_bioactivity
node_bioactivity -.->|"requests extraction"| node_llm_service
node_biominer -->|"postprocesses results"| node_postprocess
node_postprocess -->|"uses protein data"| node_protein_utils
node_biominer -->|"writes results"| node_output_files
node_researcher -->|"reviews results"| node_ui_frontend
node_ui_frontend -->|"calls API"| node_ui_backend
node_ui_backend -->|"reads and edits"| node_output_files
node_biovista -->|"evaluates detection"| node_moldet_task
node_biovista -->|"evaluates OCSR"| node_ocsr_task
node_biovista -->|"evaluates coreference"| node_coref_task
node_biovista -->|"evaluates enumeration"| node_markush_task

click node_biominer "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/interface.py"
click node_preprocess "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/process_pdf.py"
click node_mineru "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/mineru_pdf.py"
click node_detection "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/mol_detection.py"
click node_ocsr "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/MolScribe/molscribe/interface.py"
click node_molscribe_model "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/MolScribe/molscribe/model.py"
click node_structure_tools "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/process_mol.py"
click node_structure_inference "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/interface.py"
click node_bioactivity "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/runner/mllm.py"
click node_postprocess "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/runner/extractor.py"
click node_protein_utils "https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/protein_utils.py"
click node_ui_backend "https://github.com/jiaxianyan/biominer/blob/main/BioMiner_UI/backend/app.py"
click node_ui_frontend "https://github.com/jiaxianyan/biominer/blob/main/BioMiner_UI/frontend/static/app.js"
click node_biovista "https://github.com/jiaxianyan/biominer/blob/main/biovista_component_evaluate.py"
click node_moldet_task "https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/molecule_detection/moldetect_inference_batch.py"
click node_ocsr_task "https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/ocsr/molscribe_inference_batch.py"
click node_coref_task "https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/full_coreference/coreference_inference_batch_with_index_split_image_layout.py"
click node_markush_task "https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/markush_enumerate/markush_zip_inference_batch_with_index_layout.py"

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_biominer,node_preprocess,node_mineru toneBlue
class node_detection,node_ocsr,node_molscribe_model,node_structure_tools,node_structure_inference toneAmber
class node_bioactivity,node_llm_service toneMint
class node_postprocess,node_protein_utils,node_ui_backend,node_ui_frontend,node_output_files toneRose
class node_biovista,node_moldet_task,node_ocsr_task,node_coref_task,node_markush_task,node_researcher,node_papers toneIndigo
```

## Components

### Extraction workflow

- [BioMiner orchestrator](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/interface.py): `BioMiner/interface.py`
- [PDF preprocessing](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/process_pdf.py): `BioMiner/commons/process_pdf.py`
- [MinerU integration](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/mineru_pdf.py): `BioMiner/commons/mineru_pdf.py`

### Structure processing

- [Molecule detection](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/mol_detection.py): `BioMiner/commons/mol_detection.py`
- [Structure recognition](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/MolScribe/molscribe/interface.py): `BioMiner/MolScribe/molscribe/interface.py`
- [MolScribe model](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/MolScribe/molscribe/model.py): `BioMiner/MolScribe/molscribe/model.py`
- [Structure utilities](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/process_mol.py): `BioMiner/commons/process_mol.py`
- [Coreference and Markush](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/interface.py): `BioMiner/interface.py`

### Bioactivity extraction

- [Bioactivity extraction](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/runner/mllm.py): `BioMiner/runner/mllm.py`

### Results and review

- [Result extraction](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/runner/extractor.py): `BioMiner/runner/extractor.py`
- [Protein utilities](https://github.com/jiaxianyan/biominer/blob/main/BioMiner/commons/protein_utils.py): `BioMiner/commons/protein_utils.py`
- [Review API](https://github.com/jiaxianyan/biominer/blob/main/BioMiner_UI/backend/app.py): `BioMiner_UI/backend/app.py`
- [Review interface](https://github.com/jiaxianyan/biominer/blob/main/BioMiner_UI/frontend/static/app.js): `BioMiner_UI/frontend/static/app.js`
- **Extraction outputs**

### Benchmark tasks

- [BioVista benchmark](https://github.com/jiaxianyan/biominer/blob/main/biovista_component_evaluate.py): `biovista_component_evaluate.py`
- [Detection task](https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/molecule_detection/moldetect_inference_batch.py): `BioVista/component_infernece/molecule_detection/moldetect_inference_batch.py`
- [OCSR task](https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/ocsr/molscribe_inference_batch.py): `BioVista/component_infernece/ocsr/molscribe_inference_batch.py`
- [Coreference task](https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/full_coreference/coreference_inference_batch_with_index_split_image_layout.py): `BioVista/component_infernece/full_coreference/coreference_inference_batch_with_index_split_image_layout.py`
- [Markush task](https://github.com/jiaxianyan/biominer/blob/main/BioVista/component_infernece/markush_enumerate/markush_zip_inference_batch_with_index_layout.py): `BioVista/component_infernece/markush_enumerate/markush_zip_inference_batch_with_index_layout.py`

### Other components

- **Researcher**
- **Paper PDFs**
- **Language model API**

## Connections

- Researcher → BioMiner orchestrator: submits papers
- Paper PDFs → BioMiner orchestrator: provides PDFs
- BioMiner orchestrator → PDF preprocessing: preprocesses papers
- PDF preprocessing → MinerU integration: extracts pages
- BioMiner orchestrator → Molecule detection: detects molecules
- BioMiner orchestrator → Structure recognition: recognizes structures
- Structure recognition → MolScribe model: predicts structures
- BioMiner orchestrator → Coreference and Markush: resolves structures
- Coreference and Markush → Structure utilities: processes chemistry
- BioMiner orchestrator → Bioactivity extraction: extracts measurements
- Bioactivity extraction → Language model API: requests extraction
- BioMiner orchestrator → Result extraction: postprocesses results
- Result extraction → Protein utilities: uses protein data
- BioMiner orchestrator → Extraction outputs: writes results
- Researcher → Review interface: reviews results
- Review interface → Review API: calls API
- Review API → Extraction outputs: reads and edits
- BioVista benchmark → Detection task: evaluates detection
- BioVista benchmark → OCSR task: evaluates OCSR
- BioVista benchmark → Coreference task: evaluates coreference
- BioVista benchmark → Markush task: evaluates enumeration
