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 SesameRouter dans router.py et couvre 22 types de simulation.
  • Le cœur numérique est organisé autour de simulations/, optimization/, web/, cli/, cli_interactif/ et sparc_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"]
CoucheImplémentationRôle
Routage scientifiquerouter.pyvalidation, normalisation, choix du module, assemblage des résultats
Modèles physiquessimulations/*homojonction, hétérojonction, multijonction, défauts, optique, diagnostics
Optimisationoptimization/*Optuna, BoTorch, sensibilité, surrogate, rapports
Webweb/app.py, templates, staticUI, API, historique, comparaison, statistiques, validation, chat
Sessions et workflowweb/session_manager.py, web/unified_workflow.pyétat de session, orchestration locale, aperçu système
CLIcli/, cli_interactif/batch et interface interactive
Agent LLMsparc_agent/*chat, outils, schémas, prompts, conversation history
Persistanceweb/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

  1. Le front web, le CLI ou l'API produit une configuration JSON.
  2. router.py valide la structure, complète les paramètres utiles et choisit le module de simulation.
  3. Le module scientifique exécute le calcul et renvoie un dictionnaire de résultats.
  4. Les métriques, diagnostics, unités, validation physique et état de lisibilité scientifique sont assemblés.
  5. Les résultats sont persistés en SQLite et sous forme de fichiers dans outputs/.

Optimisation

  1. Le front ou l'API crée un job d'optimisation avec bornes et objectifs.
  2. Le moteur d'optimisation génère des paramètres, puis réutilise le même chemin de simulation.
  3. Les essais alimentent la convergence, la heatmap, l'analyse de sensibilité et le surrogate.
  4. Les résultats sont stockés en base et exportables en PDF.

Web et sessions

  1. web/app.py sert les pages HTML et les endpoints JSON.
  2. web/session_manager.py conserve l'état de session utilisé par les workflows web.
  3. web/unified_workflow.py gère des parcours intégrés comme l'aperçu système et l'orchestration locale.

Surfaces fonctionnelles du web

SurfaceTemplates / routesRôle
Créationform.html, configure.html, /formsaisie, préconfiguration, templates JSON
Résultatsresults.html, /results/<sim_id>plots, métriques, alertes de validation, profiling
Historique et comparaisonhistory.html, compare.htmlnavigation temporelle, comparaison multi-résultats
Matériauxmaterials.htmlrecherche, statut fournisseurs, import et variantes locales
Optimisationoptimize.html, optimize_results.htmlpilotage, progression, heatmap, PDF
LLMchat.html, chat_history.htmlchat, profils, historique de conversations
Analyse globalestatistics.html, validation.htmlstatistiques agrégées, score de validation

Persistance

SupportContenu
SQLitesimulations, optimisations, matériaux personnalisés, événements, conversations, tags
outputs/configs, JSON résultats, exports, graphiques, rapports
Mémoire processusprogression 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_worker et workers.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.