Spaces:
Build error
A newer version of the Gradio SDK is available: 6.26.0
Trailhead β Three-Phase Roadmap (v3)
Track: Backyard AI Β· Owner: Person D Β· ~5 days to June 15
Affirmed core assumption: plan online at basecamp, trek offline. Online work (route fetch, tile download) is allowed during planning; everything during the trek degrades gracefully to offline.
Keystone β the Position Abstraction. All contextual features read position from one interface with two sources:
- Simulated playback β steps along the uploaded GPX. Always works; demo with this; doubles as a "preview your trek" feature.
- Live
watchPosition(optional, on-device, screen-on only).
Continuous browser GPS on a multi-day offline trek is unreliable (assisted-GPS cold start wants network; backgrounded tabs suspend). Demo on simulation; offer live as a bonus; never promise live tracking as a guarantee.
Online data sources β PLANNING PHASE ONLY
External calls happen at basecamp with signal, never on the trail.
- Primary input: upload your own GPX β it's the hiker's real route; most reliable.
- OpenRouteService (ORS) β free OSM-based routing,
foot-hikingprofile, direct GPX out:GET https://api.openrouteservice.org/v2/directions/{profile}/gpx. Caveats: needs an API key + has rate limits (online-only); it routes between coordinates, it does not look up a named trek's established trail; OSM trail coverage in remote/high terrain is patchy. Use it to generate a route from waypoints, then validate it. Not authoritative for serious treks. - GPX repositories (e.g. the track sites you've identified) β fine as a source of pre-made GPX to download at basecamp; then proceed exactly as the upload path.
Design rule: any online fetch produces a local GPX that the rest of the app treats identically to an uploaded one. Nothing downstream depends on connectivity.
Reconsiderations β verdicts
| Proposed feature | Verdict | Why |
|---|---|---|
| GPX upload | Keep (primary) | The real route; most reliable. |
| Online route fetch (ORS / GPX repos) | Keep β planning phase only | Convenience at basecamp. Routing β named-trek lookup; validate output; never called offline. |
| Proximity checkpoint narration | Keep β headline AI moment | Driven by the position abstraction. |
| Progress: % complete / ETA / pace | Keep | Deterministic. |
| Deviation (off-route) alert | Keep, advisory | Distance-to-polyline. |
| Pace-adjusted ETA | Keep | Deterministic; recompute from actual elapsed vs distance. |
| Risk note (pace + daylight + altitude) | Adapt + constrain | Rule-based, conservative, advisory only. LLM phrases it; rules decide. |
| Voice via whisper.cpp | Keep (bonus) | Reuse Kisan-Sathi; value with gloves/cold. |
| Voice trek journaling β SQLite (w/ location) | Keep (should-have) | Speak β transcribe β log transcript + position + time. Offline. Feeds the post-trek report. Raw transcript is the record of truth. |
| Audio landmark alerts (TTS) | Optional, low priority | Fine if position + TTS work. |
| Post-trek report (stats + AI story) | Promote (should-have) | Safe, delightful, shareable; ideal honest-fit LLM use. |
| Offline map tiles (MBTiles) | Keep (should-have) | Map works with no signal; strengthens Off the Grid. |
| Storage (SQLite/files on disk) | Backend owns it | Model + persistence on disk; browser only does UI + geolocation. No weights in IndexedDB. |
| Battery-aware low-power mode | Keep | Lower n_ctx + GPS poll interval. Good Field Notes detail. |
PHASE 1 β MVP: "The Route Brief"
Goal: the grounded planning loop works end-to-end on the hiker's real GPX. Understandable in 10 seconds.
- GPX ingest: accept an uploaded GPX or a basecamp ORS/repo fetch that lands as a local GPX; from here everything is offline-identical.
- GPX parse (
gpxpy): tracks/segments/waypoints; concatenate segments; handle missing elevation/timestamps without crashing. - Route stats (deterministic): haversine distance; elevation gain with smoothing (moving average / min-change threshold β raw sums are badly inflated); min/max; estimated days (Naismith Γ· realistic hours/day, assumption shown).
- Interactive map β use
folium, not Plotly mapbox. Render polyline + waypoint markers; embed as HTML; verify on a phone. Avoid Plotly'sopen-street-mapstyle β it pulls tiles online and goes blank in airplane mode. (Reserve Plotly for the elevation chart in Phase 3, where there are no tiles.) - Static checkpoint readout: first waypoint β cumulative distance + elevation. No AI yet; prove the data pipeline.
- Deploy to HF Space (Docker + llama-cpp-python GGUF, reuse Kisan-Sathi Dockerfile); open on a phone.
Gate: the hiker's actual GPX yields correct distance, sane (smoothed) elevation gain, estimated days, and a map. Test on the real file β synthetic GPX hides the edge cases.
PHASE 2 β Functional: All Basic Hackathon Criteria Met
Goal: full demo-able loop incl. the contextual AI layer; real hiker has used it; all hard constraints met. The 60-second video is recordable from here.
- Position abstraction: simulated GPX playback ("play" advances along the route) + optional live
watchPosition. Everything below consumes it. - Proximity checkpoint narration (load-bearing moment): as position nears a waypoint, the LLM narrates grounded advice β distance/ascent to next point, altitude caution from the loaded guide, water/hazard only from tagged waypoints/data (never invented).
- Progress + pace + ETA + deviation: % complete, pace vs Naismith, ETA to next checkpoint, off-route alert. Deterministic.
- Advisory risk note: rule-based β daylight remaining vs distance/ascent to next safe camp β "you'll arrive ~late, consider the alternate camp." Conservative, advisory, not a guarantee. LLM phrases; rules decide.
- Gear list: rule engine (distance + elevation + days + max altitude + season) β LLM narrates.
- First-aid RAG: MiniLM over the wilderness first-aid guide; retrieve + cite section; static no-signal emergency card; "this is a field guide β carry a PLB/satellite messenger."
- Mobile-first UI (reuse your FastAPI custom frontend): large targets, outdoor-readable, high contrast.
- Dual deploy + offline verify: Pixel 10 via Termux; airplane mode, full loop works.
- Real hiker uses it + record footage reviewing their actual route.
- README + social post: track, real hiker + trek, model + param count, honest-fit rationale, run instructions, teammates' HF usernames.
Gate: record the full 60s demo from this phase β ingest GPX β map + stats β press play β proximity narration + pace/ETA fire β gear list β first-aid query β offline. Constraints: Gradio β Β· HF Space β Β· β€32B β Β· video + social β Β· real user β.
PHASE 3 β Final Touch & Bonus Quests
Goal: polish + badges. None of this blocks the video.
- π¨ Off-Brand β trail-computer HUD: amber/green tactical theme; elevation profile chart under the map (Plotly is great here β no tiles, deterministic, looks great on camera).
- π¦ Llama Champion: document GGUF + llama.cpp; battery-saver mode (lower
n_ctx, slower GPS poll). - π Off the Grid: make the airplane-mode run the hero shot; add offline map tiles (MBTiles) so the folium map works with no signal.
- π Voice trek journaling: speak β whisper.cpp β log transcript + position + timestamp to SQLite. Offline. Raw transcript is the record of truth.
- π Post-trek report (should-have): route + stats + an AI-narrated story built from the journal logs β a shareable artifact that feeds your social post. LLM summarizes/tags; never rewrites the logged facts.
- π Field Notes: the build story β elevation smoothing, simulation vs real GPS, offline tiles, offline edge LLM on a phone (Kisan-Sathi Termux notes carry over).
- Local waypoint tagging (bonus): hiker marks water/camp/hazard, saved to SQLite β enriches checkpoint advice without inventing anything.
- Live
watchPosition(bonus): wire the real-GPS source into the abstraction; screen-on demo only. - Final checklist: Space public under the org; loads cleanly; no keys;
.gitignoreexcludes weights + uploaded GPX; video + social published before June 15.
What to Hand the Vibe-Coding LLM
- The real GPX file β build/test against it, not synthetic.
- First-aid corpus (chunked) + static emergency card text β model can't originate medical content.
- Altitude/AMS thresholds + gear rules + seasonal averages β verified data files, not invented.
- Reused Kisan-Sathi contracts:
src/llm.pybackend interface, Dockerfile, RAG setup, SQLite layer, whisper.cpp ASR. - The position abstraction interface (simulated + live) so every contextual feature is source-agnostic.
- ORS integration note: planning-phase only; output is a local GPX treated identically to an upload; validate routes.
- Acceptance tests: distance Β±2% on a known GPX; smoothed (not raw) elevation gain; map renders offline (no online tiles); first-aid answers always cite a section; checkpoint advice never names a water source absent from waypoints; risk note advisory-only; journal entries store the raw transcript + position.
Carry-Through Gotchas
- Smooth elevation before summing (the #1 GPX error).
- No online map tiles β folium + local MBTiles, or the demo dies in airplane mode.
- ORS is planning-phase routing, not named-trek lookup β validate it.
- No invented water/hazards β grounded in waypoints/data only.
- First-aid + risk are high-stakes β ground, cite, advisory framing, static emergency floor.
- Demo on simulated position; live GPS is a bonus.
- Test on the real GPX early; verify
foliumon-device.