A reproducible framework for benchmarking LLM native forecasting via knowledge cutoff and temporal masking
Traditional benchmarks ask: “Can you recall the answer?”
OracleProto asks: “Can you predict the future?”
May every forecast be reproducible, may AI truly become decision support
In service of every person’s judgments and choices for a good life
English | 中文文档 | Hugging Face
View Our Paper: arXiv
Visit Our Leaderboards: oracleproto.com
-
Background & Challenges: Evaluating LLM forecasting faces a dilemma: live benchmarks expire easily, and retrospective benchmarks suffer from data leakage. Prompting cannot establish a genuine knowledge boundary.
-
Architecture & Methods: The OracleProto framework combines model knowledge cutoffs and temporal masking to rigorously reconstruct historical events into reproducible, time-bounded forecasting samples.
-
Experimental Results: Tests on six contemporary LLMs show that OracleProto effectively distinguishes models' forecasting quality, stability, and cost efficiency. It reduces the leakage rate to 1%, providing a controlled signal source for model comparison, supervised fine-tuning, and reinforcement learning.
forecast_eval/ # core package
├─ runner.py # build_task_plan + scheduler
├─ react.py # ReAct loop + Tavily end_date injection
├─ leak_filter.py # retrieval-content auditor
├─ llm.py # OpenAI-compatible client; enforces no provider-side browsing
├─ search.py # Tavily wrapper
├─ analysis/ # scoring and diagnostics: accuracy, FSS, BI, composite, behavior
├─ prompts.py / parser.py # input renderer R / output parser Ψ
├─ types.py / errors.py / config.py # data models / typed exceptions / Settings
├─ db.py / loader.py # SQLite schema migrations / dataset sync
└─ tavily_keys.py / tools.py # API-key rotation / tool schemas
evaluation.py # entrypoint
scripts/ # offline tooling
tests/ # tests
runs/, logs/ # run artefacts
forecast_eval_set_example.db # bundled example dataset
Use uv :
uv sync
source .venv/bin/activateor use Conda :
conda env create -f environment.yml
conda activate oracleprotocp .env.example .envFill LLM_API_KEY, LLM_BASE_URL, MODELS, MODEL_TRAINING_CUTOFFS,
TAVILY_API_KEY, LEAK_DETECTOR_API_KEY, LEAK_DETECTOR_BASE_URL,
LEAK_DETECTOR_MODEL. The inline notes in .env.example
cover the rest.
pytest tests/ -qpython evaluation.pyEach invocation creates runs/{run_id}/ with run_id of the form
YYYYMMDD-HHMMSS-{4-char hex}. Set RUN_ID=<existing-id> in .env to resume that
run in place; completed or ineligible questions are skipped, and transient errors
retry under the original backoff policy.
The bundled forecast_eval_set_example.db carries 80 curated questions across
three question types, with dates spanning 2026-03-12 to 2026-04-14. To plug in
another corpus, swap SOURCE_DB and SOURCE_TABLE in .env.
runs/{run_id}/
├─ manifest.json # run-level metadata and hash chain
├─ db/{model_slug}.db # one SQLite per model, independently replayable
├─ analysis/ # CSV/JSON regenerated from the raw DB
└─ logs/{run_id}.log
The DB stores raw observations only. Every aggregate (forecast_eval/analysis/, which runs at the end of
evaluation.py and can also be invoked standalone:
python -m forecast_eval.analysis runs/{run_id}When the run is a virtual panel (manifest.is_virtual_panel = true), the analysis path additionally emits the panel-wide statistical envelope. See panels/README.md for the field-by-field schema and panels/example.json for a 2-model template.
For questions about code usage, dataset construction, or reproducing results, please reach out to the developers directly:
- Yiding Ma: yidingma@bupt.edu.cn
- Chengyun Ruan: ruanchengyun815@bupt.edu.cn
For joint research, dataset and benchmark co-development, or paper collaboration, please contact the principal investigators:
- Kaibo Huang (corresponding author): huangkaibo@bupt.edu.cn
- Zhongliang Yang (corresponding author): yangzl@bupt.edu.cn
View Our Paper: arXiv
If you use this project in your research, please cite our paper:
@article{OracleProto,
title={OracleProto: A Reproducible Framework for Benchmarking LLM Native Forecasting via Knowledge Cutoff and Temporal Masking},
author={Yiding Ma, Chengyun Ruan, Kaibo Huang, Zhongliang Yang, Linna Zhou},
journal={arXiv preprint arXiv:2605.03762},
year={2026}
}

