# saikrishna2004205/rfp-extracter architecture

> Architecture diagram of the GitHub repository saikrishna2004205/rfp-extracter, 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/saikrishna2004205/rfp-extracter
- Repository: https://github.com/saikrishna2004205/rfp-extracter

## Overview

The product is a bid-package RFP extractor. Its workflow is to discover isolated bid folders, parse PDF/HTML documents, classify them, preserve their content as evidence, retrieve evidence for 20 fields, and ask Gemini for a schema-validated JSON result written to the output directory. The graph follows calls visible in the sampled entry point and module excerpts; Gemini use and the documented output contract are also represented. Some module internals were not sampled, so uncertain implementation links are omitted.

Main entry points: [`main.py`](https://github.com/saikrishna2004205/rfp-extracter/blob/main/main.py) (Pipeline CLI), [`src/parser.py`](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/parser.py) (PDF/HTML parser), [`src/extractor.py`](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/extractor.py) (Gemini extractor), [`src/classifier.py`](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/classifier.py) (Document classifier)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Document ingestion"]
  node_main["Pipeline CLI<br/>[main.py]"]
  node_parser["PDF/HTML parser<br/>[parser.py]"]
  node_classifier["Document classifier<br/>[classifier.py]"]
end

subgraph group_evidence["Evidence pipeline"]
  node_evidence["Evidence generator<br/>[evidence.py]"]
  node_retriever["Evidence index<br/>[retriever.py]"]
end

subgraph group_extract["Extraction"]
  node_extractor["Gemini extractor<br/>[extractor.py]"]
  node_schema["Output schema<br/>[schema.py]"]
end

subgraph group_support["Shared support"]
  node_config["Runtime settings<br/>[config.py]"]
  node_utils["Text and file utilities<br/>[utils.py]"]
end

node_user(("Bid package provider"))
node_input["Bid files"]
node_gemini{{"Google Gemini"}}
node_output["JSON results"]

node_user -->|"provides files"| node_input
node_main -->|"discovers and parses"| node_parser
node_input -->|"reads documents"| node_parser
node_parser -->|"parsed package"| node_classifier
node_main -->|"classifies package"| node_classifier
node_main -->|"generates evidence"| node_evidence
node_parser -->|"parsed content"| node_evidence
node_classifier -->|"classification metadata"| node_evidence
node_main -->|"builds index"| node_retriever
node_evidence -->|"evidence records"| node_retriever
node_main -->|"requests extraction"| node_extractor
node_extractor -->|"retrieves field evidence"| node_retriever
node_extractor -.->|"requests candidates"| node_gemini
node_extractor -->|"validates output"| node_schema
node_main -->|"writes JSON"| node_output
node_parser -->|"cleans text"| node_utils
node_parser -->|"reads input settings"| node_config
node_classifier -->|"checks reference path"| node_config
node_main -->|"reads directories"| node_config
node_extractor -->|"reads model settings"| node_config

click node_input "https://github.com/saikrishna2004205/rfp-extracter/tree/main/data/input"
click node_main "https://github.com/saikrishna2004205/rfp-extracter/blob/main/main.py"
click node_parser "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/parser.py"
click node_classifier "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/classifier.py"
click node_evidence "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/evidence.py"
click node_retriever "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/retriever.py"
click node_extractor "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/extractor.py"
click node_schema "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/schema.py"
click node_config "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/config.py"
click node_utils "https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/utils.py"
click node_output "https://github.com/saikrishna2004205/rfp-extracter/tree/main/data/output"

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_main,node_parser,node_classifier toneBlue
class node_evidence,node_retriever toneAmber
class node_extractor,node_schema toneMint
class node_config,node_utils toneRose
class node_user,node_gemini toneIndigo
class node_input,node_output toneTeal
```

## Components

### Document ingestion

- [Pipeline CLI](https://github.com/saikrishna2004205/rfp-extracter/blob/main/main.py): `main.py`
- [PDF/HTML parser](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/parser.py): `src/parser.py`
- [Document classifier](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/classifier.py): `src/classifier.py`

### Evidence pipeline

- [Evidence generator](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/evidence.py): `src/evidence.py`
- [Evidence index](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/retriever.py): `src/retriever.py`

### Extraction

- [Gemini extractor](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/extractor.py): `src/extractor.py`
- [Output schema](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/schema.py): `src/schema.py`

### Shared support

- [Runtime settings](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/config.py): `src/config.py`
- [Text and file utilities](https://github.com/saikrishna2004205/rfp-extracter/blob/main/src/utils.py): `src/utils.py`

### Other components

- **Bid package provider**
- [Bid files](https://github.com/saikrishna2004205/rfp-extracter/tree/main/data/input): `data/input`
- **Google Gemini**
- [JSON results](https://github.com/saikrishna2004205/rfp-extracter/tree/main/data/output): `data/output`

## Connections

- Bid package provider → Bid files: provides files
- Pipeline CLI → PDF/HTML parser: discovers and parses
- Bid files → PDF/HTML parser: reads documents
- PDF/HTML parser → Document classifier: parsed package
- Pipeline CLI → Document classifier: classifies package
- Pipeline CLI → Evidence generator: generates evidence
- PDF/HTML parser → Evidence generator: parsed content
- Document classifier → Evidence generator: classification metadata
- Pipeline CLI → Evidence index: builds index
- Evidence generator → Evidence index: evidence records
- Pipeline CLI → Gemini extractor: requests extraction
- Gemini extractor → Evidence index: retrieves field evidence
- Gemini extractor → Google Gemini: requests candidates
- Gemini extractor → Output schema: validates output
- Pipeline CLI → JSON results: writes JSON
- PDF/HTML parser → Text and file utilities: cleans text
- PDF/HTML parser → Runtime settings: reads input settings
- Document classifier → Runtime settings: checks reference path
- Pipeline CLI → Runtime settings: reads directories
- Gemini extractor → Runtime settings: reads model settings
