| <!doctype html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="AgroVeritas — auditable bilingual agricultural intelligence grounded in FAO and NASA evidence."> |
| <title>AgroVeritas Evidence Assistant</title> |
| <style> |
| :root{--ink:#071b23;--ink2:#16363c;--teal:#087970;--teal2:#0fa499;--lime:#b9e46c;--paper:#f6f8f3;--white:#fff;--line:#dce7df;--muted:#63777a;--gold:#f5c451;--shadow:0 24px 70px rgba(7,27,35,.14)} |
| *{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif} |
| a{color:inherit}.shell{width:min(1180px,calc(100% - 28px));margin:0 auto;padding:18px 0 46px} |
| .hero{position:relative;overflow:hidden;background:radial-gradient(circle at 88% -10%,rgba(185,228,108,.38),transparent 35%),linear-gradient(135deg,#051a22,#0a3b41 58%,#087970);color:white;padding:44px;border-radius:28px;box-shadow:var(--shadow)} |
| .hero:after{content:"";position:absolute;width:280px;height:280px;border:1px solid rgba(255,255,255,.12);border-radius:50%;right:-72px;bottom:-165px;box-shadow:0 0 0 38px rgba(255,255,255,.035),0 0 0 76px rgba(255,255,255,.025)} |
| .kicker{color:var(--lime);font-weight:850;letter-spacing:.15em;text-transform:uppercase;font-size:.76rem}.hero h1{font-size:clamp(2.5rem,6vw,5.2rem);line-height:.92;letter-spacing:-.055em;margin:.35rem 0 1rem;max-width:850px}.hero p{color:#d9ece9;font-size:1.08rem;line-height:1.6;max-width:760px;margin:0 0 18px}.badges{display:flex;gap:8px;flex-wrap:wrap}.badge{border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.08);padding:7px 11px;border-radius:999px;font-size:.82rem} |
| .metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin:13px 0 22px}.metric{background:white;border:1px solid var(--line);border-radius:19px;padding:19px;box-shadow:0 8px 24px rgba(7,27,35,.055)}.metric strong{display:block;color:var(--teal);font-size:1.9rem;letter-spacing:-.04em}.metric span{color:var(--muted);font-size:.82rem} |
| .workspace{display:grid;grid-template-columns:minmax(300px,.82fr) minmax(420px,1.3fr);gap:14px}.panel{background:white;border:1px solid var(--line);border-radius:22px;padding:24px;box-shadow:0 10px 30px rgba(7,27,35,.055)}h2{margin:0 0 6px;font-size:1.28rem}.sub{color:var(--muted);font-size:.9rem;line-height:1.5;margin:0 0 17px} |
| label{display:block;font-size:.78rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:#486066;margin:16px 0 7px}.langs{display:flex;gap:7px;flex-wrap:wrap}.lang{border:1px solid var(--line);background:#f8faf7;color:var(--ink2);border-radius:999px;padding:8px 12px;font-weight:700;cursor:pointer}.lang.active{background:var(--ink);color:white;border-color:var(--ink)} |
| textarea{width:100%;min-height:142px;resize:vertical;border:1px solid #cddbd3;border-radius:14px;background:#fbfcfa;padding:15px;color:var(--ink);font:inherit;line-height:1.5;outline:none}textarea:focus{border-color:var(--teal2);box-shadow:0 0 0 4px rgba(15,164,153,.12)} |
| .primary{width:100%;border:0;border-radius:14px;background:linear-gradient(135deg,var(--teal),var(--teal2));color:white;font-weight:850;padding:14px 18px;margin-top:10px;cursor:pointer;box-shadow:0 9px 20px rgba(8,121,112,.22)}.primary:hover{filter:brightness(1.05);transform:translateY(-1px)} |
| .examples{display:grid;gap:7px}.example{border:1px solid var(--line);background:#f8faf7;border-radius:12px;padding:11px 12px;text-align:left;color:#29474c;cursor:pointer;line-height:1.35}.example:hover{border-color:#8fc5bc;background:#eff8f2}.example small{display:block;color:var(--teal);font-weight:800;margin-bottom:3px} |
| .answer-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.status{display:inline-flex;align-items:center;gap:7px;color:#176b4e;background:#e8f7ec;border:1px solid #bfe6c9;border-radius:999px;padding:6px 10px;font-size:.76rem;font-weight:850}.dot{width:7px;height:7px;background:#25a667;border-radius:50%;box-shadow:0 0 0 4px rgba(37,166,103,.12)} |
| .answer{min-height:540px;background:#fbfcfa;border:1px solid #e3ece6;border-radius:16px;padding:20px;margin-top:15px;line-height:1.64}.answer h3{font-size:1.02rem;color:#0a716b;margin:19px 0 5px}.answer h3:first-child{margin-top:0}.answer ul{padding-left:20px}.answer .empty{display:grid;place-items:center;min-height:450px;color:#75878a;text-align:center}.answer .empty .mark{font-size:3rem;margin-bottom:8px} |
| details{margin-top:12px;border:1px solid var(--line);border-radius:14px;background:white}summary{cursor:pointer;padding:13px 15px;font-weight:850;color:#2f5055}.trace{padding:0 15px 15px;display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.trace div{background:#f4f8f4;border-radius:10px;padding:10px}.trace b{display:block;color:var(--muted);font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}.trace span{font-size:.86rem;word-break:break-word} |
| .release{margin-top:15px;background:#eaf6ee;border-left:4px solid var(--teal);border-radius:14px;padding:16px 18px;color:#29474c;line-height:1.5}.links{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}.links a{text-decoration:none;border:1px solid #bad6cb;background:white;padding:9px 12px;border-radius:10px;font-weight:800;font-size:.84rem}.footer{color:#6b7e81;font-size:.8rem;line-height:1.5;padding:18px 4px 0} |
| @media(max-width:880px){.workspace{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}.answer{min-height:360px}.hero{padding:31px 25px}} |
| @media(max-width:520px){.shell{width:min(100% - 16px,1180px)}.metrics{grid-template-columns:1fr 1fr}.metric{padding:15px}.metric strong{font-size:1.55rem}.panel{padding:18px}.trace{grid-template-columns:1fr}} |
| </style> |
| </head> |
| <body> |
| <main class="shell"> |
| <section class="hero"> |
| <div class="kicker">AgroVeritas · AutoScientist Agriculture</div> |
| <h1>Agricultural intelligence<br>you can audit.</h1> |
| <p>Ask in English or Español. Each matched answer separates the finding, source record, verification logic, evidence boundary, and the local check required before action.</p> |
| <div class="badges"><span class="badge">FAO crop calendars</span><span class="badge">NASA historical climate</span><span class="badge">English + Español</span><span class="badge">Evidence-bounded by design</span></div> |
| </section> |
|
|
| <section class="metrics"> |
| <article class="metric"><strong>78%</strong><span>Agriculture held-out win rate</span></article> |
| <article class="metric"><strong>23%</strong><span>Frozen baseline win rate</span></article> |
| <article class="metric"><strong>10/10</strong><span>Final dataset quality</span></article> |
| <article class="metric"><strong>28,220</strong><span>Exact adapted training rows</span></article> |
| </section> |
|
|
| <section class="workspace"> |
| <aside class="panel"> |
| <h2>Ask the evidence</h2><p class="sub">Try a verified scenario or write a closely related crop-calendar or historical-climate question.</p> |
| <label>Response language</label> |
| <div class="langs"><button class="lang active" data-lang="Auto">Auto-detect</button><button class="lang" data-lang="English">English</button><button class="lang" data-lang="Español">Español</button></div> |
| <label for="question">Agricultural question</label> |
| <textarea id="question" placeholder="Ask about a crop calendar, a regional historical climate record, or whether the evidence supports a recommendation…"></textarea> |
| <button class="primary" id="run">Trace the answer →</button> |
| <label>Verified scenarios</label> |
| <div class="examples" id="examples"></div> |
| </aside> |
|
|
| <section class="panel"> |
| <div class="answer-head"><div><h2>Evidence-bounded response</h2><p class="sub">Five-part answer with provenance and limitations.</p></div><span class="status"><i class="dot"></i> Public demo</span></div> |
| <div class="answer" id="answer"><div class="empty"><div><div class="mark">◎</div><b>Choose a verified scenario</b><br>or ask a closely related question.</div></div></div> |
| <details id="audit"><summary>Audit trail</summary><div class="trace" id="trace"></div></details> |
| </section> |
| </section> |
|
|
| <section class="release"><b>Transparent public demo mode.</b> This free static Space demonstrates AgroVeritas’s verified response contract through curated evidence retrieval. Serving the released Llama 4 Scout adapter itself requires compatible base-model access and GPU compute. The exact adapter and complete training export are public. |
| <div class="links"><a href="https://huggingface.co/MarianaCodebase/AgroVeritas-Scout-17B" target="_blank">Model weights ↗</a><a href="https://huggingface.co/datasets/MarianaCodebase/AgroVeritas-Evidence-QA-Adapted" target="_blank">Exact dataset ↗</a><a href="https://www.kaggle.com/models/marianacodebase/agroveritas-scout-17b-agriculture" target="_blank">Kaggle model ↗</a></div> |
| </section> |
| <footer class="footer">Historical crop calendars and climatology are planning evidence—not live weather, field diagnosis, pesticide guidance, or a guarantee of yield. Verify material decisions with current authoritative data and local agricultural extension. Built with Adaptive Data and AutoScientist by Adaption.</footer> |
| </main> |
|
|
| <script> |
| const records=[ |
| {id:"agroveritas-v200-15451",lang:"English",tag:"FAO · Timor-Leste",q:"Does 1 May fall within the recorded sowing window for broad green bean in South Coast Lowland, Timor-Leste?",crop:"Bean, broad green",region:"Timor-Leste · South Coast Lowland",task:"Calendar interval membership",source:"FAO Crop Calendar API",url:"https://api-cropcalendar.apps.fao.org/",scope:"Historical regional crop calendar",sections:[ |
| ["Agricultural finding","<b>No.</b> 1 May does not fall within the recorded sowing window for broad green bean in South Coast Lowland, Timor-Leste, using FAO record windows 1–4."], |
| ["Supporting record","<ul><li><b>Source:</b> FAO Crop Calendar API</li><li><b>Record update:</b> 26 February 2021</li><li><b>Cycle 1:</b> 15 November–1 December</li><li><b>Cycle 2:</b> 15 May–15 June</li><li><b>Cycle 3:</b> 30 May–5 June</li><li><b>Cycle 4:</b> 20 November–10 December</li></ul>"], |
| ["How the finding was checked","Inclusive cyclic interval logic was applied to 1 May. It precedes cycles 2 and 3 and lies outside both November–December intervals."], |
| ["Evidence limitations","This is a historical regional calendar—not live weather or a field recommendation. It does not observe present soil moisture, variety, crop condition, water access, or local restrictions."], |
| ["Extension review","Confirm current rainfall onset, field conditions, and current regional extension guidance before committing labor or inputs."]]}, |
| {id:"agroveritas-v200-17104",lang:"English",tag:"NASA · Nigeria",q:"What are the best irrigation methods for beans and maize during flowering in the current weather conditions in Katsina?",crop:"Beans and maize",region:"Nigeria · Katsina · Ingawa",task:"Climate advisory guardrail",source:"DigiGreen FarmerChat + NASA POWER",url:"https://power.larc.nasa.gov/",scope:"Historical climatology; no live weather",sections:[ |
| ["Planning answer","The supplied evidence <b>cannot establish the live weather requested</b> and contains no evidence identifying a best irrigation method. It supports historical planning context only."], |
| ["Traceability","<ul><li><b>Representative cell:</b> 12.0° N, 7.5° E</li><li><b>Reference period:</b> January 2001–December 2020</li><li><b>March history:</b> mean 27.89 °C; maximum 41.46 °C; precipitation 0.05 mm/day; relative humidity 17.95%</li></ul>"], |
| ["Reasoning discipline","Historical climatology cannot supply missing live weather, soil moisture, crop-stage observations, or a crop-specific irrigation prescription."], |
| ["Current-data boundary","No method—drip, furrow, sprinkler, or otherwise—can be labeled “best” from this record alone."], |
| ["Verification step","Verify a current local forecast or observation, soil moisture at rooting depth, actual flowering stage, available infrastructure, and locally validated agronomic guidance."]]}, |
| {id:"agroveritas-v200-06880",lang:"English",tag:"FAO · Cabo Verde",q:"What are the usual sowing and harvest windows for sweet potato in sub-humid and wet altitude areas of Cabo Verde?",crop:"Sweet potato",region:"Cabo Verde · Sub-humid and wet altitude areas",task:"Regional crop-calendar extraction",source:"FAO Crop Calendar API",url:"https://api-cropcalendar.apps.fao.org/",scope:"Historical regional crop calendar",sections:[ |
| ["Agricultural finding","For sweet potato, the FAO record gives <b>sowing from 15 July–30 September</b> and <b>harvest from 31 October–31 January</b> for the <i>saison pluviale</i>."], |
| ["Supporting record","The source is the FAO Crop Calendar API. The record contains one numbered cycle and reports 26 February 2021 as its update date."], |
| ["How the finding was checked","The sowing window and paired harvest window were transcribed from the same cycle. No midpoint or additional season was inferred."], |
| ["Evidence limitations","This historical planning record does not reflect current rainfall, soil moisture, cultivar, crop condition, or field access."], |
| ["Extension review","Confirm current local weather, field status, and the intended action with the responsible local extension service."]]}, |
| {id:"agroveritas-v200-01652",lang:"Español",tag:"FAO · Cabo Verde",q:"¿El 15 de agosto está dentro de la ventana registrada de siembra para frijoles lima en Cabo Verde?",crop:"Frijoles, lima",region:"Cabo Verde · Zonas semiáridas y subhúmedas",task:"Pertenencia a intervalo",source:"API del Calendario de Cultivos de la FAO",url:"https://api-cropcalendar.apps.fao.org/",scope:"Calendario regional histórico",sections:[ |
| ["Respuesta dentro del alcance","<b>Sí.</b> El 15 de agosto está dentro de la ventana registrada de siembra para frijoles lima en las zonas semiáridas y subhúmedas de altitud media-baja de Cabo Verde."], |
| ["Correspondencia con el registro","<ul><li><b>Ciclo 1:</b> siembra del 15 de agosto al 15 de septiembre</li><li><b>Cosecha:</b> 15 de noviembre–10 de febrero</li><li><b>Actualización:</b> 26 de febrero de 2021</li></ul>"], |
| ["Prueba de consistencia","Se aplicó una regla inclusiva: <b>15 agosto ≤ 15 agosto ≤ 15 septiembre</b>. La fecha coincide con el límite inferior."], |
| ["Prevención de uso indebido","Es un calendario regional histórico, no tiempo en vivo ni diagnóstico de parcela. No permite inferir rendimiento, dosis o condiciones actuales."], |
| ["Acción posterior a la verificación","Confirme lluvia actual, humedad del suelo y orientación de extensión agrícola vigente antes de comprometer recursos."]]}, |
| {id:"agroveritas-v200-19123",lang:"Español",tag:"FAO · RPD de Corea",q:"¿El 1 de septiembre está dentro de la ventana registrada de cosecha para cebada en las tierras altas del norte de la RPD de Corea?",crop:"Cebada",region:"RPD de Corea · Tierras altas del norte",task:"Pertenencia a intervalo",source:"API del Calendario de Cultivos de la FAO",url:"https://api-cropcalendar.apps.fao.org/",scope:"Calendario regional histórico",sections:[ |
| ["Resultado solicitado","<b>No.</b> El 1 de septiembre no está dentro de la ventana registrada de cosecha para cebada en las tierras altas del norte de la RPD de Corea."], |
| ["Procedencia","<b>Ciclo 1:</b> siembra del 20 de abril al 1 de mayo; cosecha del 25 de julio al 15 de agosto. Actualización: 26 de febrero de 2021."], |
| ["Comprobación reproducible","El 1 de septiembre es posterior al límite superior inclusivo, 15 de agosto; por tanto, queda fuera del rango."], |
| ["Límite de seguridad","La fuente es un calendario regional histórico. No representa clima actual, diagnóstico de campo ni una prescripción agronómica."], |
| ["Puerta de decisión","Verifique en campo el estado del cultivo y las condiciones climáticas, idealmente con validación de una persona agrónoma u oficina de extensión."]]} |
| ]; |
| const stop=new Set("a al and are de del do does el en for in is la las los of para por que the to un una what within y".split(" ")); |
| const norm=s=>(s||"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().match(/[a-z0-9]+/g)?.filter(x=>x.length>1&&!stop.has(x))||[]; |
| let chosenLang="Auto"; |
| const q=document.querySelector("#question"),answer=document.querySelector("#answer"),trace=document.querySelector("#trace"),audit=document.querySelector("#audit"); |
| document.querySelectorAll(".lang").forEach(b=>b.onclick=()=>{document.querySelectorAll(".lang").forEach(x=>x.classList.remove("active"));b.classList.add("active");chosenLang=b.dataset.lang}); |
| const examples=document.querySelector("#examples");records.forEach((r,i)=>{const b=document.createElement("button");b.className="example";b.innerHTML=`<small>${r.tag} · ${r.lang}</small>${r.q}`;b.onclick=()=>{q.value=r.q;render(r)};examples.appendChild(b)}); |
| function inferLang(text){return chosenLang!=="Auto"?chosenLang:(/[¿¡]|\b(siembra|cosecha|cebada|frijol)\b/i.test(text)?"Español":"English")} |
| function match(text){const toks=new Set(norm(text));let best=null,score=-1,overlap=0;for(const r of records){const bag=new Set(norm([r.q,r.crop,r.region,r.task].join(" ")));const hit=[...toks].filter(x=>bag.has(x)).length;const s=hit+(r.lang===inferLang(text)?2:0);if(s>score){best=r;score=s;overlap=hit}}return overlap>=2?best:null} |
| function abstain(){const es=inferLang(q.value)==="Español";answer.innerHTML=es?`<h3>No hay evidencia suficiente en la vista pública</h3><p>La consulta no coincide con suficiente precisión con los escenarios verificados. No se debe inventar una respuesta agrícola.</p><h3>Evidencia necesaria</h3><p>Cultivo, ubicación, periodo, variable y fuente verificable.</p><h3>Límite</h3><p>No convierta climatología histórica en tiempo actual ni en diagnóstico de parcela.</p><h3>Siguiente paso</h3><p>Use un ejemplo, consulte el conjunto completo o confirme la decisión con extensión agrícola local.</p>`:`<h3>Insufficient evidence in the public preview</h3><p>This question does not match a bundled verified scenario closely enough. An agricultural answer should not be invented.</p><h3>Evidence needed</h3><p>Crop, location, period, variable, and a verifiable source.</p><h3>Boundary</h3><p>Do not treat historical climatology as live weather or field diagnosis.</p><h3>Next step</h3><p>Choose an example, search the complete dataset, or confirm the decision with local extension services.</p>`;trace.innerHTML=tile("Status","Abstained")+tile("Reason","No sufficiently close verified public record")+tile("Mode","Curated evidence retrieval");audit.open=true} |
| function tile(k,v){return `<div><b>${k}</b><span>${v}</span></div>`} |
| function render(r){answer.innerHTML=r.sections.map((s,i)=>`<h3>${i+1}. ${s[0]}</h3><div>${s[1]}</div>`).join("")+`<hr><p><b>Source record:</b> <a href="${r.url}" target="_blank">${r.source} ↗</a> · <code>${r.id}</code></p>`;trace.innerHTML=tile("Status","Matched verified record")+tile("Public row ID",r.id)+tile("Language",r.lang)+tile("Crop",r.crop)+tile("Region",r.region)+tile("Task",r.task)+tile("Source",`<a href="${r.url}" target="_blank">${r.source}</a>`)+tile("Evidence scope",r.scope);audit.open=true;answer.scrollIntoView({behavior:"smooth",block:"start"})} |
| function run(){const r=match(q.value);r?render(r):abstain()} |
| document.querySelector("#run").onclick=run;q.addEventListener("keydown",e=>{if((e.ctrlKey||e.metaKey)&&e.key==="Enter")run()}); |
| </script> |
| </body> |
| </html> |
|
|