Introduce per-page progress events for PDF parsing by adding onPageStarted hooks throughout the compute worker and core PDF pipeline. Add compute/worker/src/pdf-progress.ts to encapsulate progress event builders. Update server logic to emit page start and page parsed events, improving client feedback during long-running PDF jobs. Add src/lib/server/compute/abort-like-error.ts and integrate isAbortLikeError to robustly detect and suppress expected aborts in API event streaming. Update API route to ignore abort-like errors on worker proxy crash. Add unit tests for abort-like error detection and PDF progress event generation. Refactor PDF parse logic to allow empty merged regions without throwing, ensuring downstream flows remain resilient to edge cases. These changes improve observability, error handling, and reliability for document parsing and event streaming.
45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { ensureWhisperModel } from './whisper/model';
|
|
import { alignAudioWithText } from './whisper/align';
|
|
import { ensureModel as ensurePdfLayoutModel } from './pdf/model';
|
|
import { parsePdf } from './pdf/parse';
|
|
|
|
export async function ensureComputeModels(): Promise<void> {
|
|
await Promise.all([ensureWhisperModel(), ensurePdfLayoutModel()]);
|
|
}
|
|
|
|
export async function runWhisperAlignmentFromAudioBuffer(input: {
|
|
audioBuffer: ArrayBuffer;
|
|
text: string;
|
|
cacheKey?: string;
|
|
lang?: string;
|
|
}) {
|
|
const alignments = await alignAudioWithText(
|
|
input.audioBuffer,
|
|
input.text,
|
|
input.cacheKey,
|
|
{ lang: input.lang },
|
|
);
|
|
return { alignments };
|
|
}
|
|
|
|
export async function runPdfLayoutFromPdfBuffer(input: {
|
|
documentId: string;
|
|
pdfBytes: ArrayBuffer;
|
|
onPageStarted?: (input: {
|
|
pageNumber: number;
|
|
totalPages: number;
|
|
}) => void | Promise<void>;
|
|
onPageParsed?: (input: {
|
|
pageNumber: number;
|
|
totalPages: number;
|
|
pageMs: number;
|
|
}) => void | Promise<void>;
|
|
}) {
|
|
const parsed = await parsePdf({
|
|
documentId: input.documentId,
|
|
pdfBytes: input.pdfBytes,
|
|
onPageStarted: input.onPageStarted,
|
|
onPageParsed: input.onPageParsed,
|
|
});
|
|
return { parsed };
|
|
}
|