Mini API FastAPI servant de base qui illustre comment transformer un modèle Python simple en service web conteneurisé.
Le service expose deux endpoints :
- GET /health → vérifie que l’API est opérationnelle (
{"status": "ok"}) - POST /predict → renvoie une prédiction simple à partir d’un input
x(y = 2x + 1)
pip install -r requirements.txtuvicorn app.main:app --reload- http://127.0.0.1:8000/docs → interface Swagger
- Exemple requête :
curl -X POST http://127.0.0.1:8000/predict -H "Content-Type: application/json" -d '{"x": 3}'Résultat attendu :
{"prediction": 7}docker build -t api_predict .docker run -p 8000:8000 api_predictcurl http://127.0.0.1:8000/healthapi_predict/
├─ app/
│ ├─ __init__.py
│ └─ main.py
├─ requirements.txt
├─ Dockerfile
└─ README.md
Ce projet utilise :
- Ruff pour le linting (
ruff check .) - Black pour le formatage (
black .)
Le projet utilise GitHub Actions pour :
- ✅ Vérification de la qualité du code (Ruff + Black)
- ✅ Exécution des tests unitaires (pytest)
- ✅ Construction de l'image Docker (ARM64)
Le workflow se déclenche automatiquement sur chaque push et pull request.
Le projet utilise MLflow pour suivre les paramètres et résultats de chaque prédiction.
Chaque requête sur /predict crée un run MLflow, enregistrant :
- les paramètres (
coef,bias,x) - les métriques (
output_y) - les horodatages d’exécution
Pour visualiser les runs :
mlflow uiPuis ouvre http://127.0.0.1:5000
Une interface Streamlit est disponible pour afficher les runs MLflow sans lancer l'UI par défaut :
streamlit run app/mlflow_ui.pyElle affiche :
- la liste des expériences MLflow
- les paramètres eet métriques loggés
- une visualisation dynamique des prédictions
Mettre en place la détection de data drift et la validation du modèle avec Evidently pour :
- comparer les distributions entre jeux de données d’entraînement et de production
- générer un rapport HTML automatisé dans
/reports/ - suivre la dérive des données dans le temps