Skip to content

Releases: theforecastingcompany/tfc-t0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 09:47
Immutable release. Only release title and notes can be modified.
v0.6.0
4871c64

Adds support for t0-gamma.

Changed

  • Breaking. tfc-t0 is now one package with two runtimes, installed with
    pip install "tfc-t0[torch]" or pip install "tfc-t0[mlx]". The MLX
    runtime moves from t0_mlx to t0.mlx, and the PyTorch model from
    t0.model to t0.torch.model.
  • The MLX runtime now runs the same predict as the PyTorch runtime, with the
    same arguments and results.

Added

  • New inference parameters on predict that improve forecasts, using only
    each series' own history. They are off by default in predict and on by
    default in T0Predictor:
    • trim_leading_missing ignores the missing values before a series' first
      observation.
    • symmetric_averaging also forecasts the negated series and averages the two
      forecasts. It doubles the compute and skips series whose minimum is zero.
    • clip_nonnegative keeps forecasts at or above zero when the history is
      never negative.
    • snap_integers rounds forecasts when the history holds only integers.
  • Support for t0-gamma, the third public model. It needs this release to
    run correctly, since older releases ignore the conventions in its config.json.
  • cross_inference on T0Predictor forecasts several series of the same
    window together, so the model can compare them. It is how t0-gamma's
    GIFT-Eval scores are measured.
  • xpos_scale_layout and scaler_zero_no_value on T0Config. They let a
    checkpoint's config.json state two numerical conventions it was trained
    with, and the defaults keep the current behaviour.
  • The MLX runtime accepts a TimeSeries as input, with covariate rows in any
    order, and gains TimeSeries.batch.
  • A notebook
    forecasting European electricity spot prices.
  • A link to the t0 paper on arXiv.

Fixed

  • Historical covariates are now handled over the forecast horizon as in
    training. Forecasts that use them over a horizon longer than 32 steps change.
  • Known-future covariates no longer attend to the target and historical rows,
    as in training. Forecasts that use them change by a few percent.
  • A covariate's first patch is no longer mistaken for a target when the
    context length is not a multiple of 32. Forecasts change slightly for those
    covariate rows only.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 17 Sep 14:21
Immutable release. Only release title and notes can be modified.

Adds support for t0-beta, the 256M-parameter second public checkpoint.
Earlier releases load its weights without error but run them under
t0-alpha's normalization, which silently degrades the forecast — this is the
minimum version that serves it correctly.

Added

  • T0Config.large(), the 256M-parameter configuration published as t0-beta:
    embed_dim 1024 and a 21-level quantile head spanning 0.01 to 0.99.
  • scaler_eps and scaler_eps_mode on T0Config, so the convention a
    checkpoint was trained under travels in its config.json.
    "variance_offset" computes sqrt(variance + eps) and "std_clamp"
    computes sqrt(variance).clamp(min=eps); the two agree wherever a series'
    local standard deviation sits well above eps and diverge below it, so a
    checkpoint is only valid under the one it trained with. The defaults
    reproduce t0-alpha, whose published config.json predates both fields.

Changed

  • Breaking. T0Forecaster.predict's quantiles argument is now
    quantile_levels. It always carried levels rather than quantile values, and
    the returned Forecast already called them quantile_levels, so the same
    concept had two names on either side of one call. Replace
    predict(..., quantiles=[0.1, 0.5, 0.9]) with
    predict(..., quantile_levels=[0.1, 0.5, 0.9]). Forecast.quantiles, which
    holds the forecast values, is unchanged.

  • Quantile levels requested beyond the trained range (outside [0.1, 0.9]) now
    follow IQF exponential tails
    (Park et al., arXiv 2111.06581) pinned
    through the outermost trained levels, instead of clamping flat to the nearest
    trained level.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 13:05
Immutable release. Only release title and notes can be modified.

Breaking. T0Forecaster now has two forecasting methods instead of four.

Changed

  • forward(model_input) runs a single differentiable pass over a TimeSeries, with
    no rollout. Use it to fine-tune.
  • predict(model_input, horizon, quantiles, ...) is inference-only and rolls out
    autoregressively past max_horizon. It takes a TimeSeries, and still converts a
    raw context array on the fly, so array callers are unaffected.
  • context_length is optional and defaults to the start of the forecast region.
  • prepare_rollout_buffer and predict_step are internal to RolloutManager again.

