import { Unfold } from "@file_router/sdk"
import type { ParseResult } from "@file_router/sdk"
const router = new Unfold()
function looksWeak(result: ParseResult): boolean {
const markdown = result.outputs.markdown ?? ""
const pages = result.pageCount || 1
return markdown.length < 200 * pages
}
async function parseClaim(claimId: string, filePath: string) {
const document = await router.documents.create(filePath, {
fileName: "packet.pdf",
mimeType: "application/pdf",
idempotencyKey: `doc:${claimId}`,
})
try {
const cheapAccepted = await router.jobs.create(
{
documentId: document.id,
providers: [
{
key: "initial",
outputs: ["markdown", "pages"],
provider: "liteparse",
pageFields: ["markdown"],
providerOptions: { ocr: "auto" },
},
],
},
{ idempotencyKey: `job:${claimId}:liteparse` }
)
const initialRef = cheapAccepted.executions.find(
(item) => item.key === "initial"
)
if (!initialRef) throw new Error("Initial execution was not created.")
const cheapExec = await router.jobs.waitForExecution(
cheapAccepted,
initialRef
)
if (cheapExec.status === "complete" && cheapExec.resultAvailable) {
const cheap = await router.executions.result(cheapExec.id)
if (!looksWeak(cheap)) {
return cheap
}
}
const strongAccepted = await router.jobs.create(
{
documentId: document.id,
providers: [
{
key: "secondary",
outputs: ["markdown", "tables"],
provider: "llamaparse",
},
],
},
{ idempotencyKey: `job:${claimId}:llamaparse` }
)
const secondaryRef = strongAccepted.executions.find(
(item) => item.key === "secondary"
)
if (!secondaryRef) throw new Error("Secondary execution was not created.")
const strongExec = await router.jobs.waitForExecution(
strongAccepted,
secondaryRef
)
if (strongExec.status !== "complete" || !strongExec.resultAvailable) {
throw new Error("Strong parse did not complete.")
}
return await router.executions.result(strongExec.id)
} finally {
await router.documents.release(document.id)
}
}