Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

therminal_py-1.0.5.tar.gz (49.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

therminal_py-1.0.5-py3-none-any.whl (38.8 kB view details)

Uploaded Python 3

File details

Details for the file therminal_py-1.0.5.tar.gz.

File metadata

  • Download URL: therminal_py-1.0.5.tar.gz
  • Upload date:
  • Size: 49.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for therminal_py-1.0.5.tar.gz
Algorithm Hash digest
SHA256 74bf39dca8fd39e3dbe448e4ab4bfea2cbfc0bccd7d12bf8eb0baa58d69cdd55
MD5 aa38392c7f5cb15f797a83a7247ee2c9
BLAKE2b-256 6e07d89cdd16e011046ff77372d7845c0482fcc760dcaee633ccfe5bf0c92ce3

See more details on using hashes here.

Provenance

The following attestation bundles were made for therminal_py-1.0.5.tar.gz:

Publisher: publish.yml on Tarabcak/therminal-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file therminal_py-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: therminal_py-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 38.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for therminal_py-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0f8db3230947c7cf545f7ba3f562a28e89e3db3f8385bb3b0d121b3e20b6cb3d
MD5 fd3c6f4d5226c324141d1c878669efe1
BLAKE2b-256 7c73a3e0f316cd1e4d7ec67d0e916b92ddb4fe4b2c325944d1e259dbdb68014e

See more details on using hashes here.

Provenance

The following attestation bundles were made for therminal_py-1.0.5-py3-none-any.whl:

Publisher: publish.yml on Tarabcak/therminal-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page