Best for
- Use when the user asks to "forecast with NV-Tesseract", "run forecasting inference", "use perform_forecasting", "DARR mode", "context-enhanced forecasting", "lag horizon attribution", "interpretability", or "fine-tune f…
NVIDIA-TAO/tao-skill-bank/skills/models/tao-finetune-nv-tesseract-forecasting/SKILL.md
NV-Tesseract Forecasting — transformer-based multivariate time series forecasting with DARR (context-enhanced kNN retrieval), interpretability, and fine-tuning. Use when the user asks to "forecast with NV-Tesseract", "run forecasting inference", "use perform_forecasting", "DARR mode", "context-enhanced forecasting", "lag horizon attribution", "interpretability", or "fine-tune forecasting", or mentions "nv-tesseract-forecasting", "moment_head_512_6hr", or "run8_best_model_cr".
Decision brief
Transformer-based multivariate time series forecasting using self-supervised pretraining on diverse temporal data. Three inference modes: standard (direct forecast), DARR (context-enhanced kNN retrieval blending), and interpretability (latent trajectory extraction, semantic flow…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/NVIDIA-TAO/tao-skill-bank --skill "skills/models/tao-finetune-nv-tesseract-forecasting"Inspect the Agent Skill "tao-finetune-nv-tesseract-forecasting" from https://github.com/NVIDIA-TAO/tao-skill-bank/blob/ae5e99c2148cf6bab95d150ee243a6da3f2c1fb1/skills/models/tao-finetune-nv-tesseract-forecasting/SKILL.md at commit ae5e99c2148cf6bab95d150ee243a6da3f2c1fb1. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
bash git clone https://github.com/NVIDIA/NV-Tesseract cd NV-Tesseract/forecasting uv sync --group dev uv pip install -e . editable install — required for clean sdk. imports
Review the “External dependencies” section in the pinned source before continuing.
nvidia/nv-tesseract-forecasting is a public repo — no token required for downloading weights. If you hit a 401/403 (gated access or license not accepted) or a 504 on first download, see the Known pitfalls section.
uv run python sdk/quickexample.py python import sys, pandas as pd sys.path.append("/path/to/NV-Tesseract/forecasting") git clone https://github.com/NVIDIA/NV-Tesseract from sdk.forecasting import performforecasting
Import and call performforecasting from sdk/forecasting.py. It auto-downloads weights, standardizes input, runs autoregressive rollout for long horizons, and returns a DataFrame with {targetcolumn}forecast rows for the requested horizon.
Permission review
The documentation includes network, browsing, or remote request actions.
git clone https://github.com/NVIDIA/NV-TesseractThe documentation asks the agent to run terminal commands or scripts.
git clone https://github.com/NVIDIA/NV-TesseractThe documentation includes network, browsing, or remote request actions.
sys.path.append("/path/to/NV-Tesseract/forecasting") # git clone https://github.com/NVIDIA/NV-TesseractEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 87/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 82 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Transformer-based multivariate time series forecasting using self-supervised pretraining on diverse temporal data. Three inference modes: standard (direct forecast), DARR (context-enhanced kNN retrieval blending), and interpretability (latent trajectory extraction, semantic flow, lag×horizon attribution, trajectory stability, and diagnostic ratios — full explanation bundle with PDF report). Fine-tuning adapts the forecasting head — and optionally the cross-channel layer — to your domain.
Source code: https://github.com/NVIDIA/NV-Tesseract
Pretrained weights: https://huggingface.co/nvidia/nv-tesseract-forecasting
| Dependency | Purpose | Install |
|---|---|---|
| Python 3.10+ | Runtime | https://www.python.org/downloads/ |
| uv | Package + environment manager | pip install uv |
| CUDA toolkit (optional) | GPU acceleration | https://developer.nvidia.com/cuda-downloads |
| matplotlib (optional) | Interpretability PDF report, heatmap PNG, flow + stability charts | uv add matplotlib |
nvidia/nv-tesseract-forecasting is a public repo — no token required for downloading weights.
If you hit a 401/403 (gated access or license not accepted) or a 504 on first download, see the Known pitfalls section.
git clone https://github.com/NVIDIA/NV-Tesseract
cd NV-Tesseract/forecasting
uv sync --group dev
uv pip install -e . # editable install — required for clean sdk.* imports
# Standard inference (auto-downloads weights from HF on first run, no auth needed)
uv run python sdk/quick_example.py
Import and call perform_forecasting from sdk/forecasting.py. It auto-downloads weights,
standardizes input, runs autoregressive rollout for long horizons, and returns a DataFrame
with {target_column}_forecast rows for the requested horizon.
import sys, pandas as pd
sys.path.append("/path/to/NV-Tesseract/forecasting") # git clone https://github.com/NVIDIA/NV-Tesseract
from sdk.forecasting import perform_forecasting
df = pd.read_csv("your_data.csv") # must have timestamp + numeric target column
results = perform_forecasting(
df=df,
timestamp_column="timestamp", # parseable datetime column
target_column="target", # primary target to forecast
seq_len=512, # input context length (rows consumed)
forecast_horizon=72, # steps ahead to predict (max 512)
model_horizon=72, # native model horizon; change when using custom weights
standardizer_pkl="standardizer.pkl", # auto-downloaded from HF if missing
ckpt="run8_best_model_cr.pt", # auto-downloaded; see Checkpoints table
)
# Returns DataFrame: timestamp | {target_column}_forecast (forecast_horizon rows)
print(results.head())
| File | Mode | Downloaded when |
|---|---|---|
run8_best_model_cr.pt | Default (cross-channel on) | use_cross_channel=True (default) |
moment_head_512_6hr.pt | Standard (no cross-channel) | use_cross_channel=False |
standardizer.pkl | Both | Always |
Pass use_cross_channel=False to use the standard checkpoint:
results = perform_forecasting(df=df, use_cross_channel=False, ...)
Supply context_df to enable DARR: the SDK builds a kNN memory from historical windows and
blends direct predictions with retrieved neighbors (alpha * direct + (1 - alpha) * kNN).
context_df = pd.read_csv("historical_data.csv") # needs ≥ seq_len + model_horizon rows
results = perform_forecasting(
df=df,
context_df=context_df, # enables DARR
forecast_horizon=72,
alpha=0.2, # 0.2 = 20% direct, 80% kNN (default: 0.01)
k=64, # number of nearest neighbors
temperature=0.05, # kNN softmax temperature
)
Context and input datasets do not need identical columns — the SDK aligns to common features
and warns when columns differ. Both must share timestamp_column and target_column.
Set interpretability=True to activate the Model-Agnostic Interpretability Framework. It produces localized, horizon-specific, time-aware explanations — including lag×horizon attribution, semantic flow, trajectory stability, diagnostic ratios, and (for multivariate inputs) channel-axis attribution and coupling analysis.
For the full parameter reference, output bundle, and component descriptions, see
forecasting/README.md.
Fine-tune the forecasting head (encoder/embedder frozen by default) on your own time series.
--ckpt-init auto warm-starts from the published NV-Tesseract checkpoint; --ckpt-init none
trains a fresh head from the base backbone.
cd /path/to/NV-Tesseract/forecasting
# Without cross-channel (uses moment_head_512_6hr.pt)
uv run python examples/finetune_example.py \
--csv /path/to/timeseries.csv \
--timestamp-col timestamp \
--target-cols target \
--seq-len 512 --forecast-horizon 72 \
--epochs 5 --batch-size 8 --lr 1e-4 \
--output-dir artifacts/finetune_my_data
# With cross-channel layer (uses run8_best_model_cr.pt)
uv run python examples/finetune_example.py \
--csv /path/to/timeseries.csv \
--timestamp-col timestamp \
--target-cols sensor_1,sensor_2,sensor_3 \
--use-cross-channel --cross-channel-heads 8 \
--epochs 5 \
--output-dir artifacts/finetune_cross_channel
| Argument | Default | Description |
|---|---|---|
--csv | required* | Single CSV split temporally into train/val |
--train-csv | required* | Training CSV (mutually exclusive with --csv) |
--val-csv | — | Validation CSV when --train-csv is used |
--timestamp-col | timestamp | Datetime column to exclude from features |
--target-cols | all numeric | Comma-separated columns to forecast |
--ckpt-init | auto | auto = published NV-Tesseract weights; none = fresh head |
--seq-len | 512 | Input context length |
--forecast-horizon | 72 | Steps ahead to predict |
--val-ratio | 0.1 | Validation fraction when --csv is used |
--epochs | 5 | Training epochs |
--batch-size | 8 | Batch size |
--lr | 1e-4 | AdamW learning rate (OneCycleLR scheduler) |
--weight-decay | 0.0 | AdamW weight decay |
--head-dropout | 0.1 | Forecasting head dropout |
--max-norm | 5.0 | Gradient norm clip |
--unfreeze-encoder | false | Train the transformer encoder too |
--unfreeze-embedder | false | Train the patch embedder too |
--use-cross-channel | false | Add cross-channel attention layer |
--cross-channel-heads | 8 | Attention heads in cross-channel layer |
--seed | 13 | Random seed |
--output-dir | artifacts/finetune | Output directory |
*One of --csv or --train-csv is required.
results = perform_forecasting(
df=df,
timestamp_column="timestamp",
target_column="target",
seq_len=512,
forecast_horizon=72,
model_horizon=72,
standardizer_pkl="artifacts/finetune_my_data/standardizer.pkl",
ckpt="artifacts/finetune_my_data/best_model.pt",
use_cross_channel=False, # set True if trained with --use-cross-channel
)
Fair comparison rule:
perform_forecastingdefaults touse_cross_channel=True(loadsrun8_best_model_cr.pt). When comparing pretrained inference against a finetuned checkpoint, both must use the same base architecture. Either:
- Finetune with
--use-cross-channel(warm-starts fromrun8_best_model_cr.pt) and run inference withuse_cross_channel=True(default), or- Run inference with
use_cross_channel=Falseand finetune without--use-cross-channel(warm-starts frommoment_head_512_6hr.pt, the finetune default).Mixing architectures — cross-channel pretrained vs standard finetuned — conflates model quality with architectural differences and makes the comparison uninterpretable.
| Property | Requirement |
|---|---|
| Rows | ≥ seq_len (default 512) for inference; validation split must also have ≥ seq_len + forecast_horizon rows |
| Columns | timestamp + one or more numeric columns; NULLs filled with zeros automatically |
| Timestamp | Parseable by pandas; no NULLs; uniform frequency inferred from mode of diffs |
| Target | Must be numeric; NULLs filled with zeros |
forecast_horizon | Max 512 steps; beyond model's native 72 triggers autoregressive rollout |
| DARR context | ≥ seq_len + model_horizon rows; must share timestamp + target columns with input |
Inference (standard / DARR):
DataFrame: timestamp | {target_column}_forecast (forecast_horizon rows)
Fine-tuning (--output-dir artifacts/finetune_my_data):
artifacts/finetune_my_data/
├── best_model.pt # checkpoint with lowest validation loss
├── standardizer.pkl # normalization statistics for this dataset
├── finetune_metadata.json # model config, channels, best epoch, all args
└── metrics.json # per-epoch train/val loss and MAE
| Tier | Setup | Notes |
|---|---|---|
| Minimum | 1× CPU | Functional; slow for long horizons |
| Recommended | 1× NVIDIA GPU (≥8 GB VRAM) | Strongly recommended for fine-tuning |
| Apple Silicon | MPS | Auto-detected; on par with CPU for this workload |
| Multi-GPU | Not supported | Single-device only |
| Symptom | Cause | Fix |
|---|---|---|
ModuleNotFoundError: backbone | Editable install missing | Run uv pip install -e . from forecasting/ |
HfHubHTTPError: 401 / 403 | Model license not accepted or gated fork | Accept license on HF repo page; or huggingface-cli login |
504 / timeout on first weight download | HF CDN throttles unauthenticated requests — public repos are still subject to this on first download | Set export HUGGINGFACE_HUB_TOKEN="$HF_TOKEN" before running; authenticated requests use a more reliable CDN path |
ValueError: DataFrame has X rows but seq_len requires Y | Input too short | Provide ≥ seq_len (512) rows or reduce --seq-len |
ValueError: forecast_horizon must be <= 512 | Horizon too large | Split into multiple perform_forecasting calls |
ValueError: No common numeric columns (DARR) | Context has no overlapping features | Ensure context shares ≥ 1 numeric column with input |
ValueError: Context DataFrame has X rows but requires Y | Context too small | Context needs ≥ seq_len + model_horizon rows |
Interpretability PDF skipped: matplotlib not installed | Missing optional dep | uv add matplotlib or use interpretability_output="json" |
ValueError: No training windows (finetune) | Data too short for windows | Reduce --seq-len / --forecast-horizon, or increase dataset size |
Stale environment errors mentioning backbone package | Old lock file | uv cache clean && uv sync --group dev |
Alternatives
K-Dense-AI/scientific-agent-skills
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.
K-Dense-AI/scientific-agent-skills
Medicinal chemistry filters for compound triage. Apply drug-likeness rules (Lipinski, Veber, CNS), structural alert catalogs (PAINS, NIBR, ChEMBL), complexity metrics, and the medchem query language for library filtering.
K-Dense-AI/scientific-agent-skills
Use NeuroKit2 to build or audit reproducible research workflows for physiological time-series preprocessing, event/interval analysis, multimodal alignment, variability, and complexity. Trigger when code imports neurokit2 or needs its current APIs, schemas, and method-aware validation—not for diagnosis or device validation.
trailofbits/skills
Detects timing side-channel vulnerabilities in cryptographic code. Use when implementing or reviewing crypto code, encountering division on secrets, secret-dependent branches, or constant-time programming questions in C, C++, Go, Rust, Swift, Java, Kotlin, C#, PHP, JavaScript, TypeScript, Python, or Ruby.