Ask a frontier model about Brazilian tilapia exports, regional sugarcane productivity, or the latest crop-insurance statistics by municipality and it will answer. The answer is a plausible paragraph with a good chance of a wrong number.
- Client
- Turing product line - offered to mill groups and to an agriscience company as a custom agent over internal documents
- Industry
- Agriculture · Sugar & ethanol · Seed and crop protection
- Problem
- General-purpose models answer agricultural questions fluently and often wrongly; nobody's internal reports are in their training data
- Solution
- A domain model and knowledge base: a crawler over the Brazilian agro web and document corpus, a fine-tuned open model with DPO refinement measured by semantic entropy, vLLM serving on a single GPU, long-document summarization, an orchestrated data pipeline, and a fine-tuning path that turns a client's internal documents into a private agent
- Stack
- Custom crawler (GitHub Actions checks, graceful stop, multi-format downloads) · S3 bronze/silver/gold layers · Prefect orchestration + experiment tracking · fine-tuning on ~450k examples · DPO · semantic entropy evaluation · Phi-4 base for summarization · vLLM on NVIDIA L40S · Kubernetes · Argo CD deployment
- Live at
- app.turing.com.br (demo by registration)
Ask a frontier model about Brazilian tilapia exports, regional sugarcane productivity, or the latest crop-insurance statistics by municipality and it will answer. The answer is a plausible paragraph with a good chance of a wrong number. The gap is not intelligence; it is that the documents holding those numbers are scattered across CONAB bulletins, Embrapa reports, sector PDFs and trade press, and were never assembled into anything a model could be grounded on.
The second gap is inside the client. An agriscience company's most valuable knowledge is in its internal reports, and no public model has seen those.

- A knowledge base of Brazilian agricultural documents, kept current
- A model that hallucinates less than GPT-4 on that domain
- Report generation and summarization of long documents
- A way to fine-tune the same model on a client's internal documents, privately
- Serving that holds under concurrent users on affordable hardware
- Corpus: ~10,000 pages of current sector reports, ~60,000 pages of technical content, ~1,000,000 web pages (achieved: 254 reports / 9,755 pages; 272 books / 58,531 pages; 567,691 web pages + 22,741 web PDFs / 403,715 pages; 1,039,692 pages total)
- Fewer hallucinations than GPT-4 on domain questions, verified on held-out Q&A
- 10+ concurrent users on a single GPU with stable latency
- Summarize a 150-page report in minutes
- 01
The corpus
A crawler walks a curated list of base domains (base_urls.json), downloads PDFs and, after a fix, every other useful format (csv, doc/docx, epub, ods, ppt/pptx, rtf, tsv, txt, xls/xlsx). Broken domains fail an automatic check integrated with GitHub Actions and runnable locally with make check. Visited pages are saved each round, and the crawler stops gracefully so no file is left corrupted. Cleaning rules: drop files that are mostly XML/HTML tags rather than stripping tags, drop files under 256 tokens, and cap downloads (spreadsheets of 1 GB+ were found in the wild). The corpus covers productivity by region, financial assessments and projections, government plans, crop-loss statistics by locality, and commodity prices, among other topics.
- 02
The pipeline
Runs are orchestrated with Prefect and tracked as experiments. Three jobs: crawl to a bronze S3 bucket per run (crawler/runs/run_YYYYMMDD_HHMMSS), clean to silver, and rebuild the knowledge-base index to gold, merging the crawl with the books-and-papers and reports buckets. Crawler metadata is stored at indexing time to refine search and, later, cite sources.

Fig. 02. Orchestration and experiment tracking. Every crawl, clean and index is a run with a timestamp and an S3 path. - 03
Fewer wrong numbers than GPT-4
Domain questions with known answers were put to the fine-tuned model and to GPT-4. The Turing model returned the right figures more often, with less confident filler.

Fig. 03. Side by side with GPT-4, page one. Highlighted text is the part of the answer that matches the reference. 
Fig. 04. Page two. Example from the set: asked how much Brazilian tilapia exports grew since 2012, the model answers 3,537 t (11 t in 2012 to 3,548 t in 2024) and adds the 2023–2024 acceleration, matching the reference. - 04
Fine-tuning and how it was measured
The latest fine-tuning run used ~450,000 training examples: articles, books and web pages. Semantic entropy of model answers was the metric: lower means more consistent answers to rephrased questions. Version - Mean semantic entropy; Base model - 1.86; DPO I (demo version) - 1.58; Epoch 1 - 1.38; Epoch 2 - 1.41; Epoch 3 - 1.38; DPO II (instruction-tuned from epoch 3) - 1.41 Two findings were recorded rather than hidden: from the second epoch the model began reproducing training-data noise at the end of long texts (the same behavior seen in the 200k-example run), and DPO II underperformed because its preference data was stale. The fix is a refreshed, larger preference dataset for the next refinement.

Fig. 05. Semantic entropy distributions. Fine-tuning shifts the mass left; the second DPO pass did not, because it reused the old preference dataset. - 05
Serving
Inference runs on vLLM. On a single NVIDIA L40S it supports more than 10 simultaneous users with stable latency; request scheduling absorbs bursts as a controlled latency increase rather than out-of-memory failures. Load tests were added, and multi-instance tests on Kubernetes were next. The demo ran on a g6e.2xlarge because of the memory the indexed corpus requires.
- 06
Long documents
The summarization base (Phi-4) has a 16K-token window. Long files are split into n chunks, each summarized, and a final summary is generated from the concatenated chunk summaries. Information loss grows with document size and is declared; a 150-page report summarizes in a little over two minutes.

Fig. 06. Divide and conquer for documents longer than the context window. 
Fig. 07. Known limitations of the demo, tracked in the open: web search captures page summaries rather than full content; some answers may be wrong; report bugs here. - 07
A private agent on a client's documents
The same model is the base for a client-specific agent. The agro-tuned Turing LLM is fine-tuned again on the client's internal documents, producing an agent that knows both the sector and the company. This is the configuration proposed to an agriscience R&D team for its internal report archive.

Fig. 08. Agro corpus in, Turing LLM out; internal documents in, custom agent out. The client's data never joins the public corpus. - 08
Deployment
Deployment pipelines are fully automated with Argo CD; a merged change ships itself.

Fig. 09. Argo CD operational: every service synced from Git. 
Fig. 10. The cluster behind the app.




