Riprap Demo Playbook
For: AMD Developer Cloud Hackathon Β· May 4β10, 2026 Live URL: https://lablab-ai-amd-developer-hackathon-riprap-nyc.hf.space
What was fixed for the demo
Cornerstone (Hazard Reader) latency β DEP stormwater + Sandy 2012 join went from a 33-second cold-load to <100ms. Both layers are baked to compact GeoTIFFs (
data/baked/, 7 MB total) sampled with rasterio. The 33s ReadTimeouts in batch testing are gone.Heavy register specialists no longer hang β
step_nycha,step_doe_schools,step_doh_hospitalspreviously did 20 polygonΓpolygon intersections per query (8+ minute hang on HF Space CPU). They now read pre-computed exposure flags fromdata/registers/*.json(sub-millisecond). Hospitals don't have a pre-built register but read the 30 KB GeoJSON directly and sample the new Cornerstone rasters per hit.Live EO chain β every fine-tune renders on the map β every Sentinel-2-driven specialist now produces polygons that surface as a MapLibre layer:
prithvi_live(NYC Pluvial flood segmentation) β blue water polygons (prithvi-live-fill/-line)terramind_lulc(NYC LoRA, 5-class land cover) β categorical fill keyed onfill_colorper feature (terramind-lulc-fill/-line)terramind_buildings(NYC LoRA, binary building mask) β red building footprints (terramind-buildings-fill/-line)terramind(IBM v1 base synthesis, DEMβLULC) β uses the same LULC layer, falls back when the LoRA didn't fire Wire format: droplet returnspred_b64(uint8 per-pixel argmax raster) +pred_shape+class_labels; HF polygonises against the chip's WGS84 bounds viaapp/context/_polygonize.py. Verified live on Beach Channel: 118 LULC polygons, 6 building polygons, 101 synthesis polygons; prithvi correctly returns 0 (address is inland and dry). Three droplet bugs fixed along the way:_build_chip_tensor5D-input crash for the LoRAs; missingsynthesisadapter route; DEM shape mismatch ((1,H,W)vs(1,1,H,W)).
Misleading UI copy fixed β three Stone specialists (TerraMind Buildings/LULC/Synthesis, Prithvi-NYC-Pluvial) previously claimed
RIPRAP_HEAVY_SPECIALISTS=0when they silently skipped. Heavy specialists are actually enabled in production β the new copy reflects the actual cause (no recent <30% cloud Sentinel-2 chip / inference unavailable).
The 3 demo queries
1. 2508 Beach Channel Drive, Queens β full single_address activation
What it shows: the deep-data-density address from FRIDAY-REPORT. Single_address intent triggers every specialist:
- Cornerstone: Sandy outside, all DEP scenarios outside (this is Bayswater, just inland of the Sandy zone β useful counter-example)
- Touchstone: 2 FloodNet sensors (600m radius), 64 NYC 311 flood complaints, NOAA station 8516945 live, NWS hourly METAR
- Lodestone: Granite TTM forecasts (peak 0.47 ft surge ~2h ahead), TTM 311-forecast, NWS alerts
- Keystone: 7 MTA entrances (6 in Sandy, 5 in DEP-2080), 2 NYCHA developments, 5 schools (4 in Sandy, 3 in DEP-2080), 1 hospital β all with elevation/HAND from baked rasters
- Live EO:
prithvi_eo_livefires with a real Sentinel-2 chip (β€30% cloud, β€120 days old) β flood segmentation runs on the MI300X;eo_chip_fetchpulls multi-modal S2L2A + S1RTC chip - Capstone: Granite Embedding RAG (3 hits) + GLiNER typed extraction + Mellea-grounded Granite-4.1 8B reconciliation (4/4 requirements pass)
Talking points: "This is what 'resilient infrastructure briefing' produces when every specialist fires. The Touchstone and Cornerstone disagree β Bayswater is just inland of Sandy 2012 but its subway entrances 200m away are deep in the zone. Live data: the Prithvi specialist just pulled a Sentinel-2 image from this month and ran flood segmentation on the MI300X."
2. Coney Island I Houses, Brooklyn β neighborhood path, narrative briefing
What it shows: neighborhood intent routing. Planner reads "Houses" with no street number β resolves to NTA polygon, runs the neighborhood specialist set (sandy_nta, dep_*_nta, nyc311_nta).
- Returns a Markdown briefing structured as Status / Empirical / Modeled / Policy
- Uses NTA-aggregated metrics ("X% of the neighborhood was inundated during Sandy")
- ~7-second total latency
Talking points: "Same system, different intent. The planner picks neighborhood for queries that name an area without a house number. The briefing is denser narrative; the underlying data is NTA-aggregated, which is the right unit for emergency-management framing."
3. 80 Pioneer Street, Brooklyn (Red Hook) β single_address, full activation
What it shows: Red Hook is canonical Sandy turf. All Stones populated:
- Cornerstone: Sandy inside, DEP-2080 outside, microtopo 0.83m elevation (low-lying)
- NYCHA: Red Hook Houses (East/West) β both inside Sandy
- Schools: PS 27, PS 30 β both inside Sandy
- Hospitals: 3 nearby
- MTA: entrances inside Sandy
- Live Sentinel-2 chip + Prithvi flood segmentation runs
Talking points: "Red Hook is the canonical 'this is what we got wrong in 2012' address. The system surfaces a NYCHA development, a school, a hospital, and a subway entrance β all at risk in the same query. That's the demo: one query, four asset classes, every Stone audited, plus a live Sentinel-2 chip."
Reading the trace
The trace UI groups specialists by Stone. Each row shows status (fired / silent / errored) and a one-line skip reason if silent. Silent isn't broken β it's the engineering-honest contract: when a specialist's preconditions aren't met, it stays silent rather than fabricating.
Honest skips you'll see in the demo:
- "FloodNet sensor recurrence: sensor has < silent-floor historical events; forecast omitted" β sensor too new to forecast
- "NPCC4 SLR projection: not yet wired into FSM" β out of scope, listed for transparency
- "NWS public alerts: no active flood-relevant alerts at this address" β true, no active alert today
Specialists that may show as skipped/errored on the demo:
- TerraMind LULC + Buildings: LIVE β finetuned NYC adapters running on the MI300X. Hits live Sentinel-2 + Sentinel-1 chips. TerraMind Synthesis (the third terramind variant, DEM-driven LULC synthesis) has no remote inference route, so it returns a clean "deps unavailable: terratorch (RuntimeError)" on the HF Space β not on the demo critical path.
- floodnet_forecast β sensors with <5 historical events skip the forecast.
- nws_alerts β when no flood-relevant alert is active at the address (most days).
Caveats to be ready for
- NYCHA cards are binary, not pct-overlap β per-query view shows
inside_sandy_2012: boolanddep_*_class: intinstead ofpct_inside_sandy_2012floats. Same source data, less precise representation but fast (~ms instead of 8 min). The/api/register/nychacity-wide register is unchanged. - Heavy specialists are enabled but may silently skip if Sentinel-2 chip fetch returns nothing recent for the query address. Prithvi-EO Live looks back 120 days for <30% cloud β most NYC addresses have a recent hit; very edge-of-NYC ones may not.
- Inference is remote on AMD MI300X via vLLM at
165.245.141.218:8001. If the droplet is down, the reconciler will fail and the Capstone Stone won't render a paragraph; specialists will still fire and surface their data. - Bake re-runs β
data/baked/*.tif(7 MB) was generated once viascripts/bake_cornerstone_rasters.py. Re-bake when DEP scenarios get republished by NYC DEP (rare, ~every 5 years). - Register rebuilds β
data/registers/*.jsonare regenerated byscripts/build_*_register.pywhen the underlying NYCHA / DOE / NYS DOH datasets refresh.
End-to-end smoke test
To verify before showtime:
.venv/bin/python scripts/probe_addresses.py \
--base https://lablab-ai-amd-developer-hackathon-riprap-nyc.hf.space \
--addresses "2508 Beach Channel Drive, Queens|Coney Island I Houses, Brooklyn|80 Pioneer Street, Brooklyn" \
--timeout 240
Expected: 3/3 PASS, each in 6β17 s after warm-up. If 2508 Beach Channel takes >60s, that's the post-restart pre-warm finishing β re-run.
Final summary of changes shipped this cycle
| Change | Files | Effect |
|---|---|---|
| Cornerstone raster bake | app/flood_layers/{dep_stormwater,sandy_inundation}.py, scripts/bake_cornerstone_rasters.py, data/baked/*.tif |
33s β <100ms cold; <5ms per query |
| Register refactor | app/registers/{nycha,doe_schools,doh_hospitals}.py, app/registers/_loader.py |
8+ min hang β <100ms total |
| EO deps | requirements.txt (planetary-computer/pystac-client/rioxarray/xarray/einops) |
Live Sentinel-2 + Prithvi remote inference |
| Deps gate split | app/flood_layers/prithvi_live.py, app/context/terramind_synthesis.py, app/context/terramind_nyc.py |
Tier-1 chip-fetch separated from Tier-2 local-inference |
| UI honesty | web/sveltekit/src/lib/data/stoneRegistry.ts, web/sveltekit/src/lib/client/registerAdapter.ts, web/sveltekit/src/routes/q/[queryId]/+page.svelte |
"RIPRAP_HEAVY_SPECIALISTS=0" copy gone; new NYCHA schema |
| HF env | scripts/update_hf_env.sh (RIPRAP_NYCHA_REGISTERS=1), set on live Space |
Heavy register specialists actually attached to FSM |
| FSM consumers | app/fsm.py, app/reconcile.py |
Match new NYCHA schema |
| Warmup hygiene | web/main.py |
Drop 91 MB Sandy GeoJSON pre-load (no longer needed) |