Exact Web Answer Agent - ROCm value extraction
an agent that reads a natural-language request, navigates the given website (or a saved copy) and returns the one specific value asked for, with the page it came from. Not a summary, not a list of links.
How it works. Each question runs as a fresh python3 /app/app.py process. A well-formed placeholder answer is written before any network access, so a crash still leaves parseable JSON. The agent fetches the start page (7 s timeouts), reduces HTML to readable text - spec tables kept as rows, menus and footnotes dropped - ranks passages with BM25 plus query coverage, and only then follows same-site links whose anchor text matches the request (max 8 pages, one hop, only when the start page held no answer).
The answer comes from a type-aware extractor: price, percent, date, version, part code, e-mail, phone, number, name. The type is inferred from the question and respected strictly - a price question never returns a wattage; when no candidate of the expected type exists the answer is empty instead of a guess. Measurements keep their unit (192 + GB -> 192 GB), values lifted from the question are rejected, and a typed answer must clear a confidence floor. Output: /app/output/<query-id>_output.json with answer, citations, confidence, source_url.
The Match 4 harness was not published, so the image follows the earlier Matches' container contract: mandated ROCm PyTorch base, code at /app/app.py, deps in /app/requirements.txt, no weights, no download at start-up, container alive throughout evaluation. The script accepts several argument spellings (--query/--question, --query-id/--id, --url, --corpus) plus positionals.
Measured locally: 6-7 s per question over a page plus up to eight same-site pages; 0.3 s on a document corpus. Honest limits: extraction is lexical - no multi-hop reasoning; JavaScript pages are read as served HTML. Next iteration adds a resident small instruct model on the GPU to pick among candidate spans, with the deterministic pass as fallback.