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
6 changes: 6 additions & 0 deletions docs/changelogs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Changelog

Welcome to the FoundationForecast Changelog. Here you will find a list of changes, updates, and improvements for each release. Explore the details of each version below.

- [v0.1.3](v0.1.3.md)
- [v0.1.2](v0.1.2.md)
26 changes: 26 additions & 0 deletions docs/changelogs/v0.1.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
### Features

* **Tafsut foundation model**: Added support for [Tafsut](https://github.com/Tafsut-FM/tafsut), a zero-shot probabilistic univariate time series foundation model. Use it via the `Tafsut` class with checkpoint `Tafsut-FM/tafsut-univariate-base`.

```python
import pandas as pd
from foundationforecast import Tafsut

df = pd.read_csv(
"https://timecopilot.s3.amazonaws.com/public/data/air_passengers.csv",
parse_dates=["ds"],
)

model = Tafsut()
fcst_df = model.forecast(df, h=12)
```

* **GIFT-Eval replication experiment**: Added the `experiments/gift-eval` benchmark harness with Modal CI integration and Hugging Face leaderboard verification against published reference results.

### Fixes

* Improved quantile sorting, device handling, and model routing across foundation model backends.

---

**Full Changelog**: https://github.com/TimeCopilot/foundationforecast/compare/v0.1.1...v0.1.2
38 changes: 38 additions & 0 deletions docs/changelogs/v0.1.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
### Features

* **TimesFM 3.0 foundation model**: Added support for [`google/timesfm-3.0-pytorch`](https://huggingface.co/google/timesfm-3.0-pytorch) via a new `_TimesFMV3` backend powered by `TimesFM3Evaluator` and `ModelConfig` from [`timecopilot-timesfm>=0.4.0`](https://pypi.org/project/timecopilot-timesfm/). The wrapper treats each series independently (univariate panel mode), matching the existing TimesFM 2.5 integration pattern.

```python
import pandas as pd
from foundationforecast import TimesFM

df = pd.read_csv(
"https://timecopilot.s3.amazonaws.com/public/data/air_passengers.csv",
parse_dates=["ds"],
)

model = TimesFM(
repo_id="google/timesfm-3.0-pytorch",
alias="TimesFM-3",
context_length=2048,
)
fcst_df = model.forecast(df, h=12, freq="MS")
```

**License note:** TimesFM 3.0 pretrained weights are [non-commercial](https://huggingface.co/google/timesfm-3.0-pytorch/blob/main/LICENSE); TimesFM 1.0–2.5 checkpoints remain Apache-2.0.

* **GIFT-Eval**: Registered `google--timesfm-3.0-pytorch` (reference slug `TimesFM-3`) in the gift-eval model registry and added it to the CI replication subset on `m4_weekly/short`.

* **TimesFM family notebook**: Added [`timesfm-family` example notebook](../examples/timesfm-family.ipynb) comparing TimesFM 1.0, 2.0, 2.5, and 3.0 with supported prediction intervals.

### Dependencies

* Bumped `timecopilot-timesfm` from `>=0.3.0` to `>=0.4.0`.

### Documentation

* Updated README, model hub, and `TimesFM` docstrings with TimesFM 3.0 support and non-commercial license citation.

---

**Full Changelog**: https://github.com/TimeCopilot/foundationforecast/compare/v0.1.2...v0.1.3
1 change: 1 addition & 0 deletions docs/examples/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ For model API details, see the [Model Hub](../model-hub.md).
| Notebook | What you'll learn | Prerequisites |
|----------|-------------------|---------------|
| [Chronos Family](chronos-family.ipynb) | Forecast with Chronos 1.x and 2.x checkpoints | Python 3.10+ |
| [TimesFM Family](timesfm-family.ipynb) | Forecast with TimesFM 1.0, 2.0, 2.5, and 3.0 with prediction intervals | 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 |
5 changes: 5 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ nav:
- Compare Foundation Models: examples/ts-foundation-models-comparison-quickstart.ipynb
- Family Guides:
- Chronos: examples/chronos-family.ipynb
- TimesFM: examples/timesfm-family.ipynb
- TiRex: examples/tirex-family.ipynb
- Toto: examples/toto-family.ipynb
- Finetuning: examples/finetuning.ipynb
Expand All @@ -36,6 +37,10 @@ nav:
- Community:
- Getting Help: community/help.md
- Contributing: contributing.md
- Changelogs:
- changelogs/index.md
- changelogs/v0.1.3.md
- changelogs/v0.1.2.md

theme:
name: material
Expand Down
18 changes: 17 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,22 @@ docs = [
authors = [
{email = "azul.garza.r@gmail.com", name = "Azul Garza"},
]
classifiers = [
"Development Status :: 2 - Pre-Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Information Technology",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"gluonts[torch]",
"huggingface-hub>=0.36.2,<2.0",
Expand Down Expand Up @@ -55,7 +71,7 @@ license = "Apache-2.0"
name = "foundationforecast"
readme = "README.md"
requires-python = ">=3.10"
version = "0.1.2"
version = "0.1.3"

[project.optional-dependencies]
plot = [
Expand Down
18 changes: 17 additions & 1 deletion tests/docs/test_docs.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import re
from pathlib import Path

import pytest
Expand All @@ -7,7 +8,7 @@
@pytest.mark.docs
@pytest.mark.parametrize(
"fpath",
[p for p in Path("docs").rglob("*.md")],
[p for p in Path("docs").rglob("*.md") if "changelogs" not in p.parts],
ids=str,
)
@pytest.mark.flaky(reruns=3, reruns_delay=80)
Expand All @@ -21,6 +22,21 @@ def test_readme():
check_md_file("README.md", memory=True)


@pytest.mark.docs
def test_latest_changelog():
def version_key(filename):
match = re.search(r"(\d+\.\d+\.\d+)", str(filename))
if match:
version_string = match.group(1)
return tuple(map(int, version_string.split(".")))
return (0, 0, 0)

changelog_dir = Path("docs/changelogs")
changelogs = sorted(changelog_dir.glob("v*.md"), key=version_key)
latest_changelog = changelogs[-1] if changelogs else None
check_md_file(latest_changelog, memory=True)


@pytest.mark.docs
@pytest.mark.parametrize(
"fpath",
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading