Commit Graph

324 Commits

Author SHA1 Message Date
Rajat Sen e56854bc9e Bump version to 2.0.1 2026-06-08 17:17:36 +00:00
Rajat Sen 2f1625c208 Fix model loading issues and forecast_naive slicing bug in TimesFM 2.5
- Allow model wrapper constructors (__init__) to accept and ignore extra keyword arguments (e.g. proxies) passed by huggingface_hub during from_pretrained.
- Implement load_checkpoint for TimesFM_2p5_200M_torch and TimesFM_2p5_200M_flax to restore weights from local paths.
- Fix slicing bug in PyTorch's forecast_naive to correctly slice the time/horizon dimension ([:, :horizon, :]) instead of quantiles.
- Add unit tests in tests/test_model_loading.py covering local checkpoint loading, hub compatibility, and prediction shape correctness.
2026-06-07 17:28:32 +00:00
Yichen Zhou b3d0dec6ec Update README.md 2026-06-05 12:42:18 -07:00
Yichen Zhou ace12a8a94 Update README.md
timesfm=2.0.0
2026-06-05 12:41:22 -07:00
Yichen Zhou d720daa678 Update README.md 2026-04-14 22:59:09 -07:00
Yichen Zhou eacf761c32 Merge pull request #398 from darkpowerxo/feat/peft-finetuning-pipeline-2.5
feat: PEFT fine-tuning pipeline (LoRA/DoRA, multi-GPU) for TimesFM 2.5
2026-04-14 22:49:22 -07:00
darkpowerxo 6ae67d41d8 revert: drop PR #393 (xreg batch behavior) and PR #390 (SKILL.md link) per maintainer feedback 2026-04-09 23:00:36 -04:00
darkpowerxo caddef1db8 refactor: replace custom PEFT pipeline with Transformers+PEFT example
Remove the custom peft/ directory (LoRA/DoRA adapters, trainer, data
pipeline) in favor of a lightweight fine-tuning example that uses the
standard HuggingFace Transformers + PEFT ecosystem.

The new example at timesfm-forecasting/examples/finetuning/ demonstrates
LoRA fine-tuning via TimesFm2_5ModelForPrediction and the peft library,
based on the approach by @kashif at HuggingFace.

- Remove peft/ (8 files)
- Add timesfm-forecasting/examples/finetuning/finetune_lora.py
- Add timesfm-forecasting/examples/finetuning/README.md
- Update README.md to reference new example
- Clean up .gitignore (remove peft_checkpoints/)
2026-04-09 11:29:40 -04:00
darkpowerxo 18d5eb2d44 fix: improve PEFT device consistency and XReg output slicing
- Initialize LoRA parameters on the same device as the base linear layer
- Load adapter weights directly to the model device instead of hardcoded CPU
- Slice XReg linear regression outputs to match the specified sequence lengths

- Replace batch-wide covariate normalization with per-input normalization
  in create_covariate_matrix to prevent cross-input scale leakage.
- Refactor BatchedInContextXRegLinear.fit to solve ridge regression
  per instance rather than as a single global matrix solve, avoiding
  cross-contamination between batched inputs.
- Truncate JAX regression outputs to the actual train/test lengths
  after the padded matrix multiply, fixing shape mismatches for
  non-power-of-2 horizons (e.g. horizon=24 was returning 32 elements).
2026-04-08 21:43:52 -04:00
darkpowerxo ad192b7954 docs: update README — replace 'under construction' with completed status
- Add Apr. 2026 update entry for PEFT pipeline, unit tests, and community fixes
- Replace 'under construction' numbered list with checklist of completed items:
  Flax model, covariate support, docs/examples, PEFT pipeline, unit tests
2026-04-08 15:25:53 -04:00
darkpowerxo 54f5405b7d docs: fix swapped xreg_mode descriptions and typo in error message
Apply changes from PR #366 by @cj-wong:
- Correct xreg_mode docstring: descriptions for 'xreg + timesfm' and
  'timesfm + xreg' were swapped
