# rivaldotimoty/skin_cancer_classifier architecture

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

- Interactive diagram: https://gitdiagram.com/rivaldotimoty/skin_cancer_classifier
- Repository: https://github.com/rivaldotimoty/skin_cancer_classifier

## Overview

This repository contains two implemented products: a financial-document RAG analyzer and a nine-class skin-lesion classifier. The analyzer turns uploaded reports into indexed, retrievable context for summaries and financial questions. The classifier supports both model training/evaluation and image inference through a Streamlit app or CLI, with Grad-CAM explanations and test-time augmentation. The graph follows documented and indexed references; several classifier orchestration details and the financial frontend are unsampled, so uncertain links are omitted.

Main entry points: [`LLM/financial_analyzer/src/pipeline.py`](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/pipeline.py) (RAG Pipeline), [`skin_cancer_classifier/optimize_pipeline.py`](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/optimize_pipeline.py) (Training Pipeline), [`skin_cancer_classifier/main.py`](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/main.py) (Pipeline Entry), [`skin_cancer_classifier/inference.py`](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/inference.py) (Image Inference)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_fin_ingest["Financial Ingestion"]
  node_financial_main["Analyzer Entry<br/>[main.py]"]
  node_financial_ui["Financial UI"]
  node_report["Financial Report"]
  node_document_loader["Document Loader<br/>[loader.py]"]
  node_chunking["Text Chunking<br/>[chunking.py]"]
end

subgraph group_fin_rag["Financial Retrieval"]
  node_rag_pipeline["RAG Pipeline<br/>[pipeline.py]"]
  node_retriever["Retriever<br/>[retriever.py]"]
  node_embedding["Embedding<br/>[embedding.py]"]
  node_faiss_store[("FAISS Index")]
  node_ollama["Ollama"]
  node_llm_client["LLM Client<br/>[llm.py]"]
end

subgraph group_skin_train["Classifier Training"]
  node_skin_config["Configuration<br/>[config.py]"]
  node_skin_dataset["Dataset Prep<br/>[dataset.py]"]
  node_eda["Data Analysis<br/>[eda.py]"]
  node_trainer["Training Loop<br/>[train.py]"]
  node_optimizer["Training Pipeline"]
  node_evaluator["Evaluation<br/>[evaluate.py]"]
  node_skin_main["Pipeline Entry<br/>[main.py]"]
  node_skin_outputs[("Model Outputs")]
end

subgraph group_skin_infer["Classifier Inference"]
  node_skin_app["Streamlit App<br/>[app.py]"]
  node_inference["Image Inference<br/>[inference.py]"]
  node_classifier_model["Classifier Model<br/>[model.py]"]
  node_gradcam["Grad-CAM<br/>[gradcam.py]"]
end

node_analyst(("Analyst"))
node_patient_user(("Image User"))
node_cli_user(("CLI User"))

node_analyst -.->|"uses"| node_financial_ui
node_financial_ui -.->|"submits requests"| node_financial_main
node_financial_main -->|"invokes"| node_rag_pipeline
node_financial_main -->|"uses"| node_llm_client
node_rag_pipeline -->|"loads documents"| node_document_loader
node_rag_pipeline -->|"chunks documents"| node_chunking
node_rag_pipeline -->|"builds index"| node_retriever
node_rag_pipeline -->|"retrieves context"| node_retriever
node_rag_pipeline -->|"generates answers"| node_llm_client
node_retriever -->|"embeds queries"| node_embedding
node_rag_pipeline -->|"loads and saves index"| node_faiss_store
node_llm_client -->|"calls API"| node_ollama
node_patient_user -.->|"uploads image"| node_skin_app
node_cli_user -->|"runs inference"| node_inference
node_skin_app -->|"requests prediction"| node_inference
node_inference -->|"runs model"| node_classifier_model
node_inference -->|"generates explanation"| node_gradcam
node_inference -->|"reads settings"| node_skin_config
node_classifier_model -->|"reads model settings"| node_skin_config
node_skin_dataset -->|"reads dataset settings"| node_skin_config
node_eda -->|"reads paths and classes"| node_skin_config
node_trainer -->|"reads training settings"| node_skin_config
node_skin_main -->|"prepares splits"| node_skin_dataset
node_skin_main -->|"runs analysis"| node_eda
node_skin_main -->|"trains model"| node_trainer
node_skin_main -->|"evaluates predictions"| node_evaluator
node_skin_main -->|"visualizes samples"| node_gradcam
node_optimizer -->|"creates dataloaders"| node_skin_dataset
node_optimizer -->|"creates model"| node_classifier_model
node_optimizer -->|"trains model"| node_trainer
node_optimizer -->|"evaluates results"| node_evaluator
node_optimizer -->|"visualizes results"| node_gradcam
node_optimizer -.->|"writes reports and models"| node_skin_outputs

