openreader/src/types/parsed-pdf.ts
Richard R 4497f610c0 feat(pdf): implement granular PDF parse progress tracking and migrate to parseState
Introduce detailed progress reporting for PDF layout parsing, exposing phase and page-level updates to clients. Replace legacy parseStatus with a structured parseState field in the database schema, updating all relevant backend and API logic. Add SSE endpoint for real-time parse progress updates. Update client hooks and UI to reflect granular progress and improve user feedback during document parsing. Includes migration scripts and new parse-state utility module.
2026-05-21 10:27:16 -06:00

87 lines
1.6 KiB
TypeScript

export type ParsedPdfBlockKind =
| 'abstract'
| 'algorithm'
| 'aside_text'
| 'chart'
| 'content'
| 'formula'
| 'doc_title'
| 'figure_title'
| 'footer'
| 'footnote'
| 'formula_number'
| 'header'
| 'image'
| 'number'
| 'paragraph_title'
| 'reference'
| 'reference_content'
| 'seal'
| 'table'
| 'text'
| 'vision_footnote';
export const PARSED_PDF_BLOCK_KINDS: ParsedPdfBlockKind[] = [
'abstract',
'algorithm',
'aside_text',
'chart',
'content',
'formula',
'doc_title',
'figure_title',
'footer',
'footnote',
'formula_number',
'header',
'image',
'number',
'paragraph_title',
'reference',
'reference_content',
'seal',
'table',
'text',
'vision_footnote',
];
export interface ParsedPdfBlockFragment {
page: number;
bbox: [number, number, number, number];
text: string;
readingOrder: number;
modelConfidence?: number;
}
export interface ParsedPdfBlock {
id: string;
kind: ParsedPdfBlockKind;
fragments: ParsedPdfBlockFragment[];
text: string;
parentSectionId?: string;
}
export interface ParsedPdfPage {
pageNumber: number;
width: number;
height: number;
blocks: ParsedPdfBlock[];
}
export interface ParsedPdfDocument {
schemaVersion: 1;
documentId: string;
parserVersion: string;
parsedAt: number;
pages: ParsedPdfPage[];
}
export type PdfParseStatus = 'pending' | 'running' | 'ready' | 'failed';
export type PdfParsePhase = 'infer' | 'merge';
export interface PdfParseProgress {
totalPages: number;
pagesParsed: number;
currentPage?: number;
phase: PdfParsePhase;
}