# fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa architecture

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

- Interactive diagram: https://gitdiagram.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa
- Repository: https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa

## Overview

This repository provides a student-grade prediction product through a Streamlit interface and a separate FastAPI backend serving a browser page and authenticated API. The main workflow is entering student attributes, obtaining a five-class grade prediction with class probabilities, and viewing population comparisons and model diagnostics. The API exposes corresponding prediction and information endpoints. The graph reflects the shown call paths; the contents of index.html and the training script were not sampled, so their internal behavior is not inferred.

Main entry points: [`app.py`](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py) (Streamlit application), [`utils/model_loader.py`](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/utils/model_loader.py) (Streamlit model loader), [`modelservice.py`](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/modelservice.py) (API model service), [`server.py`](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/server.py) (FastAPI routes and sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_streamlit["Streamlit experience"]
  node_streamlit_app["Streamlit application<br/>[app.py]"]
  node_student_form["Student input form<br/>[app.py]"]
  node_prediction_results["Grade and probabilities<br/>[app.py]"]
  node_population_comparison["Population comparison<br/>[app.py]"]
  node_model_diagnostics["Model diagnostics panel<br/>[app.py]"]
end

subgraph group_inference["Prediction and diagnostics"]
  node_streamlit_model["Streamlit model loader<br/>[model_loader.py]"]
  node_api_model["API model service<br/>[modelservice.py]"]
end

subgraph group_api["HTTP API"]
  node_api_client["Browser page<br/>[index.html]"]
  node_api_server["FastAPI routes and sessions<br/>[server.py]"]
end

subgraph group_data["Model and data"]
  node_user_accounts["User credentials<br/>[users.json]"]
  node_model_artifacts[("Trained model and feature columns<br/>[model.pkl]")]
  node_student_dataset[("Student performance dataset")]
end

node_student(("Student or evaluator"))

node_student -->|"uses"| node_streamlit_app
node_streamlit_app -->|"presents"| node_student_form
node_student_form -->|"requests prediction"| node_streamlit_model
node_streamlit_model -->|"returns grade and probabilities"| node_prediction_results
node_streamlit_app -->|"loads diagnostics"| node_streamlit_model
node_streamlit_app -->|"shows metrics"| node_model_diagnostics
node_streamlit_app -->|"shows comparison"| node_population_comparison
node_streamlit_model -->|"loads"| node_model_artifacts
node_streamlit_model -->|"reads"| node_student_dataset
node_api_client -->|"served by"| node_api_server
node_api_server -->|"checks credentials"| node_user_accounts
node_api_server -->|"requests prediction or info"| node_api_model
node_api_model -->|"loads"| node_model_artifacts
node_api_model -->|"reads for info"| node_student_dataset

click node_streamlit_app "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py"
click node_student_form "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py"
click node_prediction_results "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py"
click node_population_comparison "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py"
click node_model_diagnostics "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py"
click node_streamlit_model "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/utils/model_loader.py"
click node_api_client "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/index.html"
click node_api_server "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/server.py"
click node_api_model "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/modelservice.py"
click node_user_accounts "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/users.json"
click node_model_artifacts "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/model.pkl"
click node_student_dataset "https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/Student_performance_data%20_.csv"

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_streamlit_app,node_student_form,node_prediction_results,node_population_comparison,node_model_diagnostics toneBlue
class node_streamlit_model,node_api_model toneAmber
class node_api_client,node_api_server toneMint
class node_user_accounts,node_model_artifacts,node_student_dataset toneRose
class node_student toneIndigo
```

## Components

### Streamlit experience

- [Streamlit application](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py): `app.py`
- [Student input form](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py): `app.py`
- [Grade and probabilities](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py): `app.py`
- [Population comparison](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py): `app.py`
- [Model diagnostics panel](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/app.py): `app.py`

### Prediction and diagnostics

- [Streamlit model loader](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/utils/model_loader.py): `utils/model_loader.py`
- [API model service](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/modelservice.py): `modelservice.py`

### HTTP API

- [Browser page](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/index.html): `index.html`
- [FastAPI routes and sessions](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/server.py): `server.py`

### Model and data

- [User credentials](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/users.json): `users.json`
- [Trained model and feature columns](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/model.pkl): `model.pkl`
- [Student performance dataset](https://github.com/fadhil2005/tugas_sp-2_prediksi_nilai_akhir_siswa/blob/main/Student_performance_data%20_.csv): `Student_performance_data _.csv`

### Other components

- **Student or evaluator**

## Connections

- Student or evaluator → Streamlit application: uses (evidence: `README.md`)
- Streamlit application → Student input form: presents (evidence: `app.py`)
- Student input form → Streamlit model loader: requests prediction (evidence: `app.py`)
- Streamlit model loader → Grade and probabilities: returns grade and probabilities (evidence: `app.py`)
- Streamlit application → Streamlit model loader: loads diagnostics (evidence: `app.py`)
- Streamlit application → Model diagnostics panel: shows metrics (evidence: `app.py`)
- Streamlit application → Population comparison: shows comparison (evidence: `app.py`)
- Streamlit model loader → Trained model and feature columns: loads (evidence: `utils/model_loader.py`)
- Streamlit model loader → Student performance dataset: reads (evidence: `utils/model_loader.py`)
- Browser page → FastAPI routes and sessions: served by (evidence: `server.py`)
- FastAPI routes and sessions → User credentials: checks credentials (evidence: `server.py`)
- FastAPI routes and sessions → API model service: requests prediction or info (evidence: `server.py`)
- API model service → Trained model and feature columns: loads (evidence: `modelservice.py`)
- API model service → Student performance dataset: reads for info (evidence: `modelservice.py`)
