Title Review AI

Messy title documents in. Cited ALTA summaries out.

Titan parses deeds, commitments, surveys and handwritten conveyances, extracts a typed schema with character-level provenance, and drafts an eight-section Title Review Summary where every line points back to its source.

8
ALTA sections
6
LLM providers · failover
char-level
Citation provenance
wayne_county_commitment.pdf
Title to the estate is vested in Margaret A. Whitfield
TitleDocument
vesting.owner"Margaret A. Whitfield"
spanp3 · 412–434
The pipeline

Five stages from raw PDF to a draft you can trust.

Every stage keeps its provenance. By the time a sentence lands in the summary, you can trace it back to a document, a page, and a character span.

Parse

pdfplumber · Docling
VLM for handwriting
cached markdown

Extract

BAML → TitleDocument
typed + provenance
heuristic fallback

Index

BM25 + BGE-M3
Qdrant hybrid
RRF + rerank

Draft

8 ALTA sections
parallel · cited
[doc:page:span]

Learn

diff operator edits
distill → rules
versioned YAML

Works offline

No API key? A deterministic regex/heuristic extractor and local models keep the whole pipeline running.

Provider failover

Cerebras · SambaNova · Groq · Gemini · GitHub Models · OpenRouter — first to respond wins, under per-provider locks.
Cited drafts

Pick a section. Trace every claim to its source.

This is a real generated summary for a sample commitment. Hover a citation to light up the exact passage it came from — provenance you can audit, not a black box.

Vesting
ALTA · Schedule A

Retrieved evidence

top-k · reranked
Learning loop

It gets better every time an operator edits a draft.

Edits aren't thrown away. Titan turns them into reusable guidance that shapes the next summary.

01

Capture the edit

A field-level diff between the draft and the operator's final version is logged to SQLite as an EditEvent.

02

Distill a rule

An LLM-as-judge pass condenses recent edits per section into a versioned YAML rule set — the patterns behind the corrections.

03

Apply it next time

Rules and the closest past edits are injected as few-shot context, so the next draft starts where the last operator left off.

Architecture

Built so a reviewer can defend every line.

Retrieval, extraction and drafting are all wired for inspectability and graceful degradation.

Hybrid retrieval, fused and reranked

BM25 sparse and BGE-M3 dense run in parallel, fused with Reciprocal Rank Fusion, then reranked by bge-reranker-v2-m3 down to the top-5. Each chunk carries its {doc_id, page, char_span} so citations stay inspectable.

Typed extraction

BAML produces a typed TitleDocument with character-level provenance — never free-text guesses.

Degrades gracefully

A heuristic extractor and local models run underneath, so a missing API key never stops a review.

Parallel section fan-out

All eight ALTA sections generate concurrently under per-provider locks. The section list lives in one file — a ninth is a single edit.

Closes the loop

Operator edits become diffs, few-shot examples and distilled rules that steer the next draft.

PythonBAMLQdrantBGE-M3BM25 + RRFbge-reranker-v2-m3pdfplumberDoclingQwen2.5-VLSQLiteStreamlit
Engineering notes

The decisions that matter.

What it does

Cited title review, end to end

Hand it a PDF — commitment, deed, mortgage, lis pendens, survey, tax certificate. It parses, extracts a typed schema, retrieves the relevant passages, and drafts an eight-section ALTA summary with inline citations an operator can edit and regenerate.

Why provenance

Every claim is traceable

Chunks carry doc id, page and character span from ingestion through retrieval to the final sentence. A reviewer can click any citation and land on the exact source text — the difference between a tool you can sign off on and one you can't.

What I learned

Reliability beats cleverness

Multi-provider failover, per-page parse timeouts, heuristic fallbacks and offline models matter more than any single model choice. A pipeline that always returns something useful is worth more than one that's occasionally brilliant and often down.

What I'd improve

Tighter human-in-the-loop

Surface rule changes for operator approval, add confidence bands per section, expand the handwriting VLM path beyond fixtures, and benchmark retrieval recall against a labeled span set in the eval harness.