Python SDK for Therminal — Kalshi temperature prediction markets + NWS weather data
Project description
therminal-py
Python SDK for Therminal — Kalshi temperature prediction markets + NWS weather data + real-time METAR signaling.
Install
pip install therminal-py # core
pip install therminal-py[pandas] # + DataFrame + Parquet support
pip install therminal-py[ml] # + scikit-learn ML features
pip install therminal-py[torch] # + PyTorch Dataset
pip install therminal-py[cli] # + CLI tool
pip install therminal-py[all] # pandas + ml + cli
Requires Python 3.11+.
Quick Start
from therminal.weather import WeatherHistory, WeatherLive
from therminal.markets import MarketsClient
# Historical observations (via therminal-api)
weather = WeatherHistory()
obs = weather.observations(station="NYC", units="metric", as_dataframe=True)
# Live METAR (direct from AWC — same Observation schema as historical)
live = WeatherLive()
current = live.current("NYC")
print(current[0].temp_f)
# Batch: one AWC request for multiple stations
batch = live.current(["NYC", "ATL", "MDW", "LAX"])
# Market candles
markets = MarketsClient()
df = markets.candles(market="KXHIGHNY-26MAR20-T50", from_date="2026-03-01", as_dataframe=True)
Backward compatible: from therminal import TherminalClient still works. WeatherClient and LiveClient are aliases for WeatherHistory and WeatherLive.
Configuration
Create ~/.therminal.toml for sensible defaults:
[defaults]
units = "metric"
station = "NYC"
[api]
base_url = "https://api.mostlyright.xyz"
Resolution order: file < env vars (THERMINAL_UNITS, THERMINAL_TZ, THERMINAL_STATION) < per-call kwargs.
Live METAR (AWC Direct)
WeatherLive fetches real-time METAR from the Aviation Weather Center. Returns Observation objects identical in schema to WeatherHistory.observations(), eliminating train/serve skew for trading signals.
from therminal.weather import WeatherLive
live = WeatherLive()
obs = live.current(["NYC", "ATL"]) # batch: one request
history = live.latest("NYC", hours=3) # last 3 hours
metric = live.current("NYC", units="metric") # with conversion
ML Features (scikit-learn)
pip install therminal-py[ml]
from therminal.ml import WeatherFeatures, LOBFeatures
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import GradientBoostingRegressor
pipe = make_pipeline(
WeatherFeatures(station="ATL", sources=["omo", "metar"], lookback_hours=24),
StandardScaler(),
GradientBoostingRegressor(),
)
pipe.fit(dates_train, y_train)
pipe.predict(dates_test)
Typed Models
All responses return frozen dataclasses with both attribute and dict-style access:
obs = weather.observations(station="NYC")[0]
obs.temp_f # attribute access
obs["temp_f"] # dict access (backward compat)
obs.get("temp_f") # .get() with default
obs.to_dict() # full dict with all 29 fields
Documentation
Full API reference with interactive playground: docs.mostlyright.xyz
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 therminal_py-1.0.9.tar.gz.
File metadata
- Download URL: therminal_py-1.0.9.tar.gz
- Upload date:
- Size: 58.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8499d44b4204c68a7374be33bf6b9cfa0415c6e2bdfb5863286cc464d8239cd
|
|
| MD5 |
da3bb3d1974a35fae2c982a3dc3699fb
|
|
| BLAKE2b-256 |
2649283c291d9d8d8d4b13271406a0132459fdd8475ed1b68466d8a23c12e4c0
|
Provenance
The following attestation bundles were made for therminal_py-1.0.9.tar.gz:
Publisher:
publish.yml on Tarabcak/therminal-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
therminal_py-1.0.9.tar.gz -
Subject digest:
a8499d44b4204c68a7374be33bf6b9cfa0415c6e2bdfb5863286cc464d8239cd - Sigstore transparency entry: 1203758881
- Sigstore integration time:
-
Permalink:
Tarabcak/therminal-py@1a091d005282f87b0dd154af17c80268875744cd -
Branch / Tag:
refs/tags/v1.0.9 - Owner: https://github.com/Tarabcak
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1a091d005282f87b0dd154af17c80268875744cd -
Trigger Event:
push
-
Statement type:
File details
Details for the file therminal_py-1.0.9-py3-none-any.whl.
File metadata
- Download URL: therminal_py-1.0.9-py3-none-any.whl
- Upload date:
- Size: 40.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b46029ae25783cb42305497bf5836e39fc40aec9eadefc882b630e5e7329b3c9
|
|
| MD5 |
df1160f784df44269fcba88a7d7f39e6
|
|
| BLAKE2b-256 |
b763e8914f85158a7379cdedf809d6ab9062376d34c5f68471c8814516e35bef
|
Provenance
The following attestation bundles were made for therminal_py-1.0.9-py3-none-any.whl:
Publisher:
publish.yml on Tarabcak/therminal-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
therminal_py-1.0.9-py3-none-any.whl -
Subject digest:
b46029ae25783cb42305497bf5836e39fc40aec9eadefc882b630e5e7329b3c9 - Sigstore transparency entry: 1203758899
- Sigstore integration time:
-
Permalink:
Tarabcak/therminal-py@1a091d005282f87b0dd154af17c80268875744cd -
Branch / Tag:
refs/tags/v1.0.9 - Owner: https://github.com/Tarabcak
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1a091d005282f87b0dd154af17c80268875744cd -
Trigger Event:
push
-
Statement type: