Yug
Yug is a pretrained 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.
- Model weights:
birlaailabs/yug - Package:
pip install yug - Issues and questions: GitHub Issues
Latest version: Yug 0.1.0
Update — October 2026
First public release of Yug.
Key highlights:
- Zero-shot forecasting. One pretrained checkpoint forecasts any evenly spaced numeric series, across domains and frequencies, without fitting.
- Probabilistic by default. Every forecast comes back as quantile levels, not a single line, so intervals are available at no extra cost.
- Fast direct multi-step decoding. A patch-based decoder emits a whole block of future points per forward pass; there is no per-step generation loop.
- Covariate support. Optional additional channels alongside the target.
- Drop-in benchmarking. A GluonTS predictor for existing evaluation harnesses.
Available models
| Model | Parameters | Quantile levels | Context length |
|---|---|---|---|
birlaailabs/yug |
271.8M | 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 | 2048 |
Install
From PyPI:
pip install yug
Optional extras:
pip install 'yug[pandas]' # used in the example below
pip install 'yug[gluonts]' # GluonTS predictor for benchmark harnesses
Check the machine can run it before downloading weights:
yug-check
Weights are cached locally on first use (~/.cache/huggingface/hub by
default, or HF_HOME if set).
Code examples
1. Forecast one series
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())
2. 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)
3. With covariates
Stack channels into a 2-D array, target first, and pass it as a single series:
multivariate = np.stack([target, covariate_1, covariate_2])
forecast = pipeline.predict([multivariate], prediction_length=48)
4. 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))
Examples
notebooks/quickstart.ipynb— forecast, plot and score a series end to end. Self-contained; generates its own data.notebooks/gift_eval.ipynb— run the GIFT-Eval benchmark to reproduce the published scores.
Citation
@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},
license = {Apache-2.0}
}
Note: Aaditya Jain and Debdeep Sanyal contributed equally.
License
Code in this repository is licensed under the Apache License 2.0. Model weights on Hugging Face are licensed separately under a noncommercial license, see the model card for terms.
Metadata
Release files for yug 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yug-0.1.0.tar.gz | 55.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yug-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 106.7 kB
Release files / yug-0.1.0.tar.gz
| Download URL | yug-0.1.0.tar.gz |
|---|---|
| Size | 55.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6368fc555799d851f5c9ba0fdaf1a342276b244e6c8e4b48ce34ae82678a6929
|
|
BLAKE2b-256 checksum How to use checksums |
e414ee4373c072744d8c1149501114aab1900fa1c0552de0e6d50da17cc696f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / yug-0.1.0-py3-none-any.whl
| Download URL | yug-0.1.0-py3-none-any.whl |
|---|---|
| Size | 51.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0f8d46262b92e8ce46e4744a8ee51e5cdf28b90025b0128c839e5a3205f9b2da
|
|
BLAKE2b-256 checksum How to use checksums |
d2c183ab7d6be035322fda871a6d01e08032fced63ba9b9fd014c58f0f338f6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|