- Fix 'covaraites' -> 'covariates' typo in error message
2026-04-08 14:20:40 -04:00
darkpowerxo 13a8eb2a25 ci: upgrade GitHub Actions to v6
Apply changes from PR #367 by @Copilot:
- actions/checkout v2 -> v6
- actions/setup-python v2 -> v6
2026-04-08 14:19:08 -04:00
darkpowerxo 30f28a1b1d fix: correct SKILL.md link in README
Apply changes from PR #390 by @amansinghbais:
- Fix link to point to the actual SKILL.md file instead of the directory
2026-04-08 14:18:15 -04:00
darkpowerxo 1bb44d5eef fix: respect batch_size in v1 data_loader when permute=False
Apply changes from PR #391 by @MarcoGorworworelli:
- Fix train_gen() to iterate in proper batch_size chunks instead of
  yielding all time series at once when permute=False
- Add test_data_loader.py to verify batch boundaries
2026-04-08 14:18:02 -04:00
darkpowerxo a63360a57c fix: per-input ridge regression to prevent data leakage in xreg
Apply changes from PR #393 by @MarcoGorworworelli:
- Normalize covariates per-input instead of batch-wide to prevent
  each input's result from depending on batch composition
- Fit separate ridge regressions per time series instead of a single
  batched regression, preventing cross-series data leakage
- Applied to both src/timesfm/utils/xreg_lib.py and v1/src/timesfm/xreg_lib.py
2026-04-08 14:15:44 -04:00
darkpowerxo c10494a4c5 test: add unit tests for configs, torch layers, utils, and base utils
Apply changes from PR #394 by @cj-wong:
- tests/__init__.py: package marker
- tests/test_base_utils.py: strip_leading_nans + linear_interpolation tests
- tests/test_configs.py: frozen dataclass, defaults, replace, equality tests
- tests/test_torch_layers.py: ResidualBlock, RMSNorm, RandomFourierFeatures
- tests/test_torch_utils.py: update_running_stats, revin, DecodeCache tests
2026-04-08 14:13:37 -04:00
darkpowerxo bc03b77e9e fix: correct 'complied' typo and replace print with logging
Apply changes from PR #396 by @shahrukhx01:
- Fix typo 'complied' -> 'compiled' in ForecastConfig docstrings
- Replace bare print() with logging.info() in load_checkpoint()
2026-04-08 14:09:14 -04:00
darkpowerxo b6ac2b3559 docs: add README for the PEFT fine-tuning pipeline
Covers quick start, Python API, CLI reference, adapter loading/merging,
architecture overview with parameter counts, and file layout.
2026-04-08 13:53:43 -04:00
darkpowerxo a67eeb2e7d feat: add CLI entry-point and launch script for PEFT fine-tuning
- finetune.py: argparse CLI with all config flags, CSV data loading,
  chronological train/val split, and full training pipeline
  Usage: python -m peft.finetune --data_path data.csv --value_col y
  Multi-GPU: torchrun --nproc_per_node=4 -m peft.finetune ...

- finetune.sh: env-var driven launch script for single/multi-GPU
  Usage: DATA_PATH=data.csv NUM_GPUS=4 bash peft/finetune.sh
2026-04-08 13:53:35 -04:00
darkpowerxo eca7ca3428 feat: add multi-GPU PEFT trainer for TimesFM 2.5
PEFTTrainer with production-grade training loop:
- PyTorch DDP multi-GPU via torchrun
- Mixed-precision training (fp16/bf16) with GradScaler
- Gradient checkpointing for long contexts
- Cosine-with-warmup LR schedule
- MSE loss + optional pinball quantile loss (9 channels)
- Early stopping on validation loss
- Adapter-only checkpointing (safetensors)
- W&B logging (rank-0 only)
- Differentiable training forward that replicates the 2.5
  patch -> RevIN -> transformer -> output-head -> un-RevIN path
2026-04-08 13:52:59 -04:00
darkpowerxo 9875d926fe feat: add TimeSeriesDataset for PEFT fine-tuning
Sliding-window dataset that produces (context, mask, target) tuples:
- Accepts list of arrays, long-format, or wide-format DataFrames
- Context length auto-rounded to multiple of patch_len (32)
- Left-pads short series with proper masking
- Configurable stride for window overlap
2026-04-08 13:52:19 -04:00
darkpowerxo 7357458e45 feat: add LoRA/DoRA adapter layers for TimesFM 2.5 (PyTorch)
Implement production-grade PEFT adapters targeting the 2.5 architecture:

