Spaces:
Paused
Paused
| # Skip the unused `env.get_obs()` in `setup_environment_configs_pypowsybl` | |
| ## Trouvaille | |
| Le profilage détaillé de `/api/config` sur la grille France 400 kV | |
| (118 MB) a révélé que **`env.get_obs()` coûte ~4.6 s** dans | |
| `setup_environment_configs_pypowsybl`. Il construit la première | |
| `PypowsyblObservation` en faisant des reads pypowsybl massifs | |
| (`get_lines`, `get_buses`, `get_generators`, `get_loads`, group-bys | |
| pandas…). | |
| **Mais** dans `recommender_service.update_config` : | |
| ```python | |
| env, _obs, env_path, ... = setup_environment_configs_pypowsybl(network=self._base_network) | |
| # ^^^^ DISCARDED | |
| ``` | |
| Le `_obs` retourné est **jeté** — jamais stocké dans | |
| `_cached_env_context`, jamais utilisé par `run_analysis_step1`. Les | |
| ~4.6 s de construction sont du pur gaspillage. | |
| ## Fix | |
| ### Upstream (`expert_op4grid_recommender >= 0.2.0.post3`, commit `b6f6282a`) | |
| Nouveau paramètre `skip_initial_obs: bool = False` sur : | |
| - `get_env_first_obs_pypowsybl` | |
| - `setup_environment_configs_pypowsybl` | |
| - `setup_environment_configs` (compat wrapper) | |
| - `main.setup_environment_pypowsybl` (compat wrapper) | |
| Quand `True`, `env.get_obs()` est sauté et `obs=None` est retourné dans | |
| le tuple. Les appels ultérieurs à `env.get_obs()` par le caller (par | |
| ex. `run_analysis_step1`) restent fonctionnels. | |
| Backward-compatible : défaut `False` → comportement historique | |
| inchangé. | |
| ### Co-Study4Grid (`recommender_service.update_config`) | |
| ```python | |
| env, _obs, ... = setup_environment_configs_pypowsybl( | |
| network=self._base_network, | |
| skip_initial_obs=True, # NEW | |
| ) | |
| ``` | |
| ## Invariant testé | |
| ### Upstream (`tests/test_environment_pypowsybl.py`, 3 nouveaux tests) | |
| - `test_get_env_first_obs_skips_get_obs_when_requested` — avec | |
| `skip_initial_obs=True`, `env.get_obs()` n'est PAS appelée et | |
| `obs is None`. | |
| - `test_get_env_first_obs_calls_get_obs_by_default` — défaut conserve | |
| le comportement historique. | |
| - `test_setup_environment_configs_forwards_skip_initial_obs` — le | |
| wrapper de compat thread le flag jusqu'à l'inner function. | |
| ### Co-Study4Grid (`test_update_config_injects_preloaded_network_into_upstream`) | |
| Assertion enrichie pour vérifier que `update_config` passe | |
| `skip_initial_obs=True` à l'upstream helper. | |
| ## Mesure sur grille France 400 kV | |
| | | Avant | Après | Δ | | |
| |---|---|---|---| | |
| | `env.get_obs()` (première obs, discardée) | 4 588 ms | **0 ms** | **−4 588 ms** | | |
| | `update_config` total (main thread) | ~16-18 s | 12 191 ms | ~−4 s | | |
| | `/api/config` endpoint wall-clock | ~18 s | **~14.9 s** | **~−3.5 s** | | |
| ## Impact projeté sur Load Study (trace v14) | |
| | Segment | v10 | v14 attendu | | |
| |---|---|---| | |
| | `/api/config` | 15 966 ms | **~12-13 s** (−3 à −4 s) | | |
| | 4 XHRs parallèles | ~1.4 s (slowest) | ~0.5-1 s (moins de contention NAD) | | |
| | **Fin dernier XHR** | 17 384 ms | **~13-14 s** (−3-4 s) | | |
| | **Load Study v6 → v14** | −19 % | **~−40 %** (si le gain tient) | | |
| ## Dépendance | |
| Co-Study4Grid requiert `expert_op4grid_recommender >= 0.2.0.post3`. | |
| L'ancienne version (0.2.0.post2 et antérieures) reste fonctionnelle | |
| mais sans ce gain — si le flag `skip_initial_obs` n'est pas reconnu, | |
| le call lèvera `TypeError`. Co-Study4Grid devrait garder une version | |
| minimum cohérente dans ses requirements. | |