Numinous Crunch Starter Package
Project description
Numinous Crunch Challenge
A real-time binary event forecasting competition powered by Numinous (Bittensor Subnet 6) and hosted on CrunchDAO.
Numinous is a forecasting protocol that aggregates agents into superhuman LLM forecasters. In this competition, models predict the probability that real-world events — sourced from Polymarket — resolve "Yes". Predictions are scored using the Brier score, a strictly proper scoring rule that rewards calibrated, honest probabilities.
Install
pip install crunch-numinous
What You Must Predict
For each event, you receive structured data and must return a probability between 0.0 and 1.0 that the event resolves "Yes":
# Input: event data pushed to your model
{
"event_id": "polymarket-12345",
"title": "Will X happen by Y?",
"description": "...",
"cutoff": "2026-03-16T00:00:00Z",
"source": "polymarket",
"yes_price": 0.65, # current market price
"volume_24h": 150000.0,
"metadata": {}
}
# Output: your probability forecast
{"event_id": "polymarket-12345", "prediction": 0.72}
prediction = 1.0→ certain "Yes"prediction = 0.0→ certain "No"prediction = 0.5→ maximum uncertainty
Predictions are clipped to [0.01, 0.99] during scoring.
Scoring
Predictions are evaluated using the Brier score:
$$ \text{Brier} = (\text{prediction} - \text{outcome})^2 $$
Lower is better.
| Score | Meaning |
|---|---|
| 0.00 | Perfect prediction |
| 0.25 | Always predicting 0.5 (no information) |
| 1.00 | Worst possible (predicted 1.0, outcome was 0) |
The Brier score is strictly proper — the optimal strategy is to report your honest probability estimate.
Missing predictions are imputed as 0.5 → scored at 0.25.
Leaderboard ranking is based on brier_72h — the 72-hour rolling average Brier score (ascending, lower is better).
Create Your Tracker
A tracker is a model that receives event data and returns probability forecasts. It operates incrementally: events are pushed via feed_update(), and predictions are requested via predict().
To participate, subclass TrackerBase and implement _predict():
from numinous.tracker import TrackerBase
class MyModel(TrackerBase):
def _predict(self, subject):
data = self._get_data(subject)
if not isinstance(data, dict):
return {"event_id": subject, "prediction": 0.5}
event_id = data.get("event_id", subject)
yes_price = data.get("yes_price", 0.5)
# Your logic here — this example just follows the market
prediction = yes_price
return {"event_id": event_id, "prediction": prediction}
How It Works
feed_update(data)is called with new event data — stored automatically byTrackerBasepredict(subject, ...)is called — useself._get_data(subject)to access the latest event data
Available Event Fields
Inside _predict(), self._get_data(subject) gives you:
| Field | Type | Description |
|---|---|---|
event_id |
str |
Unique event identifier |
title |
str |
The question being asked |
description |
str |
Additional context and resolution criteria |
cutoff |
str |
ISO 8601 resolution deadline |
source |
str |
Data source (e.g. "polymarket") |
yes_price |
float |
Current market probability (0.0–1.0) |
volume_24h |
float |
Recent trading volume in USD |
metadata |
dict |
Additional source-specific data (slug, condition_id, etc.) |
Example
See the quickstart notebook to get started.
Gateway
Your model has no direct internet access in production. All external calls (LLMs, search, OSINT...) must go through the gateway, a local proxy to multiple AI providers.
- In production:
SANDBOX_PROXY_URLis set automatically and points to the Crunch gateway — API costs are covered by Crunch. - Locally: you run the gateway yourself with your own API keys. Most providers offer a free tier.
Start the gateway locally
crunch-numinous gateway restart
API keys
API keys are only needed for local testing — do not include them in the notebook you submit.
You can set them in two ways:
Option 1 — Environment variables (e.g. in a notebook cell you won't submit):
import os
os.environ["OPENAI_API_KEY"] = "sk-..."
os.environ["OPENROUTER_API_KEY"] = "sk-or-..."
Option 2 — A persistent env file that you never submit:
# ~/.crunch-numinous-gateway.env
OPENAI_API_KEY=sk-...
OPENROUTER_API_KEY=sk-or-...
CHUTES_API_KEY=...
You can also create it interactively:
crunch-numinous gateway configure
Use the gateway in your tracker
In your model, call the gateway via SANDBOX_PROXY_URL:
import os, httpx, uuid
GATEWAY_URL = os.environ.get("SANDBOX_PROXY_URL", "http://localhost:8090")
resp = httpx.post(
f"{GATEWAY_URL}/api/gateway/openai/responses",
json={
"model": "gpt-5-nano",
"input": [{"role": "user", "content": "Will BTC hit 100k?"}],
},
timeout=30.0,
)
See the API Reference for all available endpoints and providers.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crunch_numinous-0.4.1.tar.gz.
File metadata
- Download URL: crunch_numinous-0.4.1.tar.gz
- Upload date:
- Size: 60.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56c81fb856822ef8f23e0cdd2050b36ea62b537c80c17288bd2f5b1333692a1b
|
|
| MD5 |
2ce031dc59cc3388c9540c464677efc4
|
|
| BLAKE2b-256 |
b58f2171b4878a5c8d7828a73904ec5726fce96e03d48036751c0bf5068b228f
|
File details
Details for the file crunch_numinous-0.4.1-py3-none-any.whl.
File metadata
- Download URL: crunch_numinous-0.4.1-py3-none-any.whl
- Upload date:
- Size: 56.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da9d38d59a0b4913461487a3e74571ca98bc0bcc0f2b33f0cd4a874359901c33
|
|
| MD5 |
d3286012df32074fbad916fca8643f0a
|
|
| BLAKE2b-256 |
2f16486507f43e54fb7ffe9c665397ebf499d88b8236a53b13d1df47cfd0d7a4
|