- LoRALinear: low-rank A/B decomposition with scaling (alpha/rank)
- DoRALinear: weight-decomposed LoRA (magnitude + direction)
- inject_adapters(): freezes base weights, wraps target nn.Linear modules
  - Supports fused QKV (qkv_proj), attention output, and FFN layers
  - num_adapter_layers controls how many top layers get adapters (0=all)
  - target_modules selects 'all', 'attention', or 'ffn'
- merge_adapters(): folds adapter deltas back into base nn.Linear
- save/load_adapter_weights(): safetensors adapter-only checkpoints
- PEFTConfig dataclass with all hyperparameters

References:
  LoRA — https://arxiv.org/abs/2106.09685
  DoRA — https://arxiv.org/abs/2402.09353
2026-04-08 13:51:55 -04:00
darkpowerxo aa2b17f0b3 chore: update .gitignore for egg-info, uv.lock, peft_checkpoints
- Replace timesfm_jax.egg-info/ with generic *.egg-info/ glob
- Add uv.lock (lockfile is environment-specific)
- Add peft_checkpoints/ (training output directory)
2026-04-08 13:51:37 -04:00
Yichen Zhou f085b90799 Update README.md 2026-04-02 17:26:33 -07:00
Yichen Zhou 104b1d3ee4 Update README.md 2026-04-02 17:25:08 -07:00
Yichen Zhou ed602f95a3 Update README.md 2026-04-01 14:46:32 -07:00
Yichen Zhou ed29ec5ef7 Merge pull request #376 from yasumorishima/fix/xreg-mode-docstring
docs: fix swapped xreg_mode descriptions in forecast_with_covariates
2026-03-19 13:40:56 -07:00
Yichen Zhou 2c1052be94 Merge pull request #369 from borealBytes/feat/timesfm-forecasting-skill
feat(skill): ship first-party timesfm-forecasting Agent Skill (agentskills.io)
2026-03-19 10:36:46 -07:00
Yasunori Morishima(盛島康徳) babdee5208 docs: fix swapped xreg_mode descriptions in forecast_with_covariates docstring
The docstring had the descriptions for "xreg + timesfm" and
"timesfm + xreg" modes swapped relative to the implementation.

Fixes #275
2026-03-19 11:11:55 +00:00
Rajat Sen a3beaa8421 Merge pull request #372 from kashif/modelhubmixin
[HF] use the ModelHubMixin api
2026-03-11 11:04:43 -07:00
Kashif Rasul d2cb4849b6 fix docs string 2026-03-11 17:38:09 +01:00
Kashif Rasul 0134e55a6e Replace ModelHubMixin with PytorchModelHubMixin 2026-03-11 09:36:14 +01:00
Kashif Rasul a8bcd5d6d9 use the ModelHubMixin api 2026-03-06 10:53:18 +01:00
borealBytes 5aad77bd61 docs: address PR #369 review comments and add dataset preflight
- Add context limit rationale to system_requirements.md with memory formula
- Update SKILL.md to include XReg/covariates in description and usage sections
- Add dataset-aware memory estimation to check_system.py with new CLI args
- Document memory estimation in api_reference.md with Mermaid diagram
- Add dataset preflight section to SKILL.md with examples

Resolves review comments about:
- How context limits (512/1024) were determined
- Including XReg mode description in skill documentation

Bonus enhancement: Dataset preflight checking prevents OOM before loading data.
2026-02-25 21:27:31 -05:00
Clayton Young 1c959c8919 feat(agents): add AGENTS.md entry point at repo root
Short pointer for agents working directly in this repo.
Points to timesfm-forecasting/SKILL.md and provides
install commands for the first-party Agent Skill.
2026-02-22 13:40:52 -05:00
Clayton Young a83dbf3f16 refactor(skill): replace claude-specific dirs with agentskills.io standard
Replace AGENTS.md / claude-skill/ with a proper agentskills.io-compliant
skill directory. Any AI agent that supports the open Agent Skills standard
(Claude Code, OpenCode, Cursor, Codex, etc.) can now install and use this
skill generically.

