Dossier V1 · Chorus AI Systems

Multi-model document
intelligence, grounded in fact.

Dossier is a closed-loop pipeline that extracts atomic facts from a PDF, generates three independent summaries across different model architectures, then verifies every summary against a locked fact list before producing a traceable analytical report.

7
Pipeline stages
3x
Independent summaries
0.0
Default contradiction tolerance
100%
Outputs trace to source facts

What is Dossier?

Dossier by Chorus AI Systems is not a chatbot, an agent, or a general-purpose LLM wrapper. It is a deterministic document intelligence pipeline with strict contracts between stages — designed to produce analytical reports that are grounded, verifiable, and fully auditable.

The problem

LLMs hallucinate. Single-model outputs are unverified.

A single frontier model summarizing a complex document will confidently assert things that are not in the source text. There is no internal check, no cross-validation, no audit trail.

The solution

Three summaries. One locked fact list. A closed verification loop.

Dossier extracts atomic facts first, then generates summaries independently across multiple model families. Each summary is verified against the locked fact list — any contradiction fails the summary and triggers a targeted regeneration.

The output

A structured report with a full audit trail.

The final dossier includes an executive overview, key claims with fact IDs, a compiled synthesis, external context, risks and limitations, and a complete audit trail. Every claim traces back to a source span.

Design philosophy

CIA intelligence brief meets New Yorker book review.

Grounded facts. Traceable claims. Explicitly labeled uncertainty. No speculation dressed up as analysis. When confidence cannot be achieved, Dossier halts visibly — never silently.

Hard guarantee: The FactList is locked after the extraction stage. No downstream stage can modify it. Summaries and analysis must conform to the facts — not the other way around.

Seven non-negotiable design rules.

These rules govern every implementation decision in Dossier. They are hard constraints, not guidelines — a stage that violates them is wrong by definition.

Rule 01
Determinism

Same input plus same config equals the same output, every time. Temperature is zero across all models. No random seeds, no non-deterministic branches.

Rule 02
Grounding First

No summary, analysis, or narrative exists without being grounded in extracted facts. External context is permitted in exactly one designated, labeled section.

Rule 03
Fail-Closed

Any broken stage gate halts the entire run. There is no silent degradation. A partial dossier is not a dossier.

Rule 04
Traceability

Every output traces back to source spans in the original document. Every key claim cites a Fact ID from the locked FactList.

Rule 05
Separation of Concerns

Facts, summaries, external context, and opinion are never mixed. Each lives in an explicitly typed artifact that cannot be mutated after creation.

Rule 06
Auditability

Every decision is inspectable after the fact. The audit trail records model participation, contradiction scores, coverage scores, and which summaries contributed to each compiled section.

Rule 07
No Agent Autonomy

No background retries beyond configured limits, no self-directing behavior, no tool-calling loops. Dossier V1 is a pipeline, not an agent.

The seven-stage pipeline.

Each stage consumes explicit input artifacts, produces explicit output artifacts, and either succeeds or fails — nothing in between. State regression is not permitted.

01
INGESTED
Ingestion

Extracts raw text from the PDF, normalizes formatting, segments into pages and paragraphs, indexes all positions, and hashes the source file for immutability.

Input PDF file
Output IngestionRecord
Hard rule Image-only PDFs are rejected immediately. No partial processing.
↓
02
EXTRACTED
Extraction (Fact Finder)

A lightweight extractive model pulls atomic, document-grounded facts from the text. No paraphrasing, no interpretation, no synthesis. Every fact references a source page and paragraph.

Input IngestionRecord
Output FactList
Model role Model 4 — lightweight, extractive-only
Hard rule FactList is locked after this stage. No downstream stage may modify it.
↓
03
SUMMARIZED
Summarization

Three independent models from different vendors and architectures each summarize the document without seeing each other's output. Architectural diversity reduces correlated failure modes.

Input IngestionRecord
Output Summary_A, Summary_B, Summary_C
Model role Models 1, 2, 3 — different vendors and architectures
↓
04
VERIFIED
Verification

Each summary is scored against every fact in the FactList. The primary metric is the contradiction score. Failed summaries are regenerated in isolation; the FactList never changes.

Input FactList + [Summary_A, Summary_B, Summary_C]
Output VerificationReport
Model role Model 5 — higher-quality verifier
Hard rule Fewer than 2 summaries passing after max retries halts the run.
↓
05
CONTEXTUALIZED
Contextual Analysis

Two contextualizer models enrich the verified summaries with historical, disciplinary, methodological, and comparative context. All external claims must be explicitly cited.

Input Verified summaries
Output ContextualAnalysis_A, ContextualAnalysis_B
Model role Models 6, 7 — contextualizer models
Hard rule Non-fatal: failure is noted and the run continues to compilation.
↓
06
COMPILED
Compilation

