--- license: apache-2.0 base_model: theforecastingcompany/t0-alpha pipeline_tag: time-series-forecasting tags: - time-series - forecasting - foundation-models - onnx - onnxruntime - onnxruntime-web - int8 - browser --- # tsfm-onnx: t0-alpha for the browser Browser-ready ONNX exports of [t0-alpha](https://huggingface.co/theforecastingcompany/t0-alpha), the zero-shot time-series foundation model by [The Forecasting Company](https://theforecastingcompany.com). These graphs run a full probabilistic forecast in about 100 ms under [onnxruntime-web](https://onnxruntime.ai/docs/tutorials/web/) (WASM), with no server and no Python. This is an unofficial conversion, not affiliated with or endorsed by The Forecasting Company. The conversion pipeline, a browser app using these files, an export guide, and a debugging logbook live at [github.com/siddharth7113/tsfm-onnx](https://github.com/siddharth7113/tsfm-onnx). ## Files | File | Size | Graph | Precision | |---|---|---|---| | `t0-alpha-ctx512-h64.onnx` | 411 MB | univariate | fp32 | | `t0-alpha-ctx512-h64-int8.onnx` | 108 MB | univariate | int8 (dynamic, per-channel) | | `t0-alpha-ctx512-h64-mv.onnx` | 411 MB | grouped (multivariate) | fp32 | | `t0-alpha-ctx512-h64-mv-int8.onnx` | 108 MB | grouped (multivariate) | int8 (dynamic, per-channel) | ## Graph contract Univariate graph: ``` input context float32 [batch, 512] NaN marks missing values output quantiles float32 [batch, 64, 5] levels [0.1, 0.25, 0.5, 0.75, 0.9] ``` Grouped (multivariate) graph adds one input: ``` input group_ids int64 [rows] ``` Rows that share a group id are forecast jointly as variates of one system (they inform each other through the model's group attention); rows with distinct ids are independent series. Flatten `[B, V, T]` to `[B*V, T]` and pass ids like `[0, 0, 0, 1, 1, 1]`. Practical notes: - Series shorter than 512 points: LEFT-pad with NaN. The model treats NaN as "missing" and was trained on gappy data, so this is a valid input, not an approximation. Series longer than 512: pass the most recent 512. - The context length (512) and horizon (64) are baked into the graphs. Other sizes require re-export (see the GitHub repo). - Known future covariates are not exported. ## Usage JavaScript (onnxruntime-web): ```js const session = await ort.InferenceSession.create(modelUrl, { executionProviders: ["wasm"] }); const ctx = new Float32Array(512).fill(NaN); ctx.set(series.slice(-512), 512 - Math.min(series.length, 512)); const out = await session.run({ context: new ort.Tensor("float32", ctx, [1, 512]) }); // out.quantiles.data is row-major [batch, step, level]; element (s, l) is at s * 5 + l ``` Python (onnxruntime): ```python import numpy as np, onnxruntime as ort sess = ort.InferenceSession("t0-alpha-ctx512-h64.onnx") context = np.full((1, 512), np.nan, dtype=np.float32) context[0, -len(series):] = series[-512:] (quantiles,) = sess.run(None, {"context": context}) # (1, 64, 5) ``` ## Fidelity | Check | Result | |---|---| | fp32 ONNX vs library `model.predict()`, identical input | max abs diff 1.7e-05 | | grouped graph vs multivariate `predict()`, both id modes | max abs diff 1.7e-05 | | onnxruntime-web (WASM) vs native ONNX Runtime | at most 1.5e-05 | | int8 vs fp32 forecast drift | about 1% mean of forecast spread on long series; up to 3% mean / 17% max on short NaN-padded series | Every export is validated against the original [tfc-t0](https://github.com/theforecastingcompany/tfc-t0) library at export time; the numbers above are reproducible from the scripts in the GitHub repo. Prefer fp32 when fidelity matters more than the download size. ## How these were made Exported with the PyTorch dynamo exporter from `tfc-t0` 0.2.3 (torch 2.8), wrapping the library's single-forward-pass inference path with branch-free equivalents of its data-dependent Python. Quantization is ONNX Runtime dynamic int8 with per-channel weights. The full worked case study (including every failure and fix) is in the repo's [export guide](https://github.com/siddharth7113/tsfm-onnx/blob/main/docs/ONNX_EXPORT_GUIDE.md) and [logbook](https://github.com/siddharth7113/tsfm-onnx/blob/main/docs/LOGBOOK.md). ## License and attribution The t0-alpha weights are released by The Forecasting Company under Apache-2.0 (with gated access on the original repository); these files are a converted redistribution of those weights under the same license, with attribution. Per the tfc-t0 source headers, parts of the architecture derive from [Toto](https://github.com/DataDog/toto) (Datadog) and [Chronos](https://github.com/amazon-science/chronos-forecasting) (Amazon Science), both Apache-2.0. If you use these files, please credit The Forecasting Company and consider citing their [model card](https://huggingface.co/theforecastingcompany/t0-alpha).