Breaking Changes
- Cache the decoder keys instead of the train embeddings.
get_embeddings(model, X_test, data_source="train")is not supported with cached infernce anymore. (#1189) tabpfn.model_loading.download_all_models()now raises an exception if one or more of the models fails to download. It will still download all possible models before raising the exception. (#1195)
Added
fit()now recognizes a date-like string column internally, though nothing yet expands it into calendar features: it is still read as a plain category or text. We also addedInferenceConfig.MIN_CARDINALITY_FOR_TEXT, to differentiate between category-vs-text and category-vs-number decisions; they default to the same value, since we are still not handling text. (#1205)
Changed
- Reduced peak host memory during preprocessing: the ensemble preprocessor no longer rebuilds the feature matrix in steps that cannot change it, taking transient RSS from 42.7 GB to 12.0 GB (-72%), and wall time with it, on a 666,667 x 2,000 float64 fit. Preprocessed outputs are unchanged. (#1186)
- Reduced peak host memory during preprocessing for tables with categorical columns: the reshape and ordinal-encoding steps no longer rebuild the feature matrix to reorder it or to encode part of it, taking transient RSS from 3.33 GB to 2.80 GB (-16%) on a 333,333 x 400 half-categorical fit. Preprocessed outputs are unchanged. (#1187)
- Speed up modality detection on large string columns. Deciding whether a column holds numbers or dates now stops at the first value that does not parse within a 1024-row prefix, instead of parsing every row first. Detection of a 1-million-row free-text column drops from roughly 14 seconds to under 20 milliseconds; the answers are unchanged. (#1208)
Fixed
- Fix an "illegal memory access" crash in the backward pass when fine-tuning on large batches: FlashAttention's backward indexes its workspace with 32-bit integers, so the batch is now chunked to keep each call inside that range. (#1184)
- Fix
fit_mode="fit_with_cache"raisingTypeError: forward() missing 1 required positional argument: 'task_type'for architectures whose forward pass takes atask_type: the KV cache build now forwards it, like the prediction paths already did. (#1197) fit()no longer crashes the interpreter outright on a table whose text column holds a hash-like value such as"8e2569614270f3d8b9e7038efac9f116". Modality detection askedpandas.to_numericwhether a column was numeric; below pandas 3.0 that function has a signed 32-bit integer overflow in its scientific-notation parser and segfaults on a string whose exponent lands in[2**31, 2**32)(pandas#63650, fixed upstream in pandas 3.0). A segfault cannot be caught withtry/except, so below pandas 3.0 the check now reads one value at a time with Python's built-infloat, which does not share the bug. On pandas 3.0 and later the check is unchanged. (#1203)- Fix
TabPFNRegressorrejecting a checkpoint whose config also describes a classification head: the criterion now follows the task the estimator is built for rather than being inferred frommax_num_classes. Loading a regression checkpoint intoTabPFNClassifiernow raises instead of silently building an unused bar distribution. (#1204)