Removed

  • predict_from_time_series. Replace predict_from_time_series(ts, h, ctx, q) with
    predict(ts, h, q, context_length=ctx).

Fixed

  • Patcher.pad aligned the patch grid to the input's total width rather than to the
    context boundary. It now left-pads to the context boundary and right-pads the
    forecast region to whole patches. predict was never affected, because
    RolloutManager already aligned its buffer. Calling forward directly with
    known-future covariates returned a wrong forecast that still looked valid. On
    t0-alpha with a 24-step context and a 12-step horizon it moved MAE from 3.72 to 8.32.

Added

  • horizon on TimeSeries.from_array, extending the target rows with that many
    WITHHELD steps to mark the region to predict. Future covariates imply it from
    their width.
  • Patcher.context_end, the index where the forecast region begins.
  • time_series_from_array in t0.data, to build a TimeSeries from a raw context array.
  • Gradient tests in tests/test_forward.py and doctests on Patcher.pad.

tfc-t0-mlx v0.1.0a1

tfc-t0-mlx v0.1.0a1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Sep 20:19
Immutable release. Only release title and notes can be modified.

Fixed

  • Preserve annotated release tags during source verification and build from
    the verified commit. The 0.1.0a0 publication stopped at source verification;
    this release contains the same runtime implementation.
  • Document the full FP32 setting used for checkpoint parity on Apple M5.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 01 Sep 12:32
Immutable release. Only release title and notes can be modified.
v0.3.1
fc6fb44

Documentation-only release.

Fixed

  • Image paths in README
  • Hugging Face license links in the model card.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 09:01
Immutable release. Only release title and notes can be modified.
v0.3.0
626d5b5

Added

  • batch_series — batch series of different lengths and variate counts into one
    padded context, the mask describing it, and the group ids that keep each
    series' variates forecast jointly. Pass all three to predict.
  • mask and group_ids arguments on T0Forecaster.predict. mask marks every
    context cell as an absent observation (MaskType.MISSING) or as padding for a
    shorter series (MaskType.PAD); group_ids says which context rows are
    variates of one series. MaskType is exported for building masks by hand.
  • Without a mask, NaN in the context is read as a missing observation, as
    before — padding is the one case NaN cannot express on its own.

Fixed

  • Padding a batch of unequal-length series no longer moves the shorter rows'
    forecasts. A patch covered entirely by padding drops out of attention, so a
    series' forecast no longer depends on how long its batch mates are — it moved
    by up to 12.5% before. Batch through batch_series, or mark the padding
    MaskType.PAD, to get it.

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 30 Jul 15:51
Immutable release. Only release title and notes can be modified.
v0.2.3
a676701

Fixed

  • First patches were not attended to when leading time steps were padding.
    It resulted in degraded performances of the model.

Changed

  • Internals of the model regarding mask computation and patched variables handling.

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 20 Jul 13:03
Immutable release. Only release title and notes can be modified.
v0.2.2
82907da

Changed

  • Removed the upper version caps on all core runtime dependencies (torch,
    einops, rotary-embedding-torch, huggingface-hub, safetensors,
    numpy, jaxtyping). Constraints are now floor-only, so downstream
    integrators (e.g. Darts) can resolve newer releases without being blocked.
    Floors are bumped when a new major is tested rather than capped speculatively.
  • Removed the upper version caps on the optional extras as well (gluonts,
    matplotlib, pandas), matching the floor-only policy.
  • Dropped the requires-python upper bound (<3.15); the package now declares
    >=3.10 with no ceiling, so it never blocks users on newer Python releases.

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 01 Jul 20:05
Immutable release. Only release title and notes can be modified.
04124c6

Added

  • Python 3.10 support — the minimum supported version is now 3.10 (previously 3.11).

Fixed

  • Inference quickstart notebook: move the median forecast to CPU before
    computing the error metric, so the dtype-routing demo runs on GPU as well as
    on CPU.