📖 Read-only mirror.
gaiais published from the canonical AI-Factory monorepo. Pull requests are not accepted — any commit pushed here is overwritten byscripts/mirror_satellites.shon the next sync. 🐞 Found a bug or have a request? Please open an issue.
GAIA is a physical-world oracle gateway that sells Ed25519-attested sensor readings from
virtual IoT devices as paid AIMarket v2 capabilities, and serves a Metis-envelope-compatible
/v1/verify so the hub's Pay-on-Verified escrow can settle them —
an honest reading gets the provider paid, a lying sensor refunds the buyer automatically.
It is the ecosystem's third oracle class: math oracles prove computations, Metis judges LLM output, GAIA grounds settlement in physics. The demo fleet is simulated (two co-located weather stations sharing one site truth, an air-quality node, an energy meter — models imitate BME280/SDS011/SCD30/Shelly-EM-class hardware), but every wire surface — manifest, invoke, receipts, provider signature, verify envelope, W3C WoT Thing Descriptions — is the real one.
📖 Deep-dive (monorepo):
docs/iot-physical-oracles.md🌍 Live devices:gaia/devices/live.py🎬 3D visualization:frontend/(cd frontend && npm i && npm run dev)
# Container
docker pull ghcr.io/alexar76/gaia:latest
docker run --rm -p 9320:9320 ghcr.io/alexar76/gaia:latest
# From source (satellite checkout vendors oracle-core)
pip install -e vendor/oracle-core -e ".[dev]" # or: pip install -e ../oracles/core -e ".[dev]"
python -m gaia.main # :9320Poke it:
curl -s localhost:9320/.well-known/ai-market.json
curl -s localhost:9320/ai-market/v2/manifest
curl -s -X POST localhost:9320/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id": "gaia.weather.read@v1", "product_id": "gaia.gateway",
"input": {"device_id": "ws-01"}}'Set GAIA_ENABLE_LIVE=1 to register real public-API relays alongside the simulators.
Every relay uses the same Ed25519 attestation + plausibility path. Unreachable upstream
→ DeviceOffline → 503 / {ok:false} → no debit. Upstream hosts are allowlisted
(SSRF defence); invoke clients never supply a URL.
| Device id | Capability | Upstream | Key? |
|---|---|---|---|
nws-01 |
gaia.weather.read@v1 |
NOAA/NWS api.weather.gov |
no |
om-wx-01 |
gaia.weather.read@v1 |
Open-Meteo weather | no |
osm-01 |
gaia.air.read@v1 |
openSenseMap | no |
om-aq-01 |
gaia.air.read@v1 |
Open-Meteo air quality | no |
sta-01 |
gaia.air.read@v1 |
OGC SensorThings (Fraunhofer) | no |
openaq-01 |
gaia.air.read@v1 |
OpenAQ v3 | yes (GAIA_OPENAQ_API_KEY) |
uk-grid-01 |
gaia.grid.read@v1 |
UK Carbon Intensity | no |
usgs-quake-01 |
gaia.quake.read@v1 |
USGS GeoJSON feed | no |
noaa-tide-01 |
gaia.tide.read@v1 |
NOAA CO-OPS tides | no |
Full operator notes (5 languages): docs/LIVE-RELAYS.md.
curl -s -X POST https://iot.modelmarket.dev/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id":"gaia.grid.read@v1","product_id":"gaia.gateway",
"input":{"device_id":"uk-grid-01"}}'MIT — see LICENSE.