# ronil999/legal-zoning-rag architecture

> Architecture diagram of the GitHub repository ronil999/legal-zoning-rag, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-31). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ronil999/legal-zoning-rag
- Repository: https://github.com/ronil999/legal-zoning-rag

## Overview

intelli-site answers architects’ NYC property and zoning questions from a BBL and natural-language query. The UI submits the request to the pipeline, which routes it to rejection, structured property lookup, or legal retrieval; it then builds a route-aware prompt, generates an answer, evaluates citations and temporal risk, and formats the result with warnings and sources. The README also documents retrieval transparency and corpus-backed zoning coverage. The graph follows documented and indexed call relationships; unsampled implementation details are omitted where they cannot be verified.

Main entry points: [`src/main.py`](https://github.com/ronil999/legal-zoning-rag/blob/main/src/main.py) (Pipeline orchestrator), [`src/generation/gemini_client.py`](https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/gemini_client.py) (Gemini client), [`app.py`](https://github.com/ronil999/legal-zoning-rag/blob/main/app.py) (Streamlit UI), [`src/structured/loader.py`](https://github.com/ronil999/legal-zoning-rag/blob/main/src/structured/loader.py) (Structured data loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_ui["Streamlit UI<br/>[app.py]"]
  node_pipeline["Pipeline orchestrator<br/>[main.py]"]
end

subgraph group_retrieval["Routing and retrieval"]
  node_router["Query router<br/>[router.py]"]
  node_structured["Structured lookup<br/>[retrieval.py]"]
  node_loader["Structured data loader<br/>[loader.py]"]
  node_hybrid["Hybrid legal retrieval<br/>[retriever.py]"]
end

subgraph group_answer["Answer processing"]
  node_prompt["Route-aware prompts<br/>[prompt_builder.py]"]
  node_generation["Answer generation<br/>[llm.py]"]
  node_validator["Citation validation<br/>[validator.py]"]
  node_citation_eval["Citation grounding evaluation"]
  node_temporal["Temporal risk analysis<br/>[temporal_layer.py]"]
  node_formatter["Response formatting"]
  node_logger["Pipeline trace logging<br/>[pipeline_logger.py]"]
end

subgraph group_infrastructure["Data and model services"]
  node_site_data["Site records<br/>[site_records.csv]"]
  node_pluto_data["PLUTO site data"]
  node_zoning_corpus["Zoning corpus"]
  node_retrieval_index[("Retrieval indexes")]
  node_gemini_client["Gemini client<br/>[gemini_client.py]"]
end

node_architect(("Architect / AEC user"))
node_gemini{{"Gemini API"}}

node_architect -->|"asks question"| node_ui
node_ui -->|"submits query"| node_pipeline
node_pipeline -->|"routes query"| node_router
node_router -->|"classifies via"| node_gemini_client
node_gemini_client -->|"calls API"| node_gemini
node_pipeline -->|"requests site lookup"| node_structured
node_structured -->|"loads data through"| node_loader
node_loader -.->|"reads records"| node_site_data
node_loader -.->|"reads enrichment"| node_pluto_data
node_pipeline -->|"retrieves legal context"| node_hybrid
node_hybrid -->|"queries indexes"| node_retrieval_index
node_hybrid -.->|"retrieves corpus chunks"| node_zoning_corpus
node_pipeline -->|"builds prompt"| node_prompt
node_pipeline -->|"submits prompt"| node_generation
node_generation -->|"generates through"| node_gemini_client
node_pipeline -->|"validates answer"| node_validator
node_pipeline -->|"evaluates citations"| node_citation_eval
node_citation_eval -->|"judges grounding via"| node_gemini_client
node_pipeline -->|"checks amendment risk"| node_temporal
node_pipeline -->|"formats response"| node_formatter
node_ui -->|"renders citation details"| node_formatter
node_pipeline -->|"records run"| node_logger

click node_ui "https://github.com/ronil999/legal-zoning-rag/blob/main/app.py"
click node_pipeline "https://github.com/ronil999/legal-zoning-rag/blob/main/src/main.py"
click node_router "https://github.com/ronil999/legal-zoning-rag/blob/main/src/routing/router.py"
click node_structured "https://github.com/ronil999/legal-zoning-rag/blob/main/src/structured/retrieval.py"
click node_loader "https://github.com/ronil999/legal-zoning-rag/blob/main/src/structured/loader.py"
click node_site_data "https://github.com/ronil999/legal-zoning-rag/blob/main/corpus/structured/site_records.csv"
click node_pluto_data "https://github.com/ronil999/legal-zoning-rag/tree/main/corpus/structured"
click node_hybrid "https://github.com/ronil999/legal-zoning-rag/blob/main/src/retrieval/retriever.py"
click node_zoning_corpus "https://github.com/ronil999/legal-zoning-rag/tree/main/corpus/zoning"
click node_retrieval_index "https://github.com/ronil999/legal-zoning-rag/tree/main/chroma_db.bak_1788770862"
click node_prompt "https://github.com/ronil999/legal-zoning-rag/blob/main/src/prompt_builder.py"
click node_generation "https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/llm.py"
click node_gemini_client "https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/gemini_client.py"
click node_validator "https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/validator.py"
click node_citation_eval "https://github.com/ronil999/legal-zoning-rag/blob/main/src/evaluation/citation_evaluator.py"
click node_temporal "https://github.com/ronil999/legal-zoning-rag/blob/main/src/evaluation/temporal_layer.py"
click node_formatter "https://github.com/ronil999/legal-zoning-rag/blob/main/src/response_formatter.py"
click node_logger "https://github.com/ronil999/legal-zoning-rag/blob/main/src/logging/pipeline_logger.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_ui,node_pipeline,node_architect toneBlue
class node_router,node_structured,node_loader,node_hybrid toneAmber
class node_prompt,node_generation,node_validator,node_citation_eval,node_temporal,node_formatter,node_logger,node_gemini toneMint
class node_site_data,node_pluto_data,node_zoning_corpus,node_retrieval_index,node_gemini_client toneRose
```

## Components

### User interaction

- [Streamlit UI](https://github.com/ronil999/legal-zoning-rag/blob/main/app.py): `app.py`
- [Pipeline orchestrator](https://github.com/ronil999/legal-zoning-rag/blob/main/src/main.py): `src/main.py`

### Routing and retrieval

- [Query router](https://github.com/ronil999/legal-zoning-rag/blob/main/src/routing/router.py): `src/routing/router.py`
- [Structured lookup](https://github.com/ronil999/legal-zoning-rag/blob/main/src/structured/retrieval.py): `src/structured/retrieval.py`
- [Structured data loader](https://github.com/ronil999/legal-zoning-rag/blob/main/src/structured/loader.py): `src/structured/loader.py`
- [Hybrid legal retrieval](https://github.com/ronil999/legal-zoning-rag/blob/main/src/retrieval/retriever.py): `src/retrieval/retriever.py`

### Answer processing

- [Route-aware prompts](https://github.com/ronil999/legal-zoning-rag/blob/main/src/prompt_builder.py): `src/prompt_builder.py`
- [Answer generation](https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/llm.py): `src/generation/llm.py`
- [Citation validation](https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/validator.py): `src/generation/validator.py`
- [Citation grounding evaluation](https://github.com/ronil999/legal-zoning-rag/blob/main/src/evaluation/citation_evaluator.py): `src/evaluation/citation_evaluator.py`
- [Temporal risk analysis](https://github.com/ronil999/legal-zoning-rag/blob/main/src/evaluation/temporal_layer.py): `src/evaluation/temporal_layer.py`
- [Response formatting](https://github.com/ronil999/legal-zoning-rag/blob/main/src/response_formatter.py): `src/response_formatter.py`
- [Pipeline trace logging](https://github.com/ronil999/legal-zoning-rag/blob/main/src/logging/pipeline_logger.py): `src/logging/pipeline_logger.py`

### Data and model services

- [Site records](https://github.com/ronil999/legal-zoning-rag/blob/main/corpus/structured/site_records.csv): `corpus/structured/site_records.csv`
- [PLUTO site data](https://github.com/ronil999/legal-zoning-rag/tree/main/corpus/structured): `corpus/structured`
- [Zoning corpus](https://github.com/ronil999/legal-zoning-rag/tree/main/corpus/zoning): `corpus/zoning`
- [Retrieval indexes](https://github.com/ronil999/legal-zoning-rag/tree/main/chroma_db.bak_1788770862): `chroma_db.bak_1788770862`
- [Gemini client](https://github.com/ronil999/legal-zoning-rag/blob/main/src/generation/gemini_client.py): `src/generation/gemini_client.py`

### Other components

- **Architect / AEC user**
- **Gemini API**

## Connections

- Architect / AEC user → Streamlit UI: asks question (evidence: `Readme.md`)
- Streamlit UI → Pipeline orchestrator: submits query (evidence: `Readme.md`)
- Pipeline orchestrator → Query router: routes query (evidence: `src/main.py`)
- Query router → Gemini client: classifies via (evidence: `src/routing/router.py`)
- Gemini client → Gemini API: calls API (evidence: `src/generation/gemini_client.py`)
- Pipeline orchestrator → Structured lookup: requests site lookup (evidence: `src/main.py`)
- Structured lookup → Structured data loader: loads data through (evidence: `src/structured/retrieval.py`)
- Structured data loader → Site records: reads records
- Structured data loader → PLUTO site data: reads enrichment
- Pipeline orchestrator → Hybrid legal retrieval: retrieves legal context (evidence: `src/main.py`)
- Hybrid legal retrieval → Retrieval indexes: queries indexes (evidence: `src/retrieval/retriever.py`)
- Hybrid legal retrieval → Zoning corpus: retrieves corpus chunks
- Pipeline orchestrator → Route-aware prompts: builds prompt (evidence: `src/main.py`)
- Pipeline orchestrator → Answer generation: submits prompt (evidence: `src/main.py`)
- Answer generation → Gemini client: generates through (evidence: `src/generation/llm.py`)
- Pipeline orchestrator → Citation validation: validates answer (evidence: `src/main.py`)
- Pipeline orchestrator → Citation grounding evaluation: evaluates citations (evidence: `src/main.py`)
- Citation grounding evaluation → Gemini client: judges grounding via (evidence: `src/evaluation/citation_evaluator.py`)
- Pipeline orchestrator → Temporal risk analysis: checks amendment risk (evidence: `src/main.py`)
- Pipeline orchestrator → Response formatting: formats response (evidence: `src/main.py`)
- Streamlit UI → Response formatting: renders citation details (evidence: `app.py`)
- Pipeline orchestrator → Pipeline trace logging: records run (evidence: `src/main.py`)
