Downloads · 30 days
0
nz00shuuuu/TimeRLM-TSLM-Checkpoints
TimeRLM-TSLM-Checkpoints is a machine learning model from nz00shuuuu. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as apache-2.0.
Fine-tuned weights for the time-series language model (TSLM) baselines reported in the TimeRLM work: ChatTS, OpenTSLM-Flamingo, and ITFormer, each built on a frozen Chronos-2 encoder feeding a LoRA-tuned Qwen3.5-4B ba…
Downloads · 30 days
0
Access
Public
Updated Aug 28, 2026
Repo size
26.5 GB
Likes
0
Public
Click a slice to open those files.
.safetensors26.5 GB · 100%
From the Hugging Face model README
Fine-tuned weights for the time-series language model (TSLM) baselines reported in
the TimeRLM work: ChatTS, OpenTSLM-Flamingo, and ITFormer, each built on a
frozen Chronos-2 encoder feeding a
LoRA-tuned Qwen3.5-4B backbone, trained on
AnomalyXL in both its precise (free-form structured answer) and coarse
(multiple-choice) variants. Also included are four LoRA adapters for the Toto
baseline, built on Toto-1.0-QA-Experimental.
Training and evaluation code lives in the TimeRLM repository under sft/tslm/
(TSLM baselines) and sft/toto/ (Toto baseline).
Each original training artifact is a ~9–22 GB best_model.pt holding a complete
model_state: the frozen Chronos-2 encoder, every weight of the base Qwen3.5-4B
backbone, and the trained parts. For ITFormer, the trained parts are 137 MB of a
8.79 GB checkpoint — the other 98% is stock public weights.
So this repository stores only the tensors that training actually changed, plus a
manifest.json describing where every other tensor comes from. reconstruct.py
puts a checkpoint back together from those two ingredients and the public base
models. The result is bitwise identical to the original best_model.pt — not
approximately, not numerically close. Every one of the 12 runs was verified
tensor-by-tensor with torch.equal over the full state dict (633–2804 tensors each)
before upload; verify_release.py reruns that check.
| architecture | trained tensors | shipped | original | what is shipped |
|---|---|---|---|---|
| ChatTS | 176 / 633 | 1.48 GB | 8.66 GB | trained embeddings, MLP projector, LoRA |
| OpenTSLM-Flamingo | 454 / 2804 | 4.92 GB | 12.30 GB | gated cross-attention (3.57 GB), embeddings, Perceiver Resampler, LoRA |
| ITFormer | 113 / 710 | 0.14 GB | 8.79 GB | ITFormer fusion, prefix projectors, LoRA |
ChatTS and Flamingo ship their embedding matrices because both configs set
freeze_lm_embeddings: false; every row of those matrices moved during training, so
none of it is recoverable from stock. ITFormer froze its embeddings, so its
embedding table is reconstructed by slicing the stock matrix to the resized vocabulary.
Optimizer and scheduler state are not included — these are release checkpoints, not
resume points. latest_checkpoint.pt files are likewise omitted.
pip install torch safetensors huggingface_hub
huggingface-cli download nz00shuuuu/TimeRLM-TSLM-Checkpoints --local-dir timerlm-tslm
python timerlm-tslm/reconstruct.py \
--run anomaly_xl_itformer_precise_chronos2_qwen35_4b \
--local-dir timerlm-tslm/tslm/anomaly_xl_itformer_precise_chronos2_qwen35_4b \
--out best_model.pt
That writes a best_model.pt the training repository loads directly:
cd sft/tslm
uv run python train.py --config configs/itformer_precise.yaml --eval-only --checkpoint best_model.pt
Or rebuild the state dict in-process, without materialising a .pt:
from reconstruct import rebuild_state_dict
state = rebuild_state_dict("anomaly_xl_itformer_precise_chronos2_qwen35_4b")
model.load_state_dict(state) # model built by sft/tslm/train.py's MODEL_CLASSES
The first call downloads Qwen3.5-4B (~9.7 GB) and Chronos-2 (~0.24 GB) into your Hugging Face cache. Subsequent runs reuse them across all 12 checkpoints, which is the point: you pay for the base weights once, not twelve times.
If you have the original best_model.pt, confirm the round trip:
python verify_release.py \
--ckpt /path/to/best_model.pt \
--run-dir tslm/anomaly_xl_itformer_precise_chronos2_qwen35_4b
# compared 710 tensors -> 0 mismatches
# BITWISE IDENTICAL
Without the original, verify_release.py --run-dir ... --self-check confirms that
every manifest entry resolves and that the rebuilt state dict has the expected keys,
shapes, and dtypes.
tslm/<run_name>/
trained.safetensors tensors training changed
manifest.json per-tensor provenance + key order + training config
summary.json test metrics on the held-out gold shard
history.json per-epoch train/val loss
config.yaml the exact training config
metrics.jsonl step-level metrics
output_logs/ model generations on the test shard
toto/<adapter_name>/
adapter_model.safetensors, adapter_config.json, history.json
reconstruct.py, verify_release.py, extraction_report.json
Run names follow anomaly_xl_{chatts,flamingo,itformer}_{precise,coarse}_chronos2_qwen35_4b[_fixtrain].
Twelve TSLM runs: three architectures x two variants x two training passes. The two
passes share identical hyperparameters — the configs differ only in whether Weights &
Biases logging was enabled. The _fixtrain pass was run in late July 2026, the
original in mid-June 2026.
test_primary is multiple-choice accuracy for coarse, and the mean per-category
primary metric in [0, 1] for precise.
| architecture | pass | test_primary | test_loss | best epoch |
|---|---|---|---|---|
| ChatTS | original | 0.0522 | 0.4372 | 1 |
| ChatTS | fixtrain | 0.0773 | 0.4193 | 1 |
| OpenTSLM-Flamingo | original | 0.0941 | 0.4228 | 1 |
| OpenTSLM-Flamingo | fixtrain | 0.0926 | 0.4104 | 4 |
| ITFormer | original | 0.0812 | 0.4073 | 2 |
| ITFormer | fixtrain | 0.0901 | 0.4075 | 2 |
| architecture | pass | test_primary | test_loss | best epoch |
|---|---|---|---|---|
| ChatTS | original | 0.3978 | 0.3370 | 2 |
| ChatTS | fixtrain | 0.3784 | 0.3412 | 2 |
| OpenTSLM-Flamingo | original | 0.3548 | 0.3990 | 2 |
| OpenTSLM-Flamingo | fixtrain | 0.3508 | 0.4797 | 3 |
| ITFormer | original | 0.3508 | 0.3003 | 1 |
| ITFormer | fixtrain | 0.3831 | 0.2891 | 4 |
Per-category breakdowns are in each run's summary.json.
LoRA adapters for Datadog/Toto-1.0-QA-Experimental — a frozen Toto-Open-Base-1.0
time-series encoder with a Qwen3-VL-32B-Instruct decoder. Rank 16, alpha 32, dropout
0.05, on q_proj and v_proj of the text decoder only. Protocol-matched to the TSLM
baselines above: same epochs, learning rate, weight decay, warmup, patience, and
batch size.
from peft import PeftModel
model = PeftModel.from_pretrained(base, "nz00shuuuu/TimeRLM-TSLM-Checkpoints",
subfolder="toto/toto_ft_precise")
Load the base model from the vlm subfolder of Datadog/Toto-1.0-QA-Experimental.
adapter_config.json records base_model_name_or_path as the Hub id; the training
runs resolved it through a local snapshot of the same revision.
| adapter | variant | best val loss | epochs |
|---|---|---|---|
toto_ft_precise | precise | 0.3247 | 5 |
toto_ft_coarse | coarse | 0.2159 | 5 |
toto_ft_precise_fixtrain | precise | 0.3960 | 5 |
toto_ft_coarse_fixtrain | coarse | 0.2425 | 3 |
cd sft/tslm
uv sync
uv run python train.py --config configs/itformer_precise.yaml
Each run loads Chronos-2 frozen plus Qwen3.5-4B, injects LoRA (r=16, alpha=32) into
the Qwen decoder only, trains up to 5 epochs with early stopping (patience 3 on
validation loss), and evaluates the best checkpoint against the held-out gold shard.
Training data is timeseriesexamXL/datasets/anomalyxl-train/anomalyxl-{precise,coarse}/;
the gold test shard is timeseriesexamXL/datasets/anomalyxl-{precise,coarse}/data.parquet
(800 rows precise, 248 coarse, seed 42). The sft/tslm/ environment pins a
transformers build from git for Qwen3.5 support.
_indfix runs in the source tree are evaluation-only re-runs against a
corrected gold shard and produced no weights, so they are not represented here.toto_ft_precise_fixtrain, non-_g1) never wrote
an adapter directory; the _g1 re-run is what ships as toto_ft_precise_fixtrain.summary.json; only per-epoch loss history survived.