click node_financial_main "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/main.py"
click node_financial_ui "https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/LLM/financial_analyzer/frontend"
click node_report "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/data/raw/BUMI%20-%20Laporan%20Keuangan%20Q1%2031%20Mar%202025.pdf"
click node_document_loader "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/loader.py"
click node_chunking "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/chunking.py"
click node_rag_pipeline "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/pipeline.py"
click node_retriever "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/retriever.py"
click node_embedding "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/embedding.py"
click node_faiss_store "https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/LLM/financial_analyzer/vector_store/faiss_index"
click node_llm_client "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/llm.py"
click node_skin_app "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/app.py"
click node_inference "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/inference.py"
click node_classifier_model "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/model.py"
click node_gradcam "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/gradcam.py"
click node_skin_config "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/config.py"
click node_skin_dataset "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/dataset.py"
click node_eda "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/eda.py"
click node_trainer "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/train.py"
click node_optimizer "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/optimize_pipeline.py"
click node_evaluator "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/evaluate.py"
click node_skin_main "https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/main.py"
click node_skin_outputs "https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/skin_cancer_classifier/outputs"

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_financial_main,node_financial_ui,node_report,node_document_loader,node_chunking,node_patient_user,node_cli_user toneBlue
class node_rag_pipeline,node_retriever,node_embedding,node_faiss_store,node_ollama,node_llm_client toneAmber
class node_skin_config,node_skin_dataset,node_eda,node_trainer,node_optimizer,node_evaluator,node_skin_main,node_skin_outputs toneMint
class node_skin_app,node_inference,node_classifier_model,node_gradcam toneRose
class node_analyst toneIndigo
```

## Components

### Financial Ingestion

- [Analyzer Entry](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/main.py): `LLM/financial_analyzer/main.py`
- [Financial UI](https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/LLM/financial_analyzer/frontend): `LLM/financial_analyzer/frontend`
- [Financial Report](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/data/raw/BUMI%20-%20Laporan%20Keuangan%20Q1%2031%20Mar%202025.pdf): `LLM/financial_analyzer/data/raw/BUMI - Laporan Keuangan Q1 31 Mar 2025.pdf`
- [Document Loader](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/loader.py): `LLM/financial_analyzer/src/loader.py`
- [Text Chunking](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/chunking.py): `LLM/financial_analyzer/src/chunking.py`

### Financial Retrieval

- [RAG Pipeline](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/pipeline.py): `LLM/financial_analyzer/src/pipeline.py`
- [Retriever](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/retriever.py): `LLM/financial_analyzer/src/retriever.py`
- [Embedding](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/embedding.py): `LLM/financial_analyzer/src/embedding.py`
- [FAISS Index](https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/LLM/financial_analyzer/vector_store/faiss_index): `LLM/financial_analyzer/vector_store/faiss_index`
- **Ollama**
- [LLM Client](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/LLM/financial_analyzer/src/llm.py): `LLM/financial_analyzer/src/llm.py`

### Classifier Training

- [Configuration](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/config.py): `skin_cancer_classifier/config.py`
- [Dataset Prep](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/dataset.py): `skin_cancer_classifier/dataset.py`
- [Data Analysis](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/eda.py): `skin_cancer_classifier/eda.py`
- [Training Loop](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/train.py): `skin_cancer_classifier/train.py`
- [Training Pipeline](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/optimize_pipeline.py): `skin_cancer_classifier/optimize_pipeline.py`
- [Evaluation](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/evaluate.py): `skin_cancer_classifier/evaluate.py`
- [Pipeline Entry](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/main.py): `skin_cancer_classifier/main.py`
- [Model Outputs](https://github.com/rivaldotimoty/skin_cancer_classifier/tree/main/skin_cancer_classifier/outputs): `skin_cancer_classifier/outputs`

### Classifier Inference

- [Streamlit App](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/app.py): `skin_cancer_classifier/app.py`
- [Image Inference](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/inference.py): `skin_cancer_classifier/inference.py`
- [Classifier Model](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/model.py): `skin_cancer_classifier/model.py`
- [Grad-CAM](https://github.com/rivaldotimoty/skin_cancer_classifier/blob/main/skin_cancer_classifier/gradcam.py): `skin_cancer_classifier/gradcam.py`

### Other components

- **Analyst**
- **Image User**
- **CLI User**

## Connections

- Analyst → Financial UI: uses
- Financial UI → Analyzer Entry: submits requests
- Analyzer Entry → RAG Pipeline: invokes (evidence: `LLM/financial_analyzer/main.py`)
- Analyzer Entry → LLM Client: uses (evidence: `LLM/financial_analyzer/main.py`)
- RAG Pipeline → Document Loader: loads documents (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- RAG Pipeline → Text Chunking: chunks documents (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- RAG Pipeline → Retriever: builds index (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- RAG Pipeline → Retriever: retrieves context (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- RAG Pipeline → LLM Client: generates answers (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- Retriever → Embedding: embeds queries (evidence: `LLM/financial_analyzer/src/retriever.py`)
- RAG Pipeline → FAISS Index: loads and saves index (evidence: `LLM/financial_analyzer/src/pipeline.py`)
- LLM Client → Ollama: calls API (evidence: `LLM/financial_analyzer/src/llm.py`)
- Image User → Streamlit App: uploads image
- CLI User → Image Inference: runs inference (evidence: `skin_cancer_classifier/inference.py`)
- Streamlit App → Image Inference: requests prediction (evidence: `skin_cancer_classifier/app.py`)
- Image Inference → Classifier Model: runs model (evidence: `skin_cancer_classifier/inference.py`)
- Image Inference → Grad-CAM: generates explanation (evidence: `skin_cancer_classifier/inference.py`)
- Image Inference → Configuration: reads settings (evidence: `skin_cancer_classifier/inference.py`)
- Classifier Model → Configuration: reads model settings (evidence: `skin_cancer_classifier/model.py`)
- Dataset Prep → Configuration: reads dataset settings (evidence: `skin_cancer_classifier/dataset.py`)
- Data Analysis → Configuration: reads paths and classes (evidence: `skin_cancer_classifier/eda.py`)
- Training Loop → Configuration: reads training settings (evidence: `skin_cancer_classifier/train.py`)
- Pipeline Entry → Dataset Prep: prepares splits (evidence: `skin_cancer_classifier/main.py`)
- Pipeline Entry → Data Analysis: runs analysis (evidence: `skin_cancer_classifier/main.py`)
- Pipeline Entry → Training Loop: trains model (evidence: `skin_cancer_classifier/main.py`)
- Pipeline Entry → Evaluation: evaluates predictions (evidence: `skin_cancer_classifier/main.py`)
- Pipeline Entry → Grad-CAM: visualizes samples (evidence: `skin_cancer_classifier/main.py`)
- Training Pipeline → Dataset Prep: creates dataloaders (evidence: `skin_cancer_classifier/optimize_pipeline.py`)
- Training Pipeline → Classifier Model: creates model (evidence: `skin_cancer_classifier/optimize_pipeline.py`)
- Training Pipeline → Training Loop: trains model (evidence: `skin_cancer_classifier/optimize_pipeline.py`)
- Training Pipeline → Evaluation: evaluates results (evidence: `skin_cancer_classifier/optimize_pipeline.py`)
- Training Pipeline → Grad-CAM: visualizes results (evidence: `skin_cancer_classifier/optimize_pipeline.py`)
- Training Pipeline → Model Outputs: writes reports and models
