# pratiksha123-sy/selfhealingmlops architecture

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

- Interactive diagram: https://gitdiagram.com/pratiksha123-sy/selfhealingmlops
- Repository: https://github.com/pratiksha123-sy/selfhealingmlops

## Overview

This is a self-healing churn-prediction MLOps application. Its main loop monitors a current data batch against historical data, reasons whether retraining is warranted, trains and evaluates a challenger, and promotes it only when validation approves; the API serves predictions and records them. A Streamlit dashboard and log-grounded chat expose status and decisions. The README documents capabilities beyond the sampled code; unsampled training and cleaning details are represented only at their documented stages. The graph’s documented links use README evidence, while implementation links cite shown callers; optional Groq integrations are dashed.

Main entry points: [`src/retrain_and_validate.py`](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/retrain_and_validate.py) (Challenger Validation), [`src/monitoring_agent.py`](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/monitoring_agent.py) (Monitoring Agent), [`src/dashboard.py`](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/dashboard.py) (Monitoring Dashboard), [`src/chat_agent.py`](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/chat_agent.py) (Log Retrieval And Answers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_serving["Prediction Serving"]
  node_api["Prediction API<br/>[api.py]"]
  node_prediction_log[("Prediction Log<br/>[prediction_log.csv]")]
end

subgraph group_monitoring["Drift Monitoring"]
  node_historical_data[("Historical Churn Data<br/>[telco_churn.csv]")]
  node_batch[("Current Batch<br/>[current_batch.csv]")]
  node_drift_simulator["Drift Simulation<br/>[simulate_drift.py]"]
  node_drift_check["Drift Report<br/>[check_drift.py]"]
  node_monitor["Monitoring Agent"]
end

subgraph group_model_lifecycle["Model Lifecycle"]
  node_orchestrator["Pipeline Orchestrator<br/>[orchestrator.py]"]
  node_cleaning["Data Cleaning<br/>[clean_data.py]"]
  node_training["Model Training<br/>[train.py]"]
  node_champion[("Live Model")]
  node_challenger[("Versioned Models")]
  node_validation["Challenger Validation"]
  node_run_log[("Orchestrator Run Log")]
end

subgraph group_explainability["Dashboard And Chat"]
  node_decision_logs[("Decision Logs")]
  node_validation_log[("Validation Log")]
  node_dashboard["Monitoring Dashboard<br/>[dashboard.py]"]
  node_chat_agent["Log Retrieval And Answers<br/>[chat_agent.py]"]
end

node_customer(("Prediction Client"))
node_groq{{"Groq LLM"}}
node_operator(("Operator"))

node_customer -->|"requests predictions"| node_api
node_api -->|"loads model"| node_champion
node_api -->|"logs predictions"| node_prediction_log
node_historical_data -->|"supplies sample"| node_drift_simulator
node_drift_simulator -->|"writes batch"| node_batch
node_historical_data -->|"reference data"| node_drift_check
node_batch -->|"current data"| node_drift_check
node_drift_check -.->|"reports drift"| node_monitor
node_historical_data -->|"reads reference"| node_monitor
node_batch -->|"reads batch"| node_monitor
node_monitor -.->|"reasons optionally"| node_groq
node_orchestrator -->|"runs monitoring"| node_monitor
node_orchestrator -->|"triggers retraining"| node_validation
node_cleaning -.->|"prepares data"| node_training
node_training -->|"saves model"| node_challenger
node_validation -->|"trains challenger"| node_training
node_validation -->|"evaluates champion"| node_champion
node_validation -->|"evaluates challenger"| node_challenger
node_validation -.->|"judges optionally"| node_groq
node_orchestrator -->|"promotes approved model"| node_champion
node_orchestrator -->|"appends run"| node_run_log
node_monitor -.->|"records decisions"| node_decision_logs
node_validation -->|"records decision"| node_validation_log
node_operator -->|"views status"| node_dashboard
node_dashboard -->|"reads run history"| node_run_log
node_dashboard -->|"reads drift history"| node_decision_logs
node_dashboard -->|"reads validation history"| node_validation_log
node_dashboard -->|"asks questions"| node_chat_agent
node_chat_agent -->|"retrieves entries"| node_decision_logs
node_chat_agent -->|"retrieves entries"| node_validation_log
node_chat_agent -->|"retrieves entries"| node_run_log
node_chat_agent -.->|"answers optionally"| node_groq

click node_api "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/api.py"
click node_prediction_log "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/prediction_log.csv"
click node_historical_data "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/telco_churn.csv"
click node_batch "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/current_batch.csv"
click node_drift_simulator "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/simulate_drift.py"
click node_drift_check "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/check_drift.py"
click node_monitor "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/monitoring_agent.py"
click node_orchestrator "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/orchestrator.py"
click node_cleaning "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/clean_data.py"
click node_training "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/train.py"
click node_champion "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/models/churn_model_current.joblib"
click node_challenger "https://github.com/pratiksha123-sy/selfhealingmlops/tree/main/models"
click node_validation "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/retrain_and_validate.py"
click node_run_log "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/orchestrator_runs.jsonl"
click node_decision_logs "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/agent_decisions.jsonl"
click node_validation_log "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/validation_decisions.jsonl"
click node_dashboard "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/dashboard.py"
click node_chat_agent "https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/chat_agent.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_api,node_prediction_log,node_customer toneBlue
class node_historical_data,node_batch,node_drift_simulator,node_drift_check,node_monitor toneAmber
class node_orchestrator,node_cleaning,node_training,node_champion,node_challenger,node_validation,node_run_log toneMint
class node_decision_logs,node_validation_log,node_dashboard,node_chat_agent toneRose
class node_groq,node_operator toneIndigo
```

## Components

### Prediction Serving

- [Prediction API](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/api.py): `src/api.py`
- [Prediction Log](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/prediction_log.csv): `data/prediction_log.csv`

### Drift Monitoring

- [Historical Churn Data](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/telco_churn.csv): `data/telco_churn.csv`
- [Current Batch](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/current_batch.csv): `data/current_batch.csv`
- [Drift Simulation](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/simulate_drift.py): `src/simulate_drift.py`
- [Drift Report](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/check_drift.py): `src/check_drift.py`
- [Monitoring Agent](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/monitoring_agent.py): `src/monitoring_agent.py`

### Model Lifecycle

- [Pipeline Orchestrator](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/orchestrator.py): `src/orchestrator.py`
- [Data Cleaning](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/clean_data.py): `src/clean_data.py`
- [Model Training](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/train.py): `src/train.py`
- [Live Model](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/models/churn_model_current.joblib): `models/churn_model_current.joblib`
- [Versioned Models](https://github.com/pratiksha123-sy/selfhealingmlops/tree/main/models): `models`
- [Challenger Validation](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/retrain_and_validate.py): `src/retrain_and_validate.py`
- [Orchestrator Run Log](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/orchestrator_runs.jsonl): `data/orchestrator_runs.jsonl`

### Dashboard And Chat

- [Decision Logs](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/agent_decisions.jsonl): `data/agent_decisions.jsonl`
- [Validation Log](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/data/validation_decisions.jsonl): `data/validation_decisions.jsonl`
- [Monitoring Dashboard](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/dashboard.py): `src/dashboard.py`
- [Log Retrieval And Answers](https://github.com/pratiksha123-sy/selfhealingmlops/blob/main/src/chat_agent.py): `src/chat_agent.py`

### Other components

- **Prediction Client**
- **Groq LLM**
- **Operator**

## Connections

- Prediction Client → Prediction API: requests predictions (evidence: `README.md`)
- Prediction API → Live Model: loads model (evidence: `README.md`)
- Prediction API → Prediction Log: logs predictions (evidence: `src/api.py`)
- Historical Churn Data → Drift Simulation: supplies sample (evidence: `README.md`)
- Drift Simulation → Current Batch: writes batch (evidence: `src/simulate_drift.py`)
- Historical Churn Data → Drift Report: reference data (evidence: `README.md`)
- Current Batch → Drift Report: current data (evidence: `README.md`)
- Drift Report → Monitoring Agent: reports drift (evidence: `README.md`)
- Historical Churn Data → Monitoring Agent: reads reference (evidence: `src/monitoring_agent.py`)
- Current Batch → Monitoring Agent: reads batch (evidence: `src/monitoring_agent.py`)
- Monitoring Agent → Groq LLM: reasons optionally (evidence: `src/monitoring_agent.py`)
- Pipeline Orchestrator → Monitoring Agent: runs monitoring (evidence: `src/orchestrator.py`)
- Pipeline Orchestrator → Challenger Validation: triggers retraining (evidence: `src/orchestrator.py`)
- Data Cleaning → Model Training: prepares data (evidence: `README.md`)
- Model Training → Versioned Models: saves model (evidence: `README.md`)
- Challenger Validation → Model Training: trains challenger (evidence: `src/retrain_and_validate.py`)
- Challenger Validation → Live Model: evaluates champion
- Challenger Validation → Versioned Models: evaluates challenger
- Challenger Validation → Groq LLM: judges optionally (evidence: `src/retrain_and_validate.py`)
- Pipeline Orchestrator → Live Model: promotes approved model (evidence: `src/orchestrator.py`)
- Pipeline Orchestrator → Orchestrator Run Log: appends run (evidence: `src/orchestrator.py`)
- Monitoring Agent → Decision Logs: records decisions
- Challenger Validation → Validation Log: records decision (evidence: `src/retrain_and_validate.py`)
- Operator → Monitoring Dashboard: views status (evidence: `README.md`)
- Monitoring Dashboard → Orchestrator Run Log: reads run history (evidence: `src/dashboard.py`)
- Monitoring Dashboard → Decision Logs: reads drift history (evidence: `src/dashboard.py`)
- Monitoring Dashboard → Validation Log: reads validation history (evidence: `src/dashboard.py`)
- Monitoring Dashboard → Log Retrieval And Answers: asks questions (evidence: `src/dashboard.py`)
- Log Retrieval And Answers → Decision Logs: retrieves entries (evidence: `src/chat_agent.py`)
- Log Retrieval And Answers → Validation Log: retrieves entries (evidence: `src/chat_agent.py`)
- Log Retrieval And Answers → Orchestrator Run Log: retrieves entries (evidence: `src/chat_agent.py`)
- Log Retrieval And Answers → Groq LLM: answers optionally (evidence: `src/chat_agent.py`)
