feat(models): add hosted aifs_ens (additive)#82
Merged
Conversation
The open-meteo AIFS ensemble (`ecmwf_aifs025_ensemble`) has been retired in jua-core and replaced by the hosted ClickHouse model `aifs_ens` (AIFS ENS from ECMWF Open Data). The query engine no longer accepts the old id (returns 422 "not a valid Model"), which is why the SDK functional tests began failing for `ecmwf_aifs025_ensemble`. Swap the enum entry and its `_MODEL_META_INFO`: - `Models.AIFS_ENS = "aifs_ens"` in the **With Grid Access** block (next to AIFS). Unlike the old open-meteo model, the hosted model is a ClickHouse grid model, so grid/bbox slices are supported — not point-only. - `has_grid_access=True`, `has_statistics=True` (51-member ensemble). 0.25 degree grid (1440x720) matches the default num_lats/num_lons. - `has_forecast_file_access=False`: served from the query engine (ClickHouse), not the Jua zarr archive — same as the other externally-sourced CH models (ICON, NOAA GFS, EC IFS). - 360 forecasted hours, uniform 6-hourly cadence (0-360h, 61 steps). - Drop `forecast_name_mapping` — the enum value equals the API name. The SDK applies no client-side restriction gating, so aifs_ens is fully accessible (point + grid + statistics); access is governed purely by the server-side `allowed_models` entitlement (granted in the jua-core migration). The old id is intentionally NOT aliased: the hosted model does not serve `geopotential_at_pressure_level_50000Pa`, so silently re-pointing would 422. Verification: - jua-core config: libraries/jua-query-v2/src/jua_query_v2/configs/forecasts/models/aifs_ens.yaml - grid: "720x1440", is_ensemble_model: true - all 11 YAML variables already present in Variables enum - just check-commit passes (lint + 202 tests)
4b32a9b to
06c6e4e
Compare
Lock in that the hosted aifs_ens model exposes grid access + statistics (not point-only) and that the retired open-meteo ecmwf_aifs025_ensemble id is gone.
Make this PR purely additive (expand phase) so it can merge fully green. Removing the old open-meteo ecmwf_aifs025_ensemble is deferred to a separate contract-phase PR, after the backend that serves aifs_ens is deployed. Net effect vs main: add Models.AIFS_ENS (grid access + statistics) and its meta; the existing ECMWF_AIFS_ENSEMBLE entry is retained. Drop the old-id-removed assertion from the test accordingly.
…t test test_specific_forecast falls back to DEFAULT_FORECAST_DATE (2025-10-20) for models without an override. aifs_ens (ECMWF Open Data) only has data from mid-2025 onward and is sparse at the edges, so 2025-10-20 returns 400 "init_time does not exist". Add a MODEL_SPECIFIC_FORECAST_DATES override of 2026-03-03 (verified present in production ClickHouse), mirroring the existing EPT2_REASONING / ICON_EU recent-model overrides. Fixes the only failing functional test on the AIFS_ENS addition; metadata and latest-forecast functional tests already pass against the deployed API.
niasie
added a commit
that referenced
this pull request
Jun 26, 2026
Contract-phase removal. The open-meteo AIFS ensemble has been retired backend -side (replaced by hosted aifs_ens, added in the preceding commit). Drop the enum member and its meta so the SDK no longer advertises an id the query engine rejects. BREAKING CHANGE: Models.ECMWF_AIFS_ENSEMBLE is removed. Use Models.AIFS_ENS (hosted, grid access) instead. Note aifs_ens does not serve 500hPa geopotential. Built on top of the AIFS_ENS addition (#82); must merge after #82 and after the jua-core backend removal is ready, per the reverse-order contraction plan.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary (additive / expand phase)
Models.AIFS_ENS = "aifs_ens"in the With Grid Access block (next toAIFS), withhas_grid_access=True+has_statistics=True(51-member ensemble, 0.25° 720x1440 grid, 360h, 6-hourly).Models.ECMWF_AIFS_ENSEMBLE = "ecmwf_aifs025_ensemble"untouched.aifs_ensgrid access.This PR is purely additive so it passes all tests (incl. functional, once the backend is deployed) without depending on a coordinated removal.
Why split
The hosted
aifs_ensreplaces the open-meteoecmwf_aifs025_ensemble, but doing add+remove together is un-greenable across repos (SDK functional tests hit the live API; jua-core's SDK-integration test clones SDKmain). Splitting into expand (add) then contract (remove) keeps every PR green at merge.Removal (separate, later)
Removing
ECMWF_AIFS_ENSEMBLEhappens in a follow-up contract-phase PR after the backend servingaifs_ensis deployed and the old open-meteo model is decommissioned in jua-core.Merge order
aifs_ens, additive) → deployTest plan
just check-commit(lint + 203 tests)