Développement Python, FastAPI, React

Python, FastAPI, React — et le refactoring qui n'explose rien.

Le problème réel

Le code d'un système d'IA locale a une propriété désagréable : il est presque entièrement asynchrone et presque entièrement lié à des ressources rares. Un modèle, une carte GPU, un budget mémoire. Les bugs qui en résultent — fuites de réservation, doubles chargements, requêtes orphelines — ne se reproduisent pas en test unitaire naïf.

Comment je le résous

  • Architecture hexagonale : la logique de décision est pure, les effets de bord sont à la frontière. On teste les décisions sans démarrer un processus.
  • Injection de dépendances par Protocols Python : un package extrait, trois consommateurs hétérogènes, zéro import croisé.
  • asyncio sérieux : verrou plus double vérification sur le chargement, suivi des requêtes en vol, nettoyage garanti par BackgroundTask.
  • Front : React et Tauri pour un dashboard desktop qui pilote l'agent en local par WebSocket. Next.js et React quand le contexte l'appelle.

Un piège appris sur le terrain

L'extraction d'un package partagé hors d'un système en production est l'opération où l'on casse tout d'un coup. Méthode retenue : strangler fig. On extrait derrière des shims de rétrocompatibilité, on migre un consommateur à la fois, on garde les deux chemins vivants jusqu'à ce que le dernier appelant ait basculé. Aucun big-bang. Validé par ~1 600 tests à chaque étape.

La preuve que l'abstraction était juste n'est pas venue des tests : elle est venue du deuxième consommateur, écrit plus tard, qui a pu utiliser le package sans importer une seule ligne du projet d'origine. Tant qu'il n'y a qu'un consommateur, on ne sait pas si on a une abstraction ou juste un déplacement de fichier.

Ce que ça donne, mesuré

  • ~1 600 tests couvrant l'extraction, verts à chaque étape
  • 3 consommateurs hétérogènes du package extrait
  • Zéro dépendance sur certains projets — parseur MIDI et writer écrits sur la bibliothèque standard
  • Revue adversariale multi-agents avant le premier commit : 10 problèmes confirmés sur 22 signalés

Où c'est en production

Cette compétence intervient dans

BuildAudit

Vos données ne peuvent pas sortir ?

C'est exactement le problème que je résous. Un appel de 30 minutes suffit à cadrer un audit.