No Description

Brin AMONKONAN c88d399948 (feat) init project 1 month ago
ml-api c88d399948 (feat) init project 1 month ago
notebooks c88d399948 (feat) init project 1 month ago
shared c88d399948 (feat) init project 1 month ago
web c88d399948 (feat) init project 1 month ago
README.md c88d399948 (feat) init project 1 month ago
docker-compose.yml c88d399948 (feat) init project 1 month ago

README.md

labML – Stack hybride Next.js + NestJS + FastAPI + Jupyter (Docker Compose)

Ce projet met en place une architecture moderne et modulaire pour le ML et le web :

  • Frontend: Next.js (TypeScript)
  • Backend applicatif: NestJS (TypeScript)
  • Backend ML: FastAPI (Python)
  • Notebooks: JupyterLab
  • Orchestration: Docker Compose

Chaînage prévu: Notebook → API (FastAPI) → API (NestJS) → Interface Web (Next.js)

Structure

labML/
├─ web/                # Frontend Next.js (TS)
├─ app-api/            # Backend NestJS (TS)
├─ ml-api/             # Backend FastAPI (Python)
│  ├─ app/
│  │  ├─ main.py       # API FastAPI (predict/train)
│  │  └─ train_iris.py # Script d'entraînement (Iris)
│  └─ environment.yml  # Environnement conda/mamba
├─ notebooks/          # Notebooks Jupyter
├─ shared/
│  └─ models/          # Artefacts modèles (joblib, etc.)
├─ docker-compose.yml  # Orchestration des services
└─ README.md

Prérequis

  • Docker Desktop + Docker Compose
  • Node.js (pour travailler hors Docker si besoin)

Démarrage rapide

  1. Générer les applications Next.js (web) et NestJS (app-api) si ce n'est pas déjà fait:

    • Next: npx create-next-app@latest web --ts --eslint --src-dir --app --import-alias "@/*" --yes
    • Nest: npx @nestjs/cli@latest new app-api -p npm
  2. Lancer l'ensemble des services:

    docker compose up
    

Cela va démarrer:

  1. Entraîner un modèle de démonstration (Iris) via notebook ou API:

    • Notebook: ouvrir JupyterLab, exécuter un notebook qui appelle ml-api/app/train_iris.py ou utilise son contenu.
    • API: POST http://localhost:8000/train
  2. Tester la prédiction:

    • POST http://localhost:8000/predict avec le payload:

      {
      "sepal_length": 5.1,
      "sepal_width": 3.5,
      "petal_length": 1.4,
      "petal_width": 0.2
      }
      
    • Le frontend (web) aura une page de démo pour saisir ces valeurs et afficher la prédiction, en passant par NestJS.

Paquets inclus côté Python

  • jupyterlab, ipykernel
  • matplotlib, seaborn
  • pandas, numpy
  • scikit-learn
  • optuna, mlflow
  • PyTorch (cpuonly) OU possibilité d'ajouter TensorFlow/Keras
  • fastapi, uvicorn, pydantic, joblib
  • streamlit, gradio (interfaces rapides de test)
  • black, flake8, isort, pytest, pre-commit

Note: l'installation via mamba dans les conteneurs peut être longue la première fois.

Qualité et CI locale

  • pre-commit configuré (black/flake8/isort pour Python; possibilité d'ajouter ESLint/Prettier côté TypeScript)
  • pytest pour tests Python

Variables d'environnement

  • Frontend (web): APP_API_BASE_URL=http://localhost:4000
  • Backend (app-api): ML_API_BASE_URL=http://ml-api:8000

Développement

  • Les services Node (web, app-api) sont montés en volumes (hot reload via npm run dev/start:dev).
  • Les services Python utilisent mambaforge et installent les dépendances au démarrage (peut être externalisé dans une image Docker dédiée pour accélérer).

Étapes suivantes

  • Ajouter la page Next.js de démo et l'endpoint NestJS /predict qui proxie vers FastAPI
  • Ajuster la sécurité (CORS, tokens Jupyter, etc.) pour la prod
  • Intégrer MLflow tracking et Optuna dans le script d'entraînement