Inspiration

Every dry season, saltwater pushes further up the rivers of Vietnam's Mekong Delta and damages rice and orchards. The 2016 and 2020 salinity crises showed how costly a late decision can be. The data farmers and officials need (weather, soil, news, market prices) exists, but it is scattered across sources and hard to turn into a clear "what should I plant, and why?". We wanted a tool where you pick a place, change the climate scenario, ask that question in plain words, and get an answer that shows where every claim came from.

What it does

Geodesis is a map-first digital twin of the Mekong Delta with a research agent on top. Click a location or move the 2026–2050 timeline, and every metric, recommendation and chart updates. Then ask the agent a question about what you are looking at.

  • Geodesis Agent: a multi-step workflow with a live run trace. A fast NVIDIA Nemotron model plans which web searches to run. The app then pulls a live 16-day forecast (Open-Meteo) and web evidence (Tavily) in parallel. The largest Nemotron on the account reasons over everything and writes the actions, risks and limits. Code then verifies the answer.
  • Every claim is labelled: engine (the simulated twin), forecast (live weather), evidence (a numbered, clickable web source) or assumption (the model's own judgement). Only evidence claims can cite a source, and a citation that does not match a retrieved source is removed.
  • Explainable crop recommendations: a rule-based engine scores crops on weather, soil, market, satellite and historical factors. Every number shows its formula, confidence and data source.
  • Economic view: revenue, cost, profit, ROI, payback and subsidy eligibility for each option.
  • Scenario builder: adjust rainfall, salinity and water-saving (AWD) adoption with live sliders.
  • Role dashboards: separate views for farmers, cooperatives, government analysts and researchers.
  • Live operations: a satellite-point feed and an SMS alert dispatch preview (simulated).
  • English or Vietnamese answers.

The core idea is that the scoring stays deterministic and auditable:

$$\text{confidence} = \sum_i w_i \, s_i$$

where each factor score \( s_i \) is shown with its weight \( w_i \). The language models sit on top of the engine as researchers and narrators, not decision-makers. They cannot change a number.

How we built it

  • Front end: React 18, TypeScript and Vite, with Leaflet for the map, Recharts for charts and Tailwind CSS for styling.
  • Models: every model call goes through Nebius Token Factory's OpenAI-compatible API, from a Vercel serverless function, so the key never reaches the browser. nvidia/Nemotron-3_5-Lightning is the fast planner and fallback. The reasoner is the largest Nemotron available (in production, nvidia/Nemotron-3-Ultra-550b-a55b), discovered at runtime from GET /v1/models instead of being hard-coded.
  • Evidence: Tavily runs up to three searches per question. Results are de-duplicated and the best six become numbered sources. Open-Meteo gives the forecast for the exact coordinates. Web text is treated as untrusted data, and the model never supplies URLs.
  • Verification in code: JSON schema check, citation check, confidence capped at medium, and the "simulated data" and "outside the Mekong Delta" notes added by code. If a reply fails, one repair pass runs, then a fallback model.
  • Data for the twin: Open-Meteo (weather), ISRIC SoilGrids (soil) and OpenStreetMap Nominatim (geocoding). If a source is unreachable, the app falls back to labelled demonstration data, so it always works.
  • Quality: TypeScript strict mode, ESLint, 86 Vitest tests (45 for the agent and its client, with the network mocked) and a CI pipeline. A live evaluation script runs eight fixed cases against production.

Measured on the live site (8 runs, with web search): all 8 completed, median about 9.4 s end to end (range 8.3–15.8 s), 6 web sources per run, the first model reply passed verification every time, and no run needed the fallback model. Eight runs is a small sample, so treat it as indicative.

Challenges we ran into

  • Reasoning models spend tokens thinking before they answer. Our first run with web search needed three repair passes and had two runs of over a minute. The cause was a 2,200-token output cap that cut the JSON off. Raising it to 3,500 and shortening the prompts fixed it, and we re-ran the evaluation to confirm.
  • Keeping the AI useful without letting it override the engine. The agent receives the finished recommendation and can only explain and extend it. The simulated-data and out-of-scope notes come from code, not from the model.
  • Untrusted web text. Search results can contain anything, so the model gets them as quoted data and every URL is checked against what Tavily actually returned.
  • Model IDs are not stable names (Nemotron-3_5-Lightning versus Nemotron-3.5-Super-VL), so we discover them at runtime.
  • Honesty about our own demo. An earlier version showed model-accuracy figures we could not support. We removed them and labelled all simulated data. Removing them was worth more than keeping impressive-looking numbers.

What we learned

Explainability matters more than accuracy claims in agriculture. People act on a recommendation when they can see why it was made and where it came from. A larger model helps, but the checks around it matter more: labels on every claim, citations verified in code, and a clear statement of what the system cannot know. We also learned to measure how often a model misbehaves instead of assuming it never does.

What's next

Run the agent with farmers and extension officers and record where it is wrong. Calibrate the what-if model against real yield and salinity records, replace the simulated satellite layers with real Sentinel data, add a real SMS gateway, and have the Vietnamese output reviewed by a native speaker. Today the twin runs on simulated data, and Geodesis is a decision-support demonstration, not a validated forecasting tool.

Built With

Share this project:

Updates

Submission history