Architecture logicielle 2026
Architecture
Description des composants réellement présents dans le dépôt et des intégrations optionnelles autour du moteur de simulation.
Périmètre technique du dépôt courant
- Le routage scientifique passe par
SesameRouterdansrouter.pyet couvre 22 types de simulation. - Le cœur numérique est organisé autour de
simulations/,optimization/,web/,cli/,cli_interactif/etsparc_agent/. - Les sorties sont persistées en SQLite et dans
outputs/, avec des exports JSON, graphiques, PDF et profils d'exécution. - Le web et l'API peuvent fonctionner en mode local pur, ou basculer vers Celery/Redis si ces services sont disponibles.
Vue d'ensemble
Le chemin principal est direct : formulaire ou JSON, validation, préparation par SesameRouter, exécution d'un module scientifique, contrôle de validité, persistance, visualisation et export.
graph TD
A["Entrées: Web / CLI / API"] -->|"Configuration JSON"| B("SesameRouter")
B -->|"Routage"| C{"Type de Sim?"}
C -->|"Homojunction"| D["Solveur Sesame 1D"]
C -->|"Multijonction"| D
C -->|"Défauts"| E["Solveur 2D / Cartographie"]
D --> F["Extraction Métriques"]
E --> F
F --> G["Validation Physique (IEEE)"]
G --> H[("Base SQLite & outputs")]
H --> I["Interface Web & Rapports PDF"]
| Couche | Implémentation | Rôle |
|---|---|---|
| Routage scientifique | router.py | validation, normalisation, choix du module, assemblage des résultats |
| Modèles physiques | simulations/* | homojonction, hétérojonction, multijonction, défauts, optique, diagnostics |
| Optimisation | optimization/* | Optuna, BoTorch, sensibilité, surrogate, rapports |
| Web | web/app.py, templates, static | UI, API, historique, comparaison, statistiques, validation, chat |
| Sessions et workflow | web/session_manager.py, web/unified_workflow.py | état de session, orchestration locale, aperçu système |
| CLI | cli/, cli_interactif/ | batch et interface interactive |
| Agent LLM | sparc_agent/* | chat, outils, schémas, prompts, conversation history |
| Persistance | web/database.py, SQLite, outputs/ | simulations, optimisations, matériaux, conversations, fichiers |
Arborescence utile
Structure simplifiée
sparc/
├── main.py
├── router.py
├── output_manager.py
├── simulations/
│ ├── homojunction.py
│ ├── heterojunction.py
│ ├── multi_layer.py
│ ├── multijunction.py
│ ├── quantum_efficiency.py
│ ├── capacitance.py
│ ├── luminescence.py
│ ├── ebic.py
│ ├── parametric.py
│ ├── temperature.py
│ ├── illumination.py
│ ├── defects.py
│ ├── grain_boundary_2d.py
│ ├── materials_database.py
│ ├── physical_validation.py
│ ├── ieee_astm_validation.py
│ ├── performance_monitoring.py
│ └── materials/
│ ├── fuser.py
│ ├── dft_calculator.py
│ └── sources/
├── optimization/
│ ├── optuna_engine.py
│ ├── botorch_engine.py
│ ├── sensitivity.py
│ ├── surrogate.py
│ └── reports.py
├── web/
│ ├── app.py
│ ├── database.py
│ ├── session_manager.py
│ ├── unified_workflow.py
│ ├── reports.py
│ ├── templates/
│ │ ├── form.html
│ │ ├── results.html
│ │ ├── history.html
│ │ ├── compare.html
│ │ ├── materials.html
│ │ ├── optimize.html
│ │ ├── optimize_results.html
│ │ ├── chat.html
│ │ ├── chat_history.html
│ │ ├── statistics.html
│ │ └── validation.html
│ └── static/
├── cli/
├── cli_interactif/
└── sparc_agent/
Flux d'exécution
Simulation
- Le front web, le CLI ou l'API produit une configuration JSON.
router.pyvalide la structure, complète les paramètres utiles et choisit le module de simulation.- Le module scientifique exécute le calcul et renvoie un dictionnaire de résultats.
- Les métriques, diagnostics, unités, validation physique et état de lisibilité scientifique sont assemblés.
- Les résultats sont persistés en SQLite et sous forme de fichiers dans
outputs/.
Optimisation
- Le front ou l'API crée un job d'optimisation avec bornes et objectifs.
- Le moteur d'optimisation génère des paramètres, puis réutilise le même chemin de simulation.
- Les essais alimentent la convergence, la heatmap, l'analyse de sensibilité et le surrogate.
- Les résultats sont stockés en base et exportables en PDF.
Web et sessions
web/app.pysert les pages HTML et les endpoints JSON.web/session_manager.pyconserve l'état de session utilisé par les workflows web.web/unified_workflow.pygère des parcours intégrés comme l'aperçu système et l'orchestration locale.
Surfaces fonctionnelles du web
| Surface | Templates / routes | Rôle |
|---|---|---|
| Création | form.html, configure.html, /form | saisie, préconfiguration, templates JSON |
| Résultats | results.html, /results/<sim_id> | plots, métriques, alertes de validation, profiling |
| Historique et comparaison | history.html, compare.html | navigation temporelle, comparaison multi-résultats |
| Matériaux | materials.html | recherche, statut fournisseurs, import et variantes locales |
| Optimisation | optimize.html, optimize_results.html | pilotage, progression, heatmap, PDF |
| LLM | chat.html, chat_history.html | chat, profils, historique de conversations |
| Analyse globale | statistics.html, validation.html | statistiques agrégées, score de validation |
Persistance
| Support | Contenu |
|---|---|
| SQLite | simulations, optimisations, matériaux personnalisés, événements, conversations, tags |
outputs/ | configs, JSON résultats, exports, graphiques, rapports |
| Mémoire processus | progression temps réel, sessions légères, état local de certaines opérations |
Intégrations optionnelles
- Celery est importé de manière opportuniste depuis
workers.simulation_workeretworkers.celery_app. Si ces modules ne sont pas disponibles ou si aucun worker ne répond, le web bascule sur un thread local. - Les fournisseurs LLM dépendent de la configuration active, des clés et des bibliothèques installées.
- Materials Project et OPTIMADE dépendent des paquets, de la connectivité et de l'état réel des providers.
Validation et interprétation
La couche scientifique ne s'arrête pas à l'exécution numérique. simulations/physical_validation.py, simulations/ieee_astm_validation.py, simulations/performance_monitoring.py et l'assemblage dans router.py déterminent si un résultat peut être lu comme une sortie PV utilisable, un diagnostic non-IV ou un résultat à bloquer.