SecondLook turns supplier document packages into source-grounded obligation graphs, then asks only the human questions that can change the next step.
Supplier reviews rarely live in one document. Agreements, work orders, invoices, service terms, change requests, acceptance records, and email threads can each contain only part of the answer. The difficult part is not summarizing them individually—it is working out which facts and obligations depend on which others, what is still unknown, and whether that unknown can actually change the decision in front of the reviewer.
documents → evidence → obligation graph → unresolved facts → focused questions → re-evaluation
SecondLook uses AI to discover package-specific entities, obligations, conditions, exceptions, dependencies, and proposed actions. Every admitted finding must remain tied to an exact source passage. The resulting graph is compiled into a deterministic decision layer rather than left as free-form model reasoning.
When the graph depends on a fact the documents do not establish, SecondLook does not guess. It exposes that fact as a focused question for a human reviewer. The answer is persisted, the graph is recompiled, and the affected review state is evaluated again.
The included supplier package contains nine ordinary business documents covering a master agreement, work order, service schedule, data-processing terms, a requested change, invoice, acceptance record, and related correspondence.
SecondLook:
- reads the documents as one connected case rather than nine independent summaries;
- grounds findings in exact source locations;
- discovers obligations and the conditions, exceptions, and dependencies between them;
- separates documented facts from facts the package leaves unresolved;
- asks for human input only where the answer can affect the next review step;
- recompiles and re-evaluates the review after that input; and
- records the resulting internal review action in Xano and independently reads it back to verify the stored state.
The package is synthetic demonstration material so the full workflow can be shared and reproduced safely.
The obligation pipeline is domain-neutral. The repository includes blind evaluation packets from unrelated construction and residential-lease scenarios, plus a counterfactual construction revision.
The runtime receives the schema and the documents—not fixture phrases, expected facts, expected relationships, or expected outcomes. The model proposes the graph at runtime; the admission and decision layers determine whether that graph is usable. Invalid source grounding or invalid graph structure fails closed.
SecondLook is designed for procurement operations teams handling supplier invoice and work-order exceptions. It brings the agreement, work order, invoice, and supporting correspondence into one review, then produces a cited record for a person to confirm before acting.
Once that record is trusted, the same confirmed obligations can support the next renewal, exception decision, or audit request without rebuilding the supplier history from scratch.
Nutrient DWS handles PDF intake and spatial-text extraction. Source identity and document locations are carried into SecondLook’s evidence layer so review findings remain traceable to the material they came from. The PDF-intake path has been verified with the synthetic supplier material.
Xano is the durable action and data boundary for SecondLook’s internal review state. Review actions use authenticated, allow-listed statuses and idempotent writes. After a write, SecondLook independently reads the exact record back and verifies that the persisted state matches what was submitted. The Xano-backed lane has been deployed and verified live.
This boundary records internal review decisions only. It does not autonomously execute payment, procurement, signing, or other external business actions.
Requirements: Python 3.11+, Node.js 20+, npm.
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements-open-obligation.txtStart the review service in one terminal. It needs an OpenAI-compatible model endpoint; a local Sub2API endpoint is one supported option.
export SECONDLOOK_MODEL_BASE_URL=http://127.0.0.1:18080/v1
export SECONDLOOK_MODEL_ID=gpt-5.6-sol
export SECONDLOOK_MODEL_API_KEY=your-key
.venv/bin/python -m src.open_runtime.http_apiStart the browser UI in a second terminal:
cd ui-open
npm ci
printf 'VITE_RUNTIME_BASE_URL=http://127.0.0.1:8765\n' > .env.local
npm run dev -- --host 127.0.0.1 --port 4173Open http://127.0.0.1:4173, select Vendor Package, or upload UTF-8 .txt, .md, .markdown, .json, and .csv files. PDF intake requires a configured Nutrient DWS key.
For live Xano recording, configure the Xano variables on the server. Never put credentials in VITE_* variables.
.venv/bin/python -m unittest discover -s tests -q
cd ui-open
npm ci
npm test
npm run buildSecondLook keeps the final call with a human reviewer. It records an internal review state; it does not approve payment, procurement, signing, contract changes, or field work.
SecondLook builds on established ideas in source-grounded extraction and structured decision systems. Google LangExtract informed the source-grounding approach, and NormBench SG-DT informed parts of the graph representation. SecondLook’s implementation and end-to-end obligation-review lifecycle are its own. See THIRD_PARTY_NOTICES.md for links, licenses, and attribution details.
Built for the DevNetwork [API + Cloud + AI Hackathon 2026].