-
When users first enter they can add documents to be scanned
-
After loading a summary of what was scanned is generated
-
Important contract details are labelled here. The user can click through different contracts to find the different contracts
-
Uncertainties show what CLARA is about in the contract
-
The deadlines let the users see their upcoming obligations in the upcoming 90 days
-
The calendar lets users see their contract obligations over a longer period of time
-
The limits tab shows the questions that CLARA will not answer
Inspiration
Contracts tend to be very long and overly wordy making reading and understanding them inaccessible for the layperson. We wanted to come up with a solution that would allow non legally trained people to be able to understand their obligations and liabilities based on the contracts they have entered into.
What it does
Users provide a collection of finalized agreements (regardless of format) and CLARA extracts the vital details: participants, termination dates, renewal terms, cancellation consequences, financial commitments, and exclusivity clauses. Each piece of information provides a direct reference to its source page and includes a certainty rating to distinguish between verified data and estimates. The system further generates a three-month outlook for upcoming expirations or renewals, identifies potential contractual conflicts, and drafts concise summaries for legal review when ambiguities arise.
How we built it
- Ingest — PDF/DOCX text with page offsets and per‑word boxes; Tesseract OCR for scans with no text layer.
- Extract — one cached, structured LLM call per contract. No cache hit and no key ⇒ throw, never invent.
- Verify (lib/verify.ts) — every model quote is re‑found in our extracted text: exact → normalised → fuzzy (> 0.92, costs a confidence level) → discard. A quote we can't locate destroys the field it supports.
- Confidence (lib/confidence.ts) — a pure function of what verification found, never what the model claims about itself.
- Deadlines & conflicts — no model at all: $t_{\text{act}} = t_{\text{end}} - d_{\text{notice}}$, so a renewal 74 days out with 60 days' notice is a 14‑day problem. Conflicts are set intersection over normalised territory/product codes. ## Challenges we ran into
- Silence vs. blindness — making "not found" mechanically distinct from "uncertain," with a keyword probe that survives false friends like exclusive of GST and exclusive jurisdiction.
- OCR gating — one low‑confidence word was forcing whole fields to Uncertain and flooding the tab; we reworked it to hedge only when the poor word carries the answer, or when two or more substantive words are bad.
- Uncooperative clauses — a liability cap split mid‑sentence across a page break; a notice period sitting three clauses away from the renewal term it governs.
- A demo that can't fail on stage — every model response cached to disk, zero network at runtime.
Accomplishments that we're proud of
0.0% confident error rate — 0 of 43 fields stated as fact were wrong; 96.7% field accuracy overall.
- 0 fabricated citations, by construction — all 97 citations located in source, all exact matches.
- The two fields we didn't nail cleanly are both honest hedges on a noisy scan — they'd have scored higher if we'd just asserted them, and we chose not to.
- 145 tests across verification, confidence, date maths, and scope overlap. ## What we learned For a non‑expert user, calibration beats raw accuracy: the question isn't "is it right?" but "does it know when it isn't?"
- Confidence belongs in code, derived from evidence — a model's self‑reported confidence is just a guess about itself.
- Narrowing the claim surface (contract text only — no statutes, no market norms) turns a fabricated external citation from unlikely into impossible.
What's next for Team 32 - CLARA
Retrieval — send targeted clauses instead of whole documents to scale past ~80 contracts (the limit is tokens, not latency).
- Business‑day arithmetic with a real public‑holiday calendar, so business‑day notice periods become actual dates.
- More conflict classes beyond exclusivity, plus missing‑contract detection.
- Natural‑language query over the verified, cited layer — but only once it provably can't surface an unverifiable answer.
Built With
- claude
- next.js
- ocr
- openai
- typescript
Log in or sign up for Devpost to join the conversation.