Skip to content

Releases: porespellar/Zer0Fit

Zer0Fit v1.2.4 — Updated Agent Guidance

Choose a tag to compare

@porespellar porespellar released this 04 Sep 01:39

Changes since v1.2.3

  • Updates AGENTS.md and CLAUDE.md to describe the TimesFM 3.0 integration.
  • Replaces obsolete TimesFM 2.5, CUDA 12.4, ForecastConfig, and 1,024-token guidance with the current TimesFM 3.0, CUDA 12.6/cu124, evaluator-managed decode, and 15,360-point context guidance.
  • Aligns runtime version metadata and release verification documentation to v1.2.4.

Verification

  • Full pytest suite: 4 passed.
  • Python compilation, shell syntax, dependency check, Compose rendering, and git diff --check: passed.
  • Explicit linux/amd64 and linux/arm64 Docker builds: passed.
  • Exact v1.2.4 containers on both architectures: health/version 1.2.4, model imports, and cache writes passed.
  • TimesFM 3.0.1 pinned-checkpoint smoke test remains passing with forecast shape (3,) and quantile shape (3, 9).

The model and TabFM status are unchanged from v1.2.3: TimesFM uses the pinned revision 43046b85ec22d584a13f8098c2ed39c889e129c2; TabFM remains at verified upstream commit fbb665569425fd2f490c6576b3af967876fe11ff with v1.0.0 pretrained weights.

Zer0Fit v1.2.3 — Release Audit Corrections

Choose a tag to compare

@porespellar porespellar released this 04 Sep 01:00

Changes since v1.2.2

This corrective release incorporates the delayed independent release audit.

  • Corrects the README license summary so TimesFM 3.0 source/package licensing is clearly separated from its non-commercial, non-production checkpoint license.
  • Raises the documented free-disk recommendation to 40GB and records the verified approximate checkpoint sizes: 1.32GB TimesFM, 6.56GB TabFM classification, and 6.59GB TabFM regression (14.47GB combined).
  • Corrects the documented default upload directory to /app/uploads.
  • Clarifies that the installer preloads the TabFM classification checkpoint; regression weights are downloaded on first regression use because the VRAM governor keeps one model/task hot at a time.
  • Adds requirements-dev.txt and a GitHub Actions offline regression workflow.
  • Adds the reproducible opt-in tests/smoke_timesfm3.py script for the pinned TimesFM checkpoint.
  • Updates runtime version metadata and release verification documentation to v1.2.3.

Model status

  • TimesFM: timesfm==3.0.1, checkpoint google/timesfm-3.0-pytorch, pinned revision 43046b85ec22d584a13f8098c2ed39c889e129c2.
  • TabFM: source commit fbb665569425fd2f490c6576b3af967876fe11ff, verified as current official upstream main at audit time; v1.0.0 pretrained weights remain current, with no newer official model-weight release found.

Verification

  • Full offline pytest suite: 4 passed.
  • requirements-dev.txt installation resolved successfully; uv pip check: all 74 packages compatible.
  • Live pinned TimesFM smoke script: passed with forecast shape (3,) and quantile shape (3, 9).
  • Python compilation, shell syntax, Compose rendering, and git diff --check: passed.
  • Fresh explicit linux/amd64 and linux/arm64 builds: passed.
  • Exact v1.2.3 containers on both architectures: health/version 1.2.3, model-library imports, and non-root cache writes passed.
  • Streamable HTTP initialize returned a session ID; session-aware tools/list returned all four registered tools.

Known limitation

AGENTS.md and CLAUDE.md remain protected instruction files containing stale TimesFM 2.5/CUDA 12.4 text. Their edits were blocked by the repository protection prompt and were not bypassed.

Zer0Fit v1.2.2 — Reproducible TimesFM Release

Choose a tag to compare

@porespellar porespellar released this 04 Sep 00:51

Changes since v1.2.1

  • Pins the TimesFM 3.0 checkpoint to the tested Hugging Face revision 43046b85ec22d584a13f8098c2ed39c889e129c2 instead of mutable main.
  • Keeps timesfm==3.0.1 and the timesfm3.TimesFM3Evaluator API.
  • Rejects empty, all-NaN, and non-finite-only time-series contexts with a clear validation error.
  • Tightens declared runtime requirements to TimesFM 3.0.1 minimums: huggingface_hub>=0.28.0, safetensors>=0.5.3, and numpy>=1.26.4,<2.0.0.
  • Corrects datetime documentation: Zer0Fit uses datetime columns for sorting and time-aware downsampling; timestamps are not passed to TimesFM.
  • Updates release/version documentation to v1.2.2.

