Metadata-Version: 2.4
Name: concordiahub
Version: 0.2.1
Summary: ConcordiaHub dashboard and utilities
Author-email: Alex Little <alex@alexlittle.net>
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas==3.0.2
Requires-Dist: scikit-learn==1.8.0
Requires-Dist: numpy==2.4.4
Requires-Dist: shap==0.51.0
Requires-Dist: joblib==1.5.3
Requires-Dist: pyarrow==24.0.0
Requires-Dist: streamlit==1.57.0
Requires-Dist: setuptools==81.0.0
Requires-Dist: streamlit_option_menu==0.4.0
Requires-Dist: sentence-transformers==5.5.0
Requires-Dist: torchvision==0.27.0
Requires-Dist: spacy==3.8.14
Requires-Dist: plotly==6.7.0
Requires-Dist: markdown==3.10.2
Requires-Dist: xgboost==3.2.0
Requires-Dist: itables==2.8.1
Provides-Extra: dev
Requires-Dist: pytest==9.0.3; extra == "dev"
Requires-Dist: twine==6.2.0; extra == "dev"
Requires-Dist: build==1.4.0; extra == "dev"
Requires-Dist: wheel==0.46.3; extra == "dev"
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
Requires-Dist: pandas-stubs==3.0.3.260530; extra == "dev"
Requires-Dist: Sphinx==9.1.0; extra == "dev"
Requires-Dist: sphinx_rtd_theme==3.1.0; extra == "dev"
Requires-Dist: interrogate==1.7.0; extra == "dev"
Requires-Dist: pydoclint==0.9.1; extra == "dev"
Provides-Extra: examples
Requires-Dist: ollama==0.6.1; extra == "examples"
Requires-Dist: jinja2==3.1.6; extra == "examples"
Requires-Dist: tqdm==4.67.3; extra == "examples"
Dynamic: license-file

# Concordia Hub

Developed as part of my MSc project, Concordia Hub allows model developers to compare
Explainable AI methods and explanations between models, including scikit-learn 
models and LLMs.

As this is a proof-of-concept framework, not all model, XAI method or 
visualization types have been developed. However, the architecture allows new 
model types, XAI methods and visualizations to be added without large changes to
the codebase.

## Demo

Demo available at: https://concordiahub.alexlittle.net/

## Install

* Install with `pip install concordiahub`
* Launch the dashboard with `concordiahub-dash`


## Repository Structure

An overview of this repository's directory and file structure. Note that not 
every directory/file is included here. All code required for model registration and dashboard display is in the 
`concordiahub` directory, other top-level directories are supporting scripts, examples, tests and documentation.

```
.
├── docs                     # Placeholder for documentation in Sphinx RST format
├── evaluation               # Scripts used to measure feature alignment
├── examples                 # Example models used in the demo              
├── tests                    # Tests - dir/file structure mirrors the concordiahub 
│                            # core package structure
├── concordiahub               # Core Concordia Hub code
│   ├── adapters                 # Adapters
│   │   ├── explainers             # Adapters for XAI methods (eg TreeShap)
│   │   ├── models                 # Adapters for model types (eg LLM, XGBoost)
│   │   └── viz                    # Adapters for visualizations (eg bar chart)
│   ├── dashboard                # Streamlit dashboard application
│   │   ├── assets                 # CSS, logo/icons etc
│   │   ├── pages                  # Streamlit pages
│   │   ├── utils                  # Helper functions/utilities/components for pages
│   │   ├── app.py                 # Dashboard start up
│   │   ├── explorer.py            # Memory caching of model_explorer class
│   │   └── settings.py            # Dashboard settings
│   ├── entities                 # Helper classes for library and dashboard
│   │   ├── context.py             # Dataclasses for sending model to framework
│   │   ├── dataset.py             # Dataset class (represents a dataset)
│   │   ├── model_explorer.py      # Explorer class (for dataset, models available)
│   │   ├── model.py               # Model class
│   │   └── schema.py              # Dataclass for model data description
│   ├── registry                 # Adapter registries
│   │   ├── autodiscover.py        # Autodiscovers the adapters available
│   │   ├── model_registry.py      # Registry for model adapters
│   │   ├── viz_registry.py        # Registry for visualization adapters
│   │   └── xai_registry.py        # Registry for XAI method adapters
│   ├── storage                  # Storage classes
│   │   ├── filesystem_store.py    # Filesystem store class
│   │   └── store_base.py          # Base (abstract) store class
│   ├── artifacts.py             # Artifact store - manages models and storage
│   ├── cli.py                   # Command line interface for launching dashboard
│   ├── config.py                # Concordia Hub configuration
│   ├── exceptions.py            # Custom exceptions
│   ├── runner.py                # Orchestrator/entry point for loading a model
│   ├── strings.py               # Strings used throughout library
│   └── _version.py              # library version number
├── LICENSE                    # GNU 3 open source license
├── pyproject.toml             # Project/pip install file
├── README.md                  # This readme file
├── requirements-dev.txt       # Required packages if developing more features 
├── requirements-examples.txt  # Required packages for running the example models
├── requirements.txt           # Core required packages
├── setup.py                   # Project/pip install file
└── sonar-project.properties   # SonarQube configuration file   
```

## Source code/Development

This repo uses Git LFS for large files. Before cloning, install Git LFS:
```bash
sudo apt install git-lfs 
git lfs install
```


## CI & Code Quality

### Continuous Integration

[![CI](https://github.com/alexlittle/concordiahub/actions/workflows/ci.yml/badge.svg)](https://github.com/alexlittle/concordiahub/actions)

### SonarCloud - Quality Overview

[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=coverage)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_xaicompare)

### Detailed Metrics

[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_xaicompare)
[![Reliability](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)
[![Security](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)

### Issues Breakdown

[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=bugs)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=alexlittle-github_concordiahub&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=alexlittle-github_concordiahub)