Changes:
- Remove AGENTS.md (was Claude-specific convention)
- Remove claude-skill/ directory (was Claude-specific naming)
- Add timesfm-forecasting/SKILL.md with compliant frontmatter:
    name: timesfm-forecasting
    description: ...
    license: Apache-2.0
    metadata: author, version
- Rename claude-skill/examples/ → timesfm-forecasting/examples/
- Rename claude-skill/scripts/  → timesfm-forecasting/scripts/
- Rename claude-skill/references/ → timesfm-forecasting/references/
- Update .gitattributes paths to match new directory

Skill installs via:
  cp -r timesfm-forecasting/ ~/.claude/skills/
  cp -r timesfm-forecasting/ ~/.cursor/skills/
  # or any agent that supports agentskills.io

Spec: https://agentskills.io/specification
2026-02-22 13:35:05 -05:00
Clayton Young 6c44413b7f feat(skill): add timesfm-forecasting Agent Skill (agentskills.io)
Add a self-contained AI agent skill for TimesFM that teaches coding
agents (Claude Code, OpenCode, Cursor, Codex) how to use the TimesFM
API correctly — safe model loading, zero-shot forecasting, covariate
workflows, anomaly detection, and the most common pitfalls.

Files added:
- AGENTS.md             — auto-loaded skill document (root of repo)
- claude-skill/scripts/check_system.py    — mandatory preflight RAM/GPU/disk checker
- claude-skill/scripts/forecast_csv.py   — CLI wrapper for CSV forecasting
- claude-skill/references/               — ForecastConfig API ref, data prep, HW reqs
- claude-skill/examples/global-temperature/   — basic forecast + PNG/GIF pipeline
- claude-skill/examples/anomaly-detection/    — two-phase detrend+Z-score + quantile PI
- claude-skill/examples/covariates-forecasting/ — forecast_with_covariates() XReg demo
- .gitattributes        — Git LFS rules for PNG/GIF binary outputs

Contributed by Clayton Young / Superior Byte Works LLC (@borealBytes)
Apache 2.0 — same license as this repository
2026-02-22 13:25:39 -05:00
Rajat Sen 8a755c9c75 Merge pull request #341 from kashif/timesfmv1-var
[TimesFMv1] fix variance calculation
2026-02-18 16:22:59 -08:00
Kashif Rasul 177ab03e9c fix v1 jax version 2026-02-18 14:50:56 +01:00
Yichen Zhou 2dcc66fbfe Merge pull request #360 from google-research/siriuz42-patch-3
Update pyproject.toml
2026-01-27 10:53:07 -08:00
Yichen Zhou 4f0bd19a92 Update pyproject.toml
support python 3.10
2026-01-27 10:51:19 -08:00
Yichen Zhou 6bd8044275 Merge pull request #345 from google-research/siriuz42-patch-2
Update timesfm_2p5_flax.py
2025-12-05 13:48:40 -08:00
Yichen Zhou f7f6fa5d99 Update timesfm_2p5_flax.py
Allow compile to delay the jitting run.
2025-12-05 09:46:19 -08:00
Kashif Rasul 705685c912 fix v1 var calculation
1. Masked variance calculation (lines 95-107): Changed from the numerically unstable E[X²] - E[X]² formula  to the stable centered formula E[(X-μ)²]
  2. Sigma clamping (line 609): Changed from torch.where(sigma < tolerance, 1.0, sigma) to torch.clamp(sigma,   min=tolerance)
2025-11-25 09:40:07 +01:00
Rajat Sen bf88c5dc88 Merge pull request #335 from google-research/rajat-dev
adapt to new huggingface_hub interface
2025-10-31 10:45:25 -07:00
Rajat Sen 3bb141947e adapt to new huggingface_hub interface 2025-10-31 17:41:31 +00:00
Rajat Sen ddfa6cd9d8 Merge pull request #332 from google-research/rajat-dev
manually download config.json
2025-10-30 13:23:28 -07:00
Rajat Sen be91ef8ee3 manually download config.json 2025-10-30 20:11:16 +00:00
Yichen Zhou c43e8f3e66 Update README.md 2025-10-29 17:45:32 -07:00
Yichen Zhou a7435a190f Merge pull request #329 from google-research/siriuz42-2.0-pr
Bring back xreg for TimesFM 2.5
2025-10-29 17:41:32 -07:00