Notos: Multimodal Foundation Model for Wind Power Forecasting
Notos forecasts farm-level wind power from three modalities built from the same history window: the time series itself, its STFT spectrogram (CLIP ViT-B/32), and a text prompt (farm description + symbolic trend), fused by a LoRA-tuned Qwen2.5-0.5B decoder with a quantile head (21 quantiles, 0.01-0.99).
| Weights | Horizon (15-min steps) | Lead time |
|---|---|---|
weights/pred16 |
16 | 4 h |
weights/pred32 |
32 | 8 h |
weights/pred48 |
48 | 12 h |
weights/pred64 |
64 | 16 h |
All models share config.json and use 224 history steps (56 h @ 15 min).
Quick start
hf download gghans726/notos --include "inference/*" requirements.txt --local-dir notos && cd notos
pip install -r requirements.txt
python inference/run.py --pred_len 16 \
--metadata my_site.yaml \
--history my_history.csv \
--output pred.csv
config.json and the selected weights/pred{N}/model.safetensors are fetched from
this repo on first use if they are not present locally. The base backbones
(Qwen/Qwen2.5-0.5B, openai/clip-vit-base-patch32) are fetched from the Hub; for
offline use point NOTOS_LLM_PATH / NOTOS_CLIP_PATH to local copies.
Inputs
- History CSV: a timestamp column and a power column (auto-detected, or set
--timestamp-col/--power-col). It must cover at least 224 points after resampling to 15 min; any native interval <= 30 min is resampled automatically. - Site metadata YAML (template:
inference/site.yaml): sampling interval, power unit (kw/mw/kwh_per_slot), rated power, optional geo / turbine description, and farm-level normalization statistics. All fields are optional; a warning is printed for every field that falls back to a default. For best accuracy, compute the statistics once from weeks-to-months of history and paste the printed block into the YAML:
python inference/calibrate.py --history long_history.csv --metadata my_site.yaml
Output
A CSV with time, predicted_power_kw (median head) and q01_kw ... q99_kw
(quantile bands sorted to be monotone), all in kW.
Python API
import sys; sys.path.insert(0, 'inference')
from notos.data import build_features, load_csv
from notos.metadata import load_site
from notos.model import load, predict
model, cfg, tok = load(pred_len=32)
feat = build_features(load_csv('my_history.csv'), load_site('my_site.yaml'), tok, cfg)
df = predict(model, feat)
Data
The pre-training dataset and the test set used by Notos are available at gghans726/notos-wind-multimodal-data.
Repository layout
config.json shared model hyperparameters
weights/pred{16,32,48,64}/ model.safetensors
inference/run.py CLI: history CSV + site YAML -> forecast
inference/calibrate.py one-time farm statistics calibration
inference/site.yaml site metadata template
inference/notos/ model and preprocessing code
requirements.txt
- Downloads last month
- -
Model tree for gghans726/notos
Base model
Qwen/Qwen2.5-0.5B