QuantConnect / QuantConnect/Lean

[Library Request] tabpfn

Open
#9,749 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

library-request
Dominant language
C#
Stars
21.7k
Forks
5.3k
Avg merge
2d 22h
Merged PRs (30d)
34

Description

Summary

Add the tabpfn package to the default QuantConnect Python environment.

Package details

  • PyPI: https://pypi.org/project/tabpfn/ (latest 8.4.0, requires_python >=3.10)
  • GitHub: https://github.com/PriorLabs/TabPFN (public, ~7.8k stars, actively maintained - last push 2026-08-25)
  • License: Prior Labs License - Apache 2.0 with an additional attribution provision (paragraph 10: "Built with PriorLabs-TabPFN" attribution when the work/weights or a derived model are distributed or made available). Internal benchmarking and testing without external communication is explicitly exempt.
  • Maintainer: Prior Labs

TabPFN is a transformer-based foundation model for tabular data that performs classification and regression by in-context learning: instead of fitting parameters, it runs a single forward pass over the training rows, so a "fit" on a small/medium table is effectively instant and needs no hyperparameter search. It exposes a scikit-learn compatible API (TabPFNClassifier / TabPFNRegressor), which makes it a drop-in alternative to the sklearn / LightGBM estimators already in the image for the small-sample tabular problems that dominate quantitative research.

Dependencies

Runtime requirements (from PyPI metadata for 8.4.0):

torch>=2.5, scikit-learn>=1.2.0, numpy>=1.21.6, scipy>=1.11.1, pandas>=1.4.0, lightgbm>=4.4, huggingface-hub>=0.23.0, safetensors>=0.4.0, pydantic>=2.8.0, pydantic-settings>=2.10.1, einops>=0.4.0, joblib>=1.2.0, tqdm>=4.66.0, filelock>=3.11.0, typing_extensions>=4.12.0.

Most of these (torch, scikit-learn, numpy, scipy, pandas, lightgbm, huggingface-hub, safetensors, joblib, tqdm, filelock) are already in the environment; einops, pydantic-settings and the torch>=2.5 floor are the items to check against the current pins. The mlx requirement is macOS/arm64-only and does not apply to the Linux image.

Open question - pretrained weights need to be baked into the image

TabPFN is a pretrained model: on first use the client downloads its checkpoint from Hugging Face (huggingface-hub) into a local cache. Algorithm containers have no outbound internet access, so pip install tabpfn alone would leave the package raising a download error at fit() time in both Research and Backtest.

For the library to be usable, the model checkpoints need to be pre-fetched at image build time and the cache directory (HF_HOME / the package's model cache path) pointed at that baked-in location, the same way other pretrained-model packages are handled. Worth confirming which classifier/regressor checkpoints to ship - the default ones are on the order of a few hundred MB.

Proposed change

Add tabpfn (plus any missing transitive dependencies) to the LEAN Python Docker image at the next batched library rebuild, and pre-download the default model checkpoints into the image cache so the estimators work offline.

Source

QuantConnect support ticket [Intercom 215475645137717].

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the LEAN Python Docker image dependency pins and the existing handling for pretrained-model caches. Check the TabPFNClassifier and TabPFNRegressor entry points, verify that their checkpoints are available without outbound internet, and confirm that both estimators can reach fit() successfully in Research and Backtest.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, huggingface, python, pytorch
Domain
build-system, machine-learning
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.