Model status

  • TimesFM: timesfm==3.0.1, checkpoint google/timesfm-3.0-pytorch, pinned revision 43046b85ec22d584a13f8098c2ed39c889e129c2.
  • TabFM: latest verified official source remains commit fbb665569425fd2f490c6576b3af967876fe11ff (current upstream main when checked), with v1.0.0 pretrained weights. No newer official TabFM model-weight release was found.

Verification

  • Full pytest suite: 4 passed.
  • Targeted migration tests: 4 passed.
  • uv pip check: all 74 installed packages compatible.
  • Python compilation, shell syntax, Compose rendering, and git diff --check: passed.
  • Live pinned TimesFM smoke test: passed; forecast shape (3,), quantiles (3, 9), all values finite.
  • Explicit linux/amd64 and linux/arm64 image builds: passed.
  • Fresh v1.2.2 containers on both architectures: health/version 1.2.2, TimesFM/Hugging Face/safetensors imports, and default-user cache writes passed.
  • Fresh Streamable HTTP initialize returned a session ID; session-aware tools/list returned all four registered tools.

Licensing

Zer0Fit source remains Apache-2.0. TimesFM 3.0 and TabFM pretrained weights retain their separate non-commercial restrictions. Review ATTRIBUTION.md and DISCLAIMER.md before deployment.

Zer0Fit v1.2.1 — Deployment Hardening

Choose a tag to compare

@porespellar porespellar released this 04 Sep 00:38

Fixes since v1.2.0

  • Adds a Compose-managed persistent Hugging Face cache volume so TimesFM and TabFM weights survive container recreation.
  • Documents the architecture-specific .env required for manual Compose builds; ./install.sh remains the recommended path.
  • Replaces the installer’s unsupported ./install.sh --preload recovery instruction with the supported curl -X POST /preload command.
  • Updates storage requirements and deployment documentation for the 1.32 GB TimesFM 3.0 checkpoint and persistent cache.
  • Reports server/installer version 1.2.1.

Included model update

  • TimesFM: timesfm==3.0.1, checkpoint google/timesfm-3.0-pytorch, timesfm3.TimesFM3Evaluator API.
  • TabFM: latest verified official source state at fbb665569425fd2f490c6576b3af967876fe11ff (current upstream main as checked on 2026-09-03), with v1.0.0 pretrained weights; no newer official model-weight release found.

Verification

  • pytest -q: 3 passed.
  • uv pip check: 74 packages compatible.
  • Python compilation, shell syntax, Compose rendering, and git diff --check: passed.
  • Live TimesFM 3.0.1 checkpoint smoke test: passed; forecast (3,), quantiles (3, 9).
  • Explicit ARM64 and x86_64 builds: passed.
  • Exact v1.2.1 ARM64/x86_64 images: imports, health 1.2.1, and cache-volume write test passed.
  • Streamable HTTP initialize and session-aware tools/list: passed.

License note

TimesFM 3.0 pretrained weights remain restricted by Google’s TimesFM Non-Commercial License v1.0. See ATTRIBUTION.md and DISCLAIMER.md before deployment.

Zer0Fit v1.2.0 — TimesFM 3.0 Migration

Choose a tag to compare

@porespellar porespellar released this 04 Sep 00:29

Highlights

  • Migrates forecasting from TimesFM 2.5 to Google TimesFM 3.0.
  • Pins timesfm==3.0.1 and uses the google/timesfm-3.0-pytorch checkpoint through timesfm3.TimesFM3Evaluator.
  • Uses the TimesFM 3.0 predict_batch / ForecastOutput API with quantile output.
  • Keeps the Zer0Fit service horizon safety cap at 1–256 and updates the context pipeline to the 15,360-point evaluator ceiling.
  • Keeps TabFM on the latest verified upstream source state: v1.0.1-compatible commit fbb665569425fd2f490c6576b3af967876fe11ff; no newer official TabFM model-weight release was found.
  • Updates Docker, Compose, installer, attribution, license, architecture, deployment, README, and workflow documentation.
  • Updates the x86_64 base image to the published nvidia/cuda:12.6.3-base-ubuntu24.04; ARM64 remains CUDA 13.2 / cu130.