Verified summaries are synthesized into a single compiled output. Overlapping claims are emphasized; unsupported or outlier assertions are discarded. Section lineage is recorded for the audit trail.

Input Verified summaries + ContextualAnalysis artifacts
Output CompiledSummary
Model role Model 5 (reused)
↓
07
FINALIZED
Finalization

Assembles the complete dossier: executive overview, key claims with fact IDs, compiled summary, contextual analysis, risks and limitations, and a full audit trail. Exported as structured JSON and a typeset PDF.

Input CompiledSummary + all upstream artifacts
Output FinalDossier (JSON + PDF)
Hard rule All omissions and degraded sections must be explicitly labeled in the output.

The closed-loop verification core.

Stage 4 is the hallucination gate — and the reason Dossier generates three summaries instead of one. A summary that contradicts any extracted fact fails, regardless of how plausible it sounds.

Closed-Loop Verification Flow
FactList
locked after Stage 2
→
Summary A/B/C
3 independent models
→
Verifier
Model 5
→
Score each fact
aligned / absent / contradicted
→
Pass / Retry
per summary
↺ retry loop — failed summaries only, FactList never changes
PASS

At least 2 summaries have a contradiction score at or below the threshold (default: 0.0). Run proceeds to Stage 5.

RETRY

Fewer than 2 summaries pass. Failed summaries are regenerated and re-verified. The FactList is unchanged.

HALT

Max retries reached without 2 summaries passing. The run halts, a diagnostic artifact is written, and all upstream outputs are preserved.

Primary metric: contradiction_score = contradicted_facts / total_facts. Coverage — how many facts a summary actually mentions — is recorded as a secondary metric for the audit trail. A concise summary that omits facts but contradicts none is acceptable. Only contradictions are disqualifying.

Architecture and artifact contracts.

Every stage passes typed JSON artifacts. No free-form text passes between stages. Artifacts are written to disk immediately on creation and are never mutated afterward.

Model Assignment Map

Role Slot Default model Purpose
Summarizer A Model 1 claude-haiku-4-5-20251001 Fast, cost-efficient summarization
Summarizer B Model 2 Qwen/Qwen2.5-72B-Instruct Different vendor and architecture
Summarizer C Model 3 meta-llama/Llama-3.3-70B-Instruct-Turbo Third independent summary
Fact Finder Model 4 claude-haiku-4-5-20251001 Extractive only — no synthesis
Compiler/Verifier Model 5 deepseek-ai/DeepSeek-V3 Higher quality — verification and compilation
Contextualizer A Model 6 Qwen/Qwen2.5-72B-Instruct External context with citations

Artifact Contracts

IngestionRecord
Produced by Stage 1
Consumed by Stages 2, 3
FactList
Produced by Stage 2
Consumed by Stages 4, 6, 7
Summary_[A/B/C]
Produced by Stage 3
Consumed by Stage 4
VerificationReport
Produced by Stage 4
Consumed by Stages 5, 6
ContextualAnalysis_[A/B]
Produced by Stage 5
Consumed by Stage 6
CompiledSummary
Produced by Stage 6
Consumed by Stage 7
FinalDossier
Produced by Stage 7
Consumed by Export
AuditTrail
Produced by All stages
Consumed by Stage 7 + export

Run Folder Layout

runs/
  └── dossier_run_YYYYMMDD_HHMMSS_<hash>/
      ├── 00_input/  ← original PDF, unchanged
      ├── 01_ingestion/  ← IngestionRecord.json
      ├── 02_extraction/  ← FactList.json
      ├── 03_summarization/  ← Summary_A.json, _B.json, _C.json
      ├── 04_verification/  ← VerificationReport.json
      ├── 05_contextual/  ← ContextualAnalysis_A.json, _B.json
      ├── 06_compilation/  ← CompiledSummary.json
      ├── 07_final/  ← FinalDossier.json + .pdf
      └── audit/  ← AuditTrail.json, run_manifest.json

Built with.

Practical choices made for correctness and clarity — not to chase novelty. Every dependency earns its place.

Language
Python 3.x
Clear, portable, with a strong ecosystem for document processing and ML work.
PDF parsing
pdfplumber
Machine-readable PDFs only. Image-only PDFs are explicitly rejected at ingestion.
Data layer
Pydantic
All artifacts are typed Pydantic models. No raw dicts pass between stages.
LLM — primary
Anthropic API
Claude Haiku for extraction and summarization. Claude Sonnet for verification.
LLM — open
Together AI
Llama, Qwen, DeepSeek — architectural diversity for independent multi-model verification.
Config
JSON config
All model assignments, thresholds, and retry limits live in configs/v1.json.
Output
ReportLab
Typeset PDF export with an editorial monochrome dossier layout.
UI
Streamlit
Lightweight local web UI for running the pipeline and inspecting artifacts.