Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/api/models/foundation/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@
- T0


::: timecopilot.models.foundation.tabby
options:
members:
- Tabby

::: timecopilot.models.foundation.tafsut
options:
members:
Expand All @@ -48,6 +53,11 @@
- TimeGPT
- TimeGPTFinetuningConfig

::: timecopilot.models.foundation.timeh2o
options:
members:
- TimeH2O

::: timecopilot.models.foundation.timesfm
options:
members:
Expand Down
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.40](v0.0.40.md)
- [v0.0.39](v0.0.39.md)
- [v0.0.38](v0.0.38.md)
- [v0.0.37](v0.0.37.md)
Expand Down
19 changes: 19 additions & 0 deletions docs/changelogs/v0.0.40.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
### Features

* **Tabby**: Re-export [`Tabby`](../api/models/foundation/models.md#timecopilot.models.foundation.tabby) from `foundationforecast>=0.1.17` for Huawei Paris Noah's Ark Lab's [`paris-noah/Tabby`](https://huggingface.co/paris-noah/Tabby) ([arXiv:2609.13956](https://arxiv.org/abs/2609.13956)), a ~147M prompted patch transformer with 99 native quantiles (0.01–0.99). Follows the published inference path with a `precision` option (`"bf16"` autocast on CUDA by default). Loads with `trust_remote_code`; weights are CC BY-NC 4.0.

* **TimeH2O**: Re-export [`TimeH2O`](../api/models/foundation/models.md#timecopilot.models.foundation.timeh2o) from `foundationforecast>=0.1.16` for H2O.ai's [`timeh2o-v1`](https://huggingface.co/h2oai/timeh2o-v1) and [`timeh2o-v1-tiny`](https://huggingface.co/h2oai/timeh2o-v1-tiny) checkpoints (`h2ofm>=0.43.0`, Python 3.12+), with `clip_nonnegative` / `snap_integer` options matching the published benchmark runs. The checkpoints are gated and released under a non-commercial license.

### Documentation

* **Tabby family notebook**: Added [`tabby-family` example notebook](../examples/tabby-family.ipynb) cross-validating Tabby with its published settings.
* **TimeH2O family notebook**: Added [`timeh2o-family` example notebook](../examples/timeh2o-family.ipynb) comparing both checkpoints and the benchmark settings.
* **Model hub**: List Tabby and TimeH2O with license and dependency notes.

### Dependencies

* **FoundationForecast**: Require `foundationforecast>=0.1.17` (Tabby and TimeH2O wrappers).

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.39...v0.0.40
2 changes: 2 additions & 0 deletions docs/examples/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ For model API details, see the [Model Hub](../model-hub.md).
| [PatchTST-FM Family](patchtst-fm-family.ipynb) | Forecast with IBM Research PatchTST-FM r1 and Granite PatchTST-FM r1/r2 | Python 3.11–3.13; GPU recommended |
| [T0 Family](t0-family.ipynb) | Forecast with t0-alpha, t0-beta and t0-gamma, including the t0-gamma benchmark settings | Python 3.11–3.13; GPU recommended |
| [Timestral Family](timestral-family.ipynb) | Forecast with Timestral 5M, 28M, 123M and 209M | Python 3.10+ |
| [TimeH2O Family](timeh2o-family.ipynb) | Forecast with timeh2o-v1 and timeh2o-v1-tiny, including benchmark settings | Python 3.12+; gated (`HF_TOKEN`) |
| [TabPFN Family](tabpfn-family.ipynb) | Forecast with TabPFN-2 and TabPFN-3 with prediction intervals | Python 3.10–3.12; `TABPFN_TOKEN` for LOCAL |
| [Tabby Family](tabby-family.ipynb) | Cross-validate Tabby (`paris-noah/Tabby`) with its published GIFT-Eval inference settings | Python 3.10+ |
| [TiRex Family](tirex-family.ipynb) | Forecast with TiRex 1.0 and 2.0 | Python 3.11+ |
| [Toto Family](toto-family.ipynb) | Forecast with Toto 1.0 and 2.0 | Python 3.10+ |
| [Finetuning](finetuning.ipynb) | Adapt Chronos 2 and TimeGPT to your data | Python 3.10+; GPU recommended |
Expand Down
871 changes: 871 additions & 0 deletions docs/examples/tabby-family.ipynb

Large diffs are not rendered by default.

4,381 changes: 4,381 additions & 0 deletions docs/examples/timeh2o-family.ipynb

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions docs/model-hub.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,12 @@ TimeCopilot provides a unified interface to state-of-the-art foundation models f
- [PatchTST-FM](api/models/foundation/models.md#timecopilot.models.foundation.patchtst_fm) ([arXiv:2602.06909](https://arxiv.org/abs/2602.06909); `ibm-research/patchtst-fm-r1` [NC](https://huggingface.co/ibm-research/patchtst-fm-r1), `ibm-granite/granite-timeseries-patchtst-fm-r1`, `ibm-granite/granite-timeseries-patchtst-fm-r2`) — Python 3.11–3.13
- [Sundial](api/models/foundation/models.md#timecopilot.models.foundation.sundial) ([arXiv:2502.00816](https://arxiv.org/pdf/2502.00816))
- [T0](api/models/foundation/models.md#timecopilot.models.foundation.t0) ([t0-alpha](https://huggingface.co/theforecastingcompany/t0-alpha), [t0-beta](https://huggingface.co/theforecastingcompany/t0-beta), [t0-gamma](https://huggingface.co/theforecastingcompany/t0-gamma); requires `tfc-t0[torch]>=0.6.0`) — Python 3.11–3.13
- [Tabby](api/models/foundation/models.md#timecopilot.models.foundation.tabby) ([arXiv:2609.13956](https://arxiv.org/abs/2609.13956), [`paris-noah/Tabby`](https://huggingface.co/paris-noah/Tabby)) — 99 native quantiles (0.01–0.99); `trust_remote_code`; [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)
- [TabPFN](api/models/foundation/models.md#timecopilot.models.foundation.tabpfn) ([arXiv:2501.02945](https://arxiv.org/abs/2501.02945); TabPFN-2 default, TabPFN-3 via `model_path`; [NC license](https://docs.priorlabs.ai/models))
- [Tafsut](api/models/foundation/models.md#timecopilot.models.foundation.tafsut) ([GitHub](https://github.com/Tafsut-FM/tafsut))
- [TiRex / TiRex-2](api/models/foundation/models.md#timecopilot.models.foundation.tirex) ([arXiv:2505.23719](https://arxiv.org/abs/2505.23719), [arXiv:2607.01204](https://arxiv.org/abs/2607.01204))
- [TimeGPT](api/models/foundation/models.md#timecopilot.models.foundation.timegpt) ([arXiv:2310.03589](https://arxiv.org/abs/2310.03589))
- [TimeH2O](api/models/foundation/models.md#timecopilot.models.foundation.timeh2o) ([timeh2o-v1](https://huggingface.co/h2oai/timeh2o-v1), [timeh2o-v1-tiny](https://huggingface.co/h2oai/timeh2o-v1-tiny); requires `h2ofm>=0.43.0`) — Python 3.12+; gated, non-commercial weights (`HF_TOKEN`)
- [TimesFM](api/models/foundation/models.md#timecopilot.models.foundation.timesfm) ([arXiv:2310.10688](https://arxiv.org/abs/2310.10688); [3.0 license](https://huggingface.co/google/timesfm-3.0-pytorch/blob/main/LICENSE))
- [Timestral](api/models/foundation/models.md#timecopilot.models.foundation.timestral) ([Timestral-5M/28M/123M/209M](https://huggingface.co/collections/mistralai/timestral); requires `timecopilot-timestral>=0.1.0`) — Modified MIT weights (revenue cap)
- [Toto](api/models/foundation/models.md#timecopilot.models.foundation.toto) ([arXiv:2505.14766](https://arxiv.org/abs/2505.14766))
Expand Down
3 changes: 3 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,10 @@ nav:
- PatchTST-FM: examples/patchtst-fm-family.ipynb
- T0: examples/t0-family.ipynb
- Timestral: examples/timestral-family.ipynb
- TimeH2O: examples/timeh2o-family.ipynb
- TiRex: examples/tirex-family.ipynb
- TabPFN: examples/tabpfn-family.ipynb
- Tabby: examples/tabby-family.ipynb
- Toto: examples/toto-family.ipynb
- Finetuning: examples/finetuning.ipynb
- Benchmarks and Ensembles:
Expand All @@ -66,6 +68,7 @@ nav:
- experiments/fev.md
- Changelogs:
- changelogs/index.md
- changelogs/v0.0.40.md
- changelogs/v0.0.39.md
- changelogs/v0.0.38.md
- changelogs/v0.0.37.md
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ dependencies = [
"catboost>=1.2.10",
"datasets>=4.1.1",
"fire",
"foundationforecast>=0.1.15",
"foundationforecast>=0.1.17",
"fsspec>=2025.9.0",
"huggingface-hub>=0.36.2,<2.0",
"hydra-core>=1.3.2",
Expand Down
8 changes: 7 additions & 1 deletion tests/models/foundation/test_shims.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@

from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.moirai import Moirai
from timecopilot.models.foundation.tabby import Tabby
from timecopilot.models.foundation.tafsut import Tafsut
from timecopilot.models.foundation.timegpt import TimeGPT
from timecopilot.models.foundation.timesfm import TimesFM
from timecopilot.models.foundation.timestral import Timestral
from timecopilot.models.foundation.toto import Toto
from timecopilot.models.utils.forecaster import Forecaster

SHIM_MODELS = [Chronos, Moirai, Tafsut, TimesFM, Timestral, Toto, TimeGPT]
SHIM_MODELS = [Chronos, Moirai, Tabby, Tafsut, TimesFM, Timestral, Toto, TimeGPT]

if sys.version_info >= (3, 11):
from timecopilot.models.foundation.tirex import TiRex
Expand All @@ -25,6 +26,11 @@

SHIM_MODELS.extend([FlowState, PatchTSTFM, T0])

if sys.version_info >= (3, 12):
from timecopilot.models.foundation.timeh2o import TimeH2O

SHIM_MODELS.append(TimeH2O)

if sys.version_info < (3, 13):
from timecopilot.models.foundation.sundial import Sundial
from timecopilot.models.foundation.tabpfn import TabPFN
Expand Down
14 changes: 14 additions & 0 deletions tests/models/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,20 @@ def test_timestral_import():
from timecopilot.models.foundation.timestral import Timestral # noqa: F401


def test_tabby_import():
from timecopilot.models.foundation.tabby import Tabby # noqa: F401


@pytest.mark.skipif(
sys.version_info >= (3, 12),
reason="TimeH2O requires Python >= 3.12",
)
def test_timeh2o_import_fails():
with pytest.raises(ImportError) as excinfo:
from timecopilot.models.foundation.timeh2o import TimeH2O # noqa: F401
assert "requires Python >= 3.12" in str(excinfo.value)


@pytest.mark.skipif(
sys.version_info >= (3, 11),
reason="TiRex requires Python >= 3.11",
Expand Down
7 changes: 7 additions & 0 deletions timecopilot/models/foundation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from .chronos import Chronos, ChronosFinetuningConfig
from .moirai import Moirai
from .tabby import Tabby
from .tafsut import Tafsut
from .timegpt import TimeGPT, TimeGPTFinetuningConfig
from .timesfm import TimesFM
Expand All @@ -12,6 +13,7 @@
"Chronos",
"ChronosFinetuningConfig",
"Moirai",
"Tabby",
"Tafsut",
"TimeGPT",
"TimeGPTFinetuningConfig",
Expand All @@ -32,6 +34,11 @@

__all__.extend(["FlowState", "PatchTSTFM", "T0"])

if sys.version_info >= (3, 12):
from .timeh2o import TimeH2O as TimeH2O

__all__.append("TimeH2O")

if sys.version_info < (3, 13):
from .sundial import Sundial as Sundial
from .tabpfn import TabPFN as TabPFN
Expand Down
10 changes: 10 additions & 0 deletions timecopilot/models/foundation/tabby.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from foundationforecast.models.tabby import Tabby as _Tabby

from ..utils.forecaster import Forecaster


class Tabby(_Tabby, Forecaster):
pass


__all__ = ["Tabby"]
10 changes: 10 additions & 0 deletions timecopilot/models/foundation/timeh2o.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from foundationforecast.models.timeh2o import TimeH2O as _TimeH2O

from ..utils.forecaster import Forecaster


class TimeH2O(_TimeH2O, Forecaster):
pass


__all__ = ["TimeH2O"]
Loading
Loading