Verification

  • pytest -q: 3 passed.
  • uv pip check: 74 packages compatible.
  • Python compilation, shell syntax, Compose rendering, and git diff --check: passed.
  • Live TimesFM 3.0.1 checkpoint smoke test: passed; forecast (3,), quantiles (3, 9).
  • ARM64 release image: built and health-checked; TimesFM 3.0.1, Torch cu130.
  • x86_64 release image: built and health-checked; TimesFM 3.0.1, Torch cu124.
  • Streamable HTTP initialize and session-aware tools/list: passed.

License note

TimesFM 3.0 pretrained weights remain restricted by Google’s TimesFM Non-Commercial License v1.0. See ATTRIBUTION.md and DISCLAIMER.md before deployment.

Zer0Fit v1.0.1 — Code Review Hardening Release

Choose a tag to compare

@porespellar porespellar released this 12 Jul 02:43

Zer0Fit v1.0.1 — Code Review Hardening Release

This release incorporates findings from two rounds of Claude Opus 4.6 code review covering security hardening, performance improvements, and bug fixes across all source files.

🔒 Security

  • IDOR prefix strengthened: WebUI file ID matching now requires 32+ character prefixes (was 8), preventing brute-force file discovery in multi-user environments
  • Symlink escape prevention: Upload directory lookups now verify realpath containment (matching the existing WebUI upload path check)
  • TOCTOU race hardened: WebUI upload symlink check now rejects symlinks outright with os.path.islink() before resolving, preventing time-of-check-time-of-use attacks
  • Dockerfile non-root user: The server now runs as zer0fit user instead of root, reducing blast radius from container escapes
  • Specific exception handling: File parse errors now catch specific exceptions (ParserError, EmptyDataError, etc.) instead of bare except Exception

🐛 Bug Fixes

  • Install.sh orphaned processes: Fixed subshell scoping bug that prevented LOG_PID from being captured — background docker compose logs processes are now properly killed and waited on
  • Model inference blocking event loop: TimesFM forecast and TabFM inference are now wrapped in asyncio.to_thread() with timeouts (120s / 300s), preventing event-loop blocking and hung requests
  • JSON/JSONL OOM risk: _read_tabular_file now enforces nrows truncation for JSON formats (was already enforced for CSV/Excel), preventing unbounded RAM consumption on large uploads
  • Trailing-separator consistency: _cleanup_uploads symlink escape check now adds trailing separator on both sides for correct path matching
  • _cleanup_uploads silent error masking: Bare OSError catch refined to distinguish FileNotFoundError (benign race) from other errors (logged as warnings)

