Five models for the WeatherGPT meteorological interoperability layer.
Every number below was produced by a training script and copied from a
metrics.json
; none was typed by hand.
Install
pip install weathergpt-models # or: pip install -e . from the repo's# weathergpt_models/ directory if the# package isn't on PyPI yet
The package depends only on
numpy
,
torch
,
transformers
,
lightgbm
and
scikit-learn
— it does not import FastAPI or anything
from the serving app, so it can be used standalone.
Quickstart
from weathergpt_models import ModelRegistry
registry = ModelRegistry.from_hub("Arko007/weathergpt-models")
print(registry.status()) # what loaded, and why anything didn't
Every model attribute is
None
if its admission gate failed — always
check for
None
before calling it and fall back to a deterministic
path. This bundle's gate results:
field_mapper
PASS,
mos
PASS,
intent
PASS,
calibration
PASS,
trust_ranker
PASS.
Usage — one real call per model
These are the actual method signatures, not illustrative pseudocode —
copied from
modal_jobs/verify_package.py
and
modal_jobs/realworld_check.py
, which exercise every one of them
against live data before each release.
# M1 -- map a raw provider field name to a canonical variable
mapping = registry.field_mapper.map_field(
"APCP", unit="kg m-2", description="Total precipitation")
if mapping.is_usable:
print(mapping.canonical_variable, mapping.confidence)
else:
print("abstained -- do not fabricate a mapping")
# M2 -- bias-correct a multi-model forecast
corrected = registry.mos.correct(
"temperature_2m",
forecasts={"gfs_seamless": 31.2, "ecmwf_ifs025": 30.4,
"icon_seamless": 30.9, "gem_seamless": 31.8},
context={"lead_hours": 30, "lead_age_days": 1, "hour_utc": 6,
"doy": 245, "elevation_m": 303.0, "lat": 21.15, "lon": 79.09})
print(corrected.value, corrected.interval_low, corrected.interval_high)
# M3 -- parse intent + LOC/TIME/CROP slots from a natural-language query
parsed = registry.intent.parse("kal Bhandara me baarish hogi kya?")
print(parsed.intent, parsed.intent_confidence)
print(parsed.slot_text("LOC"), parsed.slot_text("TIME"))
# do NOT use parsed.variables -- that head is still weak# (variable macro-F1 0.12 on held-out data); intent confidence also# runs low (0.15-0.19) on real casual phrasing -- treat it as a weak# signal alongside a rule-based parser, not a standalone decision.# M4 -- calibrated exceedance probability from the same multi-model spread
curve = registry.calibration.probability_curve(
"precipitation",
forecasts={"gfs_seamless": 4.2, "ecmwf_ifs025": 1.1,
"icon_seamless": 6.8, "gem_seamless": 0.0},
context={"lead_hours": 30, "lead_age_days": 1, "hour_utc": 6,
"doy": 245, "elevation_m": 303.0, "lat": 21.15, "lon": 79.09})
for point in curve:
print(f"P(precip > {point.threshold}mm) = {point.probability:.3f}")
# M5 -- rank candidate NWP sources by learned trust for this context
ranked = registry.trust_ranker.rank(
"temperature_2m",
candidates={"gfs_seamless": 31.2, "ecmwf_ifs025": 30.4,
"icon_seamless": 30.9, "gem_seamless": 31.8},
context={"lead_hours": 30, "season": "autumn", "elevation_m": 303.0,
"lat": 21.15, "lon": 79.09})
print([r.source for r in ranked]) # best source first
Full integration guidance for wiring this into a FastAPI service (which
site in the codebase to touch, what NOT to change, live-tested caveats
for each model) is in
docs/MODEL_REGISTRY_INTEGRATION.md
and
docs/REAL_WORLD_READINESS.md
in the source repo, not duplicated here
since those get updated as real query traffic accumulates.
Each model is gated on beating the baseline it replaces. An artifact
that cannot prove its provenance, or that does not beat its baseline,
is refused at load time and the caller falls back to a deterministic
path.
field_mapper —
m1_field_mapper_v1
label-embedding bi-encoder + multitask heads
dataset:
d3_authoritative_parameter_tables
dataset sha256:
e5d3562cedf16d653f75d84adf51868d
split: by source table — train: CF+GRIB2+CAP; dev_zeroshot: BUFR+OpenMeteo+IMD (threshold calibration only); test_zeroshot: WRF+NCEP (never touched until the final measurement)
The test set is parameter tables the model never trained on (WRF Registry, NCEP GFS inventories, the WMO BUFR element table, Open-Meteo and IMD product fields), so this measures generalisation to a schema nobody has mapped.
mos —
m2_mos_v1
monotone quantile network (pinball) + LightGBM quantile forest, blended at a validation-chosen weight, with conformalised intervals
dataset:
d1_multi_model_nwp_vs_era5_seamless
dataset sha256:
a3888e44c7a6bd09b8282f214b68b1e6
split: chronological 70% cutoff AND 20% spatially held-out locations
trained: 2026-09-04T06:29:10.987471Z
admission gate:
PASS
— positive CRPS skill against the raw ensemble on the spatial holdout for every variable
variable
CRPS
raw ensemble CRPS
CRPS skill
temperature_2m
0.6162
0.6469
0.047
precipitation
0.2190
0.2523
0.132
wind_speed_10m
1.6000
1.7570
0.089
intent —
m3_intent_v1
JointBERT: intent + BIO slots + multi-label variables on a shared encoder
split: held-out template families {sow,heat,storm} AND 20% held-out districts
trained: 2026-09-04T08:43:34.868234Z
admission gate:
PASS
— intent macro-F1 0.746 vs rule parser 0.166, slot F1 0.988
metric
model
rule parser
intent macro-F1
0.7459
0.1664
intent accuracy
0.8361
0.5129
slot F1 (seqeval)
0.9878
not supported
variable micro-F1
0.1704
not supported
Held out: whole template families and whole districts, so neither a memorised sentence pattern nor a memorised place name can inflate this.
language
n
intent macro-F1
slot F1
as
91
0.7046
0.9819
bn
91
0.7486
0.9922
bn_latn
91
0.7774
0.9688
en
94
0.7477
0.9824
gu
91
0.7242
0.9948
hi
91
0.7475
0.9870
hi_latn
91
0.7508
0.9691
kn
91
0.7679
0.9948
ml
89
0.7538
1.0000
mr
91
0.7475
0.9948
or
91
0.7644
0.9923
pa
91
0.7475
0.9819
ta
91
0.7750
0.9948
te
91
0.7475
0.9948
calibration —
m4_calibration_v1
hurdle CSGD (precipitation: P(wet) x censored shifted gamma) + Gaussian EMOS (temperature, wind), CRPS-fitted, with isotonic-refined exceedance probabilities
dataset:
d1_multi_model_nwp_vs_era5_seamless
dataset sha256:
a3888e44c7a6bd09b8282f214b68b1e6
split: chronological 70% cutoff AND 20% spatially held-out locations
trained: 2026-09-04T06:00:18.494934Z
admission gate:
PASS
— calibrated Brier beats raw ensemble frequency at every threshold
variable
CRPS
raw ensemble CRPS
CRPS skill
precipitation
0.2491
0.2315
-0.076
Precipitation exceedance, Brier score (lower is better):
threshold
base rate
raw member count
calibrated
climatology
>0.1 mm
0.3161
0.16660
0.14883
0.21616
>1.0 mm
0.0932
0.08376
0.07243
0.08455
>5.0 mm
0.0083
0.00909
0.00807
0.00822
>10.0 mm
0.0012
0.00155
0.00124
0.00124
>25.0 mm
0.0001
0.00014
0.00010
0.00010
>50.0 mm
0.0000
0.00000
0.00000
0.00000
Transfer assumption.
Trained on a 4-member multi-model ensemble; served against the 31-member GFS ensemble. Only summary statistics cross the boundary, so the interface is identical, but the spread mapping is assumed rather than measured: the ensemble API serves members only for ~the last 4 days while ERA5 truth lags ~6, so the two windows never overlap and the transfer could not be verified.
trust_ranker —
m5_trust_ranker_v1
LightGBM LambdaMART over candidate NWP sources per (location, valid time, lead) group
dataset:
d1_multi_model_nwp_vs_era5_seamless
dataset sha256:
99fd37b00135687f2c1085d0e32fb99c
split: chronological 70% cutoff AND 20% spatially held-out locations
trained: 2026-09-03T16:25:33.240955Z
admission gate:
PASS
— beats the fixed authority order on 3/3 variables
variable
NDCG@1
picks the best source
fixed authority does
RMSE following ranker
RMSE following fixed order
temperature_2m
0.6876
0.383
0.346
1.308
1.443
precipitation
0.8506
0.237
0.170
1.056
1.124
wind_speed_10m
0.6777
0.377
0.317
3.993
4.582
Provenance
Bundle built 2026-09-04T09:46:12.951091Z from the
weathergpt-models
Modal volume.
Training corpora were built from Open-Meteo (multi-model NWP archives and ERA5 reanalysis), the CF standard name table, the ECMWF eccodes GRIB2 definitions, NOAA NCEP GRIB2 code tables and GFS inventories, the WRF Registry, the WMO BUFR element table, and the live SACHET/NDMA CAP feed.
Runs of Arko007 weathergpt-models on huggingface.co
0
Total runs
0
24-hour runs
0
3-day runs
0
7-day runs
0
30-day runs
More Information About weathergpt-models huggingface.co Model
weathergpt-models huggingface.co is an AI model on huggingface.co that provides weathergpt-models's model effect (), which can be used instantly with this Arko007 weathergpt-models model. huggingface.co supports a free trial of the weathergpt-models model, and also provides paid use of the weathergpt-models. Support call weathergpt-models model through api, including Node.js, Python, http.
weathergpt-models huggingface.co is an online trial and call api platform, which integrates weathergpt-models's modeling effects, including api services, and provides a free online trial of weathergpt-models, you can try weathergpt-models online for free by clicking the link below.
Arko007 weathergpt-models online free url in huggingface.co:
weathergpt-models is an open source model from GitHub that offers a free installation service, and any user can find weathergpt-models on GitHub to install. At the same time, huggingface.co provides the effect of weathergpt-models install, users can directly use weathergpt-models installed effect in huggingface.co for debugging and trial. It also supports api for free installation.