Yug
Yug is a 271.8M-parameter time series foundation model developed by Birla AI Labs for zero-shot probabilistic forecasting. A single checkpoint forecasts a previously unseen series without task-specific training or per-series tuning: given a historical context and a forecast horizon, it returns a predictive distribution summarised by quantile levels. It supports univariate and covariate-informed forecasting within a single architecture.
Links
- π» GitHub
- π Quickstart notebook
- π Issues and questions
Overview
| Capability | Yug |
|---|---|
| Univariate forecasting | β |
| Covariates | β |
| Probabilistic (quantile) output | β |
| Max context length | 2048 |
| Quantile levels | 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 |
Model architecture
| Parameters | 271,845,260 |
| Model dimension | 960 |
| Decoder layers | 12 |
| Attention heads | 8 |
| MLP expansion | 1.25 |
| Patch length | 16 |
| Block size (points per forward pass) | 64 |
| Precision | float32 |
| Format | safetensors |
Running the model locally
Install the package:
pip install yug
Optional extras:
pip install 'yug[pandas]' # needed for forecast.to_dataframe()
pip install 'yug[gluonts]' # GluonTS predictor for benchmark harnesses
Check the machine can run it before downloading weights:
yug-check
Make zero-shot predictions:
import numpy as np
from yug import YugPipeline
pipeline = YugPipeline.from_pretrained(
"birlaailabs/yug", device_map="cuda"
)
# Synthetic signal: trend + 64-step season + 12-step season + noise
CONTEXT, HORIZON, PERIOD = 2000, 256, 64
rng = np.random.default_rng([20240902, 315595964, 0])
t = np.arange(CONTEXT + HORIZON)
trend = np.linspace(0.0, rng.uniform(50, 150), len(t))
phase1, amp1 = rng.uniform(0, 6), rng.uniform(10, 30)
phase2, amp2 = rng.uniform(0, 6), rng.uniform(2, 8)
signal = (
trend # trend
+ amp1 * np.sin(2 * np.pi * t / PERIOD + phase1) # 64-step season
+ amp2 * np.sin(2 * np.pi * t / 12 + phase2) # 12-step season
+ rng.normal(0, 1.0, len(t)) # noise
).astype(np.float32)
context, truth = signal[:CONTEXT], signal[CONTEXT:]
forecast = pipeline.predict(
context,
prediction_length=HORIZON,
freq="D", # a model input, not metadata: pandas offset alias
seed=0, # makes the call reproducible
)
print(forecast.median) # (256,) point forecast
print(forecast.quantile(0.9)) # (256,)
print(forecast.interval()) # {"lower": (256,), "upper": (256,)}
print(forecast.to_dataframe().head())
Several series at once (lengths and frequencies may differ):
forecast = pipeline.predict(
[series_a, series_b, series_c],
prediction_length=48,
freq=["D", "D", "H"],
item_ids=["a", "b", "c"],
)
forecast.values # (3, n_quantiles, 48)
With covariates β stack channels into a 2-D array, target first:
multivariate = np.stack([target, covariate_1, covariate_2])
forecast = pipeline.predict([multivariate], prediction_length=48)
Covariate forecasts degrade faster with horizon than univariate ones. For long horizons the univariate path is often the better answer β measure both.
In a GluonTS benchmark:
from yug.gluonts_adapter import YugPredictor
predictor = YugPredictor.from_pretrained(
"birlaailabs/yug", freq="H", prediction_length=48
)
forecasts = list(predictor.predict(dataset))
Training data
- Subset of Chronos Datasets
- Subset of GIFT-Eval Pretrain
- Proprietary synthetic data
Citation
If you find Yug useful for your research, please consider citing it:
@software{yug_2026,
title = {Yug: a foundation model for zero-shot probabilistic time-series forecasting},
author = {Aaditya Jain* and Debdeep Sanyal* and Aaryan Nagpal and Dhruv Kumar and Murari Mandal and Saurabh Deshpande},
year = {2026},
organization = {Birla AI Labs},
url = {https://github.com/birla-ai-labs/yug}
}
*Equal contribution.
Acknowledgements
We thank Karthik Sridhar, Deepak Lenka, Akash Kokare, Manya Pandey, and Varya Srivastava, as well as the extended Birla AI Labs team for their support.
License
Model weights : CC-BY-NC 4.0
Code : licensed separately β see GitHub repository for its license.
- Downloads last month
- 57