🛠️ Infrastructure

  • Fixed JAX/numpy incompatibility preventing TabFM preload: TabFM's classifier_and_regressor.py imports JAX at module level (wrapped in try/except ImportError). JAX v0.10+ requires numpy 2.0+ (StringDType), but the project pins numpy <2.0.0 for TimesFM compatibility. Since the PyTorch backend doesn't need JAX at all, the Dockerfile now uninstalls jax/jaxlib after installing TabFM dependencies, allowing the try/except fallback to activate. Removed chex, optax, and orbax-checkpoint (the transitive deps pulling in JAX) from the dependency list.
  • HF cache path mismatch fixed: Dockerfile now sets HF_HOME=/app/.cache/huggingface for a deterministic cache path regardless of container user; install.sh health check updated to match (was checking /root/.cache/ which doesn't exist with the zer0fit user)
  • .env.example defaults: Changed from ARM64 to x86_64 (amd64) to match docker-compose.yml defaults, with comments explaining both architectures

🧹 Cleanup

  • _json_safe renamed to _json_safe_scalar — now handles np.ndarray via .tolist() and np.str_ via str() conversion
  • Removed unused fastapi dependency (server uses Starlette directly)
  • Deprecated pandas alias: "H""h" frequency alias for pandas 2.2+ compatibility
  • Late imports moved to top: StreamableHTTPSessionManager and asynccontextmanager now imported at the top of server.py
  • docker-compose.yml defaults: Architecture defaults changed from ARM64 to x86_64 (more common for GPU servers)
  • install.sh version: Added ZER0FIT_VERSION variable shown in banner, build summary, and success message

🩺 Performance

  • Inference timeout: TimesFM forecast now has a 2-minute timeout, TabFM inference has a 5-minute timeout — prevents model hangs from blocking VRAM

Full diff: v1.0.0...v1.0.1

Zer0Fit v1.0.0 — Initial Release

Choose a tag to compare

@porespellar porespellar released this 12 Jul 02:43

Zer0Fit v1.0.0 — Zero-Shot Forecasting & Tabular MCP Server

Zer0Fit exposes Google's TimesFM 2.5 (time-series forecasting) and TabFM v1.0.0 (tabular classification/regression) foundation models to AI assistants via the Model Context Protocol (SSE/Streamable HTTP).

Zero-shot means no training required — just attach a CSV and describe what you want to predict.

Features

  • 📈 Time-series forecasting via Google TimesFM 2.5 (200M params)
  • 📊 Tabular classification & regression via Google TabFM v1.0.0
  • 💬 Chat-attached file support — use Open WebUI file IDs directly
  • 📤 File upload tool for files not attached in chat (CSV, XLSX, XLS, JSON, JSONL)
  • 🔍 Automatic file inspection — column names, types, row counts
  • 📋 Pre-computed metrics — accuracy, per-class F1, confusion matrix, R², MAE, RMSE, MAPE
  • 🧹 Automatic file cleanup — uploads auto-delete after 6 hours (configurable)
  • 🔒 Security — path traversal protection, UUID-based filenames, allowed-directory restriction
  • 🖥️ VRAM management — TTL-based auto-unload, mutual exclusion, asyncio.to_thread offloading
  • 🏗️ Multi-architecture — ARM64 (DGX Spark / Blackwell) and x86_64 (RTX 3090 / H100)
  • 🚀 One-command install./install.sh detects architecture, builds, and launches

Clients Supported

  • Open WebUI (primary) — SSE + Streamable HTTP
  • Claude Code — SSE transport, includes auto-loaded CLAUDE.md + skill
  • Codex CLI — Streamable HTTP, includes auto-loaded AGENTS.md

Quick Start

git clone https://github.com/porespellar/Zer0Fit.git
cd Zer0Fit
./install.sh

Inference Limits

Limit Default Configurable
Forecast horizon 1–256 steps Yes (model_manager.py)
Max tabular chunks 10 (10K rows) Yes (server.py)
Chunk size 1,000 rows Yes (pipelines.py)
In-context size 512 rows Yes (pipelines.py)
VRAM TTL 300 seconds Yes (env var)
Upload TTL 6 hours Yes (env var)

See Limits & Configurability for tuning guide.

Security & Code Review

Two full code reviews were conducted using Google Antigravity (Gemini 3.1 Pro). All findings were addressed:

  • ✅ Path traversal vulnerability (Critical) — fixed
  • ✅ Event-loop blocking during model loads (High) — fixed via asyncio.to_thread
  • ✅ Race condition in TabFM task-type state (High) — fixed, task_type passed as parameter
  • ✅ Thread-unsafe state access outside lock (High) — fixed, all checks inside asyncio.Lock
  • ✅ Unbounded predictions OOM risk (High) — fixed, max_chunks capped at 10
  • ✅ Empty basename file resolution (High) — fixed
  • ✅ Unbounded forecast horizon (Medium) — fixed, validated 1–256
  • ✅ Blocking I/O in upload cleanup (Medium) — fixed, offloaded to thread
  • ✅ Unhandled NaNs in target column (Medium) — fixed, dropna before chunking
  • ✅ Weak upload filename entropy (Low) — fixed, full UUID

Disclaimer

Zer0Fit is provided "AS IS" without warranties of any kind, and is intended for research and educational purposes only. The developer is not responsible for the accuracy of predictions, classifications, or forecasts produced by the underlying models or the LLM interpreting them. TabFM model weights are non-commercial — see the full Disclaimer (DISCLAIMER.md).

License

  • Zer0Fit source code — Apache License 2.0
  • TimesFM 2.5 model weights — Apache License 2.0
  • TabFM v1.0.0 model weights — TabFM Non-Commercial License v1.0