{
  "core_product_base": "https://github.com/Unstructured-IO/core-product/pull",
  "unstructured_base": "https://github.com/Unstructured-IO/unstructured/pull",
  "inference_base": "https://github.com/Unstructured-IO/unstructured-inference/pull",
  "od_models_base": "https://github.com/Unstructured-IO/unstructured-od-models/pull",
  "github_workflows_base": "https://github.com/Unstructured-IO/github-workflows/pull",
  "mem_before": {
    "pre_partition_mb": 3597,
    "post_partition_mb": 4651,
    "partition_delta_mb": 1078,
    "rss_per_req_mb": 24,
    "k8s_gb": 32
  },
  "mem_after": {
    "pre_partition_mb": 1559,
    "post_partition_mb": 2227,
    "partition_delta_mb": 685,
    "rss_per_req_mb": 17,
    "k8s_gb": 4
  },
  "bench_before": {
    "post_import_mib": 1189,
    "first_partition_delta_mib": 949,
    "peak_gb": 1.660,
    "total_gb": 16.398,
    "allocs": 5585979,
    "wall_s": 76.0
  },
  "bench_after": {
    "post_import_mib": 952,
    "first_partition_delta_mib": 707,
    "peak_gb": 1.473,
    "total_gb": 20.239,
    "allocs": 6210809,
    "wall_s": 86.0
  },
  "latency_before_s": 50.80,
  "latency_after_s": 44.27,
  "latency_opts": [
    ["CPU-aware serial OCR", 0, 0, 5.9, "#1502"],
    ["Pdfium PNG -> BMP render", 89, 890, 9.2, "#1503"],
    ["Pass file path to tesseract (parallel)", 136, 1360, 7.7, "#1505"],
    ["Pass file path to tesseract (serial)", 53, 530, 1.8, "#1506"],
    ["BMP temp files for pytesseract", 27, 270, 6.4, "#1509"]
  ],
  "latency_standalone": [
    ["#1502 — CPU-aware serial OCR", "neutral", "-5.9%", "-6.3%"],
    ["#1503 — BMP render format", "-7.3%", "-14.6%", "-13.3%"],
    ["#1505 — Tesseract path passthrough", "-32.6%", "-7.7%", "-7.4%"]
  ],
  "ci_before": {
    "jobs_spawned": 301,
    "jobs_ran": 193,
    "billed_min": 205,
    "wall": "3m 49s",
    "cost": 1.64
  },
  "ci_after": {
    "jobs_spawned": 33,
    "jobs_ran": 31,
    "billed_min": 31,
    "wall": "1m 05s",
    "cost": 0.25
  },
  "merged_prs": [
    [1398, "2026-03-27", "Fix: avoid blocking event loop during gzip decompression", "Reliability", "core-product"],
    [1399, "2026-04-03", "Fix: avoid blocking event loop during PDF validation", "Reliability", "core-product"],
    [1400, "2026-03-30", "Fix: avoid blocking event loop during CSV response merging", "Reliability", "core-product"],
    [1441, "2026-04-03", "mem: resize-first preprocessing", "Memory", "core-product"],
    [1448, "2026-03-24", "mem: free page image before table OCR", "Memory", "core-product"],
    [1464, "2026-03-27", "refactor: replace lazyproperty with cached_property", "Code quality", "core-product"],
    [1481, "2026-04-03", "perf: reduce attribute lookups in hot path", "Latency", "core-product"],
    [1502, "2026-04-14", "perf: CPU-aware serial OCR (sched_getaffinity)", "Memory", "core-product"],
    [1506, "2026-04-13", "perf: pass file path directly to tesseract (serial)", "Latency", "core-product"],
    [1507, "2026-04-14", "perf: use jemalloc to reduce fragmentation", "Memory", "core-product"],
    [360, "2026-04-10", "Add uv workspace support via optional package input", "CI/CD", "github-workflows"],
    [361, "2026-04-11", "Skip pip.conf in uv workspace mode", "CI/CD", "github-workflows"],
    [4266, "2026-02-27", "fix: avoid O(N²) re-scanning in _patch_current_chars_with_render_mode", "Latency", "unstructured"],
    [4282, "2026-03-27", "Replace lazyproperty with functools.cached_property", "Code quality", "unstructured"],
    [4295, "2026-03-27", "mem: reduce PaddleOCR rec_batch_num from 6 to 1", "Memory", "unstructured"],
    [4296, "2026-03-31", "mem: exclude unused spaCy pipeline components to reduce model memory", "Memory", "unstructured"],
    [4314, "2026-04-03", "perf: speed up standardize_quotes with str.translate()", "Latency", "unstructured"],
    [497, "2026-03-30", "mem: use np.full() instead of np.ones() * scalar in YoloX preprocess", "Memory", "unstructured-inference"],
    [498, "2026-03-31", "perf: lazy page rendering in convert_pdf_to_image", "Memory", "unstructured-inference"],
    [496, "2026-04-03", "mem: free intermediate arrays during YoloX inference", "Memory", "unstructured-inference"],
    [501, "2026-04-03", "refactor: make dpi explicit on convert_pdf_to_image for dedup", "Code quality", "unstructured-inference"],
    [18, "2026-03-27", "mem: replace HF RTDetrImageProcessor with torchvision transforms", "Memory", "unstructured-od-models"],
    [19, "2026-03-27", "mem: read ONNX metadata from session instead of loading full protobuf", "Memory", "unstructured-od-models"],
    [21, "2026-03-27", "perf: skip numpy→torch→numpy round-trip in YOLOX postprocessing", "Latency", "unstructured-od-models"]
  ],
  "open_prs": [
    [1503, "Render PDF pages as BMP instead of PNG", "Latency", "core-product"],
    [1505, "Pass image file path directly to tesseract OCR (parallel)", "Latency", "core-product"],
    [1509, "Use BMP instead of PNG for pytesseract temp files", "Latency", "core-product"],
    [495, "mem: disable ONNX mem_pattern and cpu_mem_arena on inference sessions", "Memory", "unstructured-inference"],
    [20, "refactor: remove unnecessary numpy→torch conversions in ONNX predict path", "Code quality", "unstructured-od-models"],
    [667, "POC: uv workspace for platform-libs (28 packages)", "CI/CD", "platform-libs"],
    [669, "CI baseline measurement (do not merge)", "CI/CD", "platform-libs"]
  ]
}
