Instructions to use GizzAI/Gizzai-Sense-T-E2B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use GizzAI/Gizzai-Sense-T-E2B with Transformers:
# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("GizzAI/Gizzai-Sense-T-E2B", trust_remote_code=True) model = AutoModelForMultimodalLM.from_pretrained("GizzAI/Gizzai-Sense-T-E2B", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
Gizzai-Sense-T-E2B
一条序列 + 一段话 → 类型化的判断和带区间的预测。 A time series plus the words around it, in; calibrated typed answers and honest forecast bands, out.
A frozen Chronos-2 encoder reads the series; a small trained projector places its states in the
language model's own embedding space, where they sit in slots inside the <state> block — the way
Gemma 4 places image and audio features. The values are also written into the prompt as digits, so
the model can read an exact level and the shape at the same time.
Decisions come back as probabilities over the answer's own options, with no text generated, and numbers come back as three monotone quantiles corrected from Chronos-2's own forecast, so a band means what it says. Both were trained with proper scoring rules (log loss and Brier for decisions, pinball for quantiles), which is why the calibration numbers below are worth reading.
Quick start
pip install -U huggingface_hub torch "transformers>=5.17" chronos-forecasting
hf download GizzAI/Gizzai-Sense-T-E2B --local-dir Gizzai-Sense-T-E2B
import sys
sys.path.insert(0, "Gizzai-Sense-T-E2B") # sense_t.py ships with the weights
from sense_t import SenseT
s = SenseT("Gizzai-Sense-T-E2B")
series = {"names": ["门店A 日销量"], "values": [[980, 1012, 1040, 995, 1030, 1105, 1220,
970, 1008, 1035, 1001, 1042, 1110, 1235,
965, 1015, 1030, 999, 1038, 1102, 1228]],
"unit": "件", "step": "天"}
# a yes/no judgement, as a calibrated probability
print(s.noul("这家店最近没有促销。", "未来 7 天里会不会有一天低于 950 件?", series, horizon=7))
# a number, as 10 / 50 / 90% quantiles in the series' own units
print(s.forecast(series, step=2, horizon=7))
# the same question after one sentence changes: the event becomes a covariate the forecaster uses
print(s.forecast(series, step=2, horizon=7, state="已知未来:第 3 个天有“促销”。"))
choice and score work the same way; decide answers several questions about one series.
What it was trained on
Time series generated by this project, with exact labels, in four families:
- typed judgement over a series — anomalies, period, volatility, trends, thresholds, event effects
- native forecasting — the value at a future step, as quantiles, where half the events are given only in the text
- long-horizon judgement over 2,048 steps — long trend, percentile, year over year, seasonality, when the level shifted
- what-if judgement — two futures simulated from the same noise, so "is it worth acting?" has an exact answer, with the effect of an action described in words at graded strengths
One epoch is not enough for the harder families; this model saw 2.0.
It is not a domain model. It has never seen your data, and a published general model is the starting point for a domain fine-tune, not a replacement for one.
Results
Accuracy on the artifact's own evaluation, with the majority answer on the same rows in brackets. A number that matches the bracket means the model did not read anything there.
| question family | Held-out series, training domains (majority) | Unseen domains (majority) | Unseen phrasings (majority) |
|---|---|---|---|
| anomaly — was there an anomaly | 0.937 (0.540) | 0.933 (0.555) | — |
| anomaly_type — which kind of anomaly | 0.928 (0.481) | 0.884 (0.543) | — |
| event_effect — which way an event moved it | 0.696 (0.696) | 0.691 (0.532) | — |
| long_trend — the long trend | 0.917 (0.403) | 0.877 (0.360) | — |
| percentile — where today sits in its own history | 0.903 (0.653) | 0.890 (0.633) | — |
| period — the repeating period | 0.811 (0.293) | 0.703 (0.447) | — |
| season_next — next season from last year | 0.523 (0.390) | 0.497 (0.410) | — |
| shift_when — when the level shifted | 0.863 (0.417) | 0.793 (0.410) | — |
| threshold — will it cross a threshold | 0.783 (0.537) | 0.716 (0.569) | — |
| trend_future — the coming trend | 0.593 (0.580) | 0.572 (0.530) | — |
| trend_past — the trend so far | 0.742 (0.571) | 0.632 (0.502) | — |
| volatility — how volatile | 0.685 (0.282) | 0.739 (0.299) | — |
| whatif_decision — is the action worth it | 0.850 (0.807) | 0.860 (0.793) | 0.820 (0.763) |
| whatif_threshold_no — threshold without acting | 0.860 (0.543) | 0.857 (0.570) | 0.847 (0.607) |
| whatif_threshold_yes — threshold after acting | 0.860 (0.650) | 0.877 (0.637) | 0.837 (0.630) |
| which_grows — which series grows fastest | 0.404 (0.449) | 0.333 (0.476) | — |
| yoy — year over year | 0.827 (0.370) | 0.817 (0.353) | — |
| overall | 0.797 | 0.771 | 0.834 |
| mean calibration error (ECE) | 0.065 | 0.077 | 0.052 |
Numbers (quantile head), in the series' own scale units: Held-out series, training domains: pinball 0.176, 80% band covers 0.77; Unseen domains: pinball 0.238, 80% band covers 0.70; Unseen phrasings: pinball 0.179, 80% band covers 0.73. Pinball is the proper scoring rule for quantiles; 0.80 coverage is a calibrated 10–90% band.
Merged weights versus the adapter they came from, on held-out rows: max probability change 0.0410, 1 decisions changed. The released code path reproduces the merged model to 0.0000 on decisions and 0.0000 on quantiles.
Demos
Screen recordings of the released weights answering live — nothing replayed:
CN voice-over / 中文配音. One live session, four scenes: typed judgement, 10/50/90% forecast, promotion state change, and what-if tutoring. / 一次真实推理,四个场景:类型化判断、10/50/90% 预测、加入促销状态、辅导 what-if。
Bilingual caption edition / 中英双语字幕版. The same real-model recording with Chinese voice-over and Chinese-English captions. / 同一段真实模型录屏,保留中文配音并加入中英双语字幕。
Bilingual technical report / 中英双语技术报告
Read paper_sense_t_bilingual.md for the release-facing method, evaluation, runtime fidelity and limits. / 发布版方法、评估、运行时一致性与局限见 paper_sense_t_bilingual.md。
Limits and use
- Calibrated probabilities are an input to a decision, not the decision. Keep a person on anything that materially affects someone, and set thresholds from what an error actually costs.
- The model reads what it is given: a series, the words around it, and covariates. It has no access to anything else and will not tell you about a cause it was never shown.
- Forecast bands are honest about what the history and the text support; they cannot cover a shock that nothing in the input hints at.
- Trained on Chinese-language state text; other languages are untested.
- Series are read at up to the trained window; longer histories are truncated to it.
Licence
Gizzai Sense License (see LICENSE): free below US$100k annual organisational revenue, paid above.
Gemma 4's terms and prohibited-use policy flow through; Chronos-2 is Apache 2.0 and included
unmodified in chronos-2/. See NOTICE and USE_POLICY.md.
Inference code on GitHub: wzsxb233/gizzai-sense
Live bilingual demo / 在线双语试用:Hugging Face Space · ModelScope Studio
Commercial and academic collaboration: dengyicun@gizzai.com
- Downloads last month
- -