General Forecast
Predictors on tabular and time series foundation models. One manifest, gf.yaml, runs the same predictor on your machine and hosted.
- Website: https://generalforecast.com
- Docs: https://docs.generalforecast.com/
pip install generalforecast
A predictor from a CSV
In a directory with a CSV, gf init asks for the target, the model, the id column, the inputs and which rows are queries, then writes gf.yaml.
$ cd churn && gf init
Target churned
Model general-forecast/tabicl-v2-classifier
Id customer_id
Inputs spend, plan, signups
Queries 212 rows with no target
Initialized predictor churn in ./gf.yaml
gf check resolves the schema against the context and pins the model in gf.lock.
$ gf check
Resolved churn classification, 3 inputs, 1,840 context rows, 212 query rows
Locked gf.lock in 0.21s
gf eval scores the held-out rows.
$ gf eval
Resolved churn classification, 1,840 context rows, 212 query rows
Predicted 212 rows in 0.19s
accuracy 0.934
log loss 0.187
auroc 0.961
gf serve runs the predictor on this machine. The first run pulls the model's weights into ~/.cache/huggingface.
$ gf serve
Pulling general-forecast/tabicl-v2-classifier (1.2 GB) to ~/.cache/huggingface
Loading general-forecast/tabicl-v2-classifier (cached)
Compiled 12 programs in 6.8s
Serving churn at http://127.0.0.1:8000
curl -s http://127.0.0.1:8000/v1/projects/local/predictors/churn/predict \
-H 'content-type: application/json' \
-d '{
"api_version": "gf/v1",
"project": "local",
"request_id": "r-1",
"resource": {"kind": "predictor", "name": "churn"},
"payload": {"queries": [{"customer_id": 9001, "spend": 42.0, "plan": "pro", "signups": 3}]}
}'
The same predictor from Python:
import generalforecast as gf
import pandas as pd
df = pd.read_csv("new_customers.csv")
scored = gf.Predictor("./churn").predict(df) # columns: customer_id, label, p_0, p_1
gf push deploys it. gf predict and gf.Predictor("churn") then score rows against the hosted revision.
$ gf push
Uploading churn revision 7 snapshot, 1,840 rows, 3.1 kB
Deployed churn revision 7 to production in 41s
Estimators
Classifier, Regressor and Forecaster have the sklearn shape and take a catalog model. Weights pull on first use; download=False or GF_OFFLINE=1 refuses the download and names the gf model pull command instead.
import generalforecast as gf
clf = gf.Classifier(model="general-forecast/tabicl-v2-classifier")
clf.fit(X_context, y_context)
clf.predict_proba(X_queries)
fc = gf.Forecaster(model="general-forecast/chronos-2", horizon=7)
fc.fit(history) # columns: date, sku, units
fc.forecast() # quantiles 0.1, 0.5, 0.9 per sku per step
gf model list prints the catalog with each model's limits on context rows, queries and inputs.
Contributing
We welcome and value any contributions and collaborations. For more specific questions, please contact hello@generalforecast.com.
License
Licensed under the Apache License 2.0.
If you use General Forecast, please cite our work:
@misc{generalforecast2026,
title={General Forecast: A unified high-throughput inference engine for structured data foundation models},
author={Tejas Prabhune and Ayushi Batwara},
year={2026},
publisher={GitHub},
howpublished={\url{https://github.com/generalforecast/gf}}
}
Metadata
Release files for generalforecast 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| generalforecast-0.1.8-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| generalforecast-0.1.8-cp312-abi3-manylinux_2_28_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| generalforecast-0.1.8-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 67.3 MB
Release files / generalforecast-0.1.8-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | generalforecast-0.1.8-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 24.0 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8d8883ba78ab03d3a9c9802b9cdaddb37dce7e61d85ecfbaffc4da9d5f58002c
|
|
BLAKE2b-256 checksum How to use checksums |
3eb87cb9a974b7036c312a99e896fb3c49d752223d50a19655e141c28366c6e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.
Transparency logRelease files / generalforecast-0.1.8-cp312-abi3-manylinux_2_28_aarch64.whl
| Download URL | generalforecast-0.1.8-cp312-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 22.0 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
eafcdcbaee94eefa2d84d3b975c0a0ddb6dcfc610f591f535019223abfba4a95
|
|
BLAKE2b-256 checksum How to use checksums |
42e6c7cbe8136bd4f3333a50d781a678bd56d70760a3585e85f1b0694cd1df3f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.
Transparency logRelease files / generalforecast-0.1.8-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | generalforecast-0.1.8-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 21.3 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a7e119a3aec1c5e4a606c5db4d366d071c35840322daa2a38b4cdce25882fefe
|
|
BLAKE2b-256 checksum How to use checksums |
342cc19d8a602673fd551f59de51a44be224bd1830b1f60f5808a31a8f83fd87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.
Transparency logSecurity for generalforecast 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 3 files in this release have been uploaded with provenance metadata.
Attestation for generalforecast-0.1.8-cp312-abi3-manylinux_2_28_x86_64.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.