Bläddra i källkod

!13 Update version.py with new version
Merge pull request !13 from zhch158/master

zhch158 3 månader sedan
förälder
incheckning
b9031b0e0f

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
README.md


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
README_zh-CN.md


+ 7 - 2
docker/china/Dockerfile

@@ -1,7 +1,12 @@
+# Use DaoCloud mirrored sglang image for China region
+FROM docker.m.daocloud.io/lmsysorg/sglang:v0.4.9.post6-cu126
+# For blackwell GPU, use the following line instead:
+# FROM docker.m.daocloud.io/lmsysorg/sglang:v0.4.9.post6-cu128-b200
+
 # Use the official sglang image
-FROM lmsysorg/sglang:v0.4.9.post4-cu126
+# FROM lmsysorg/sglang:v0.4.9.post6-cu126
 # For blackwell GPU, use the following line instead:
-# FROM lmsysorg/sglang:v0.4.9.post4-cu128-b200
+# FROM lmsysorg/sglang:v0.4.9.post6-cu128-b200
 
 # Install libgl for opencv support & Noto fonts for Chinese characters
 RUN apt-get update && \

+ 2 - 2
docker/global/Dockerfile

@@ -1,7 +1,7 @@
 # Use the official sglang image
-FROM lmsysorg/sglang:v0.4.9.post4-cu126
+FROM lmsysorg/sglang:v0.4.9.post6-cu126
 # For blackwell GPU, use the following line instead:
-# FROM lmsysorg/sglang:v0.4.9.post4-cu128-b200
+# FROM lmsysorg/sglang:v0.4.9.post6-cu128-b200
 
 # Install libgl for opencv support & Noto fonts for Chinese characters
 RUN apt-get update && \

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
docs/en/index.md


+ 2 - 2
docs/en/quick_start/docker_deployment.md

@@ -10,8 +10,8 @@ docker build -t mineru-sglang:latest -f Dockerfile .
 ```
 
 > [!TIP]
-> The [Dockerfile](https://github.com/opendatalab/MinerU/blob/master/docker/global/Dockerfile) uses `lmsysorg/sglang:v0.4.9.post4-cu126` as the base image by default, supporting Turing/Ampere/Ada Lovelace/Hopper platforms.
-> If you are using the newer `Blackwell` platform, please modify the base image to `lmsysorg/sglang:v0.4.9.post4-cu128-b200` before executing the build operation.
+> The [Dockerfile](https://github.com/opendatalab/MinerU/blob/master/docker/global/Dockerfile) uses `lmsysorg/sglang:v0.4.9.post6-cu126` as the base image by default, supporting Turing/Ampere/Ada Lovelace/Hopper platforms.
+> If you are using the newer `Blackwell` platform, please modify the base image to `lmsysorg/sglang:v0.4.9.post6-cu128-b200` before executing the build operation.
 
 ## Docker Description
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
docs/zh/index.md


+ 2 - 2
docs/zh/quick_start/docker_deployment.md

@@ -10,8 +10,8 @@ docker build -t mineru-sglang:latest -f Dockerfile .
 ```
 
 > [!TIP]
-> [Dockerfile](https://github.com/opendatalab/MinerU/blob/master/docker/china/Dockerfile)默认使用`lmsysorg/sglang:v0.4.9.post4-cu126`作为基础镜像,支持Turing/Ampere/Ada Lovelace/Hopper平台,
-> 如您使用较新的`Blackwell`平台,请将基础镜像修改为`lmsysorg/sglang:v0.4.9.post4-cu128-b200` 再执行build操作。
+> [Dockerfile](https://github.com/opendatalab/MinerU/blob/master/docker/china/Dockerfile)默认使用`lmsysorg/sglang:v0.4.9.post6-cu126`作为基础镜像,支持Turing/Ampere/Ada Lovelace/Hopper平台,
+> 如您使用较新的`Blackwell`平台,请将基础镜像修改为`lmsysorg/sglang:v0.4.9.post6-cu128-b200` 再执行build操作。
 
 ## Docker说明
 

+ 28 - 19
mineru/backend/pipeline/model_json_to_middle_json.py

@@ -55,25 +55,34 @@ def page_model_info_to_page_info(page_model_info, image_dict, page, image_writer
     """某些图可能是文本块,通过简单的规则判断一下"""
     if len(maybe_text_image_blocks) > 0:
         for block in maybe_text_image_blocks:
-            span_in_block_list = []
-            for span in spans:
-                if span['type'] == 'text' and calculate_overlap_area_in_bbox1_area_ratio(span['bbox'], block['bbox']) > 0.7:
-                    span_in_block_list.append(span)
-            if len(span_in_block_list) > 0:
-                # span_in_block_list中所有bbox的面积之和
-                spans_area = sum((span['bbox'][2] - span['bbox'][0]) * (span['bbox'][3] - span['bbox'][1]) for span in span_in_block_list)
-                # 求ocr_res_area和res的面积的比值
-                block_area = (block['bbox'][2] - block['bbox'][0]) * (block['bbox'][3] - block['bbox'][1])
-                if block_area > 0:
-                    ratio = spans_area / block_area
-                    if ratio > 0.25 and ocr_enable:
-                        # 移除block的group_id
-                        block.pop('group_id', None)
-                        # 符合文本图的条件就把块加入到文本块列表中
-                        text_blocks.append(block)
-                    else:
-                        # 如果不符合文本图的条件,就把块加回到图片块列表中
-                        img_body_blocks.append(block)
+            should_add_to_text_blocks = False
+
+            if ocr_enable:
+                # 找到与当前block重叠的text spans
+                span_in_block_list = [
+                    span for span in spans
+                    if span['type'] == 'text' and
+                       calculate_overlap_area_in_bbox1_area_ratio(span['bbox'], block['bbox']) > 0.7
+                ]
+
+                if len(span_in_block_list) > 0:
+                    # 计算spans总面积
+                    spans_area = sum(
+                        (span['bbox'][2] - span['bbox'][0]) * (span['bbox'][3] - span['bbox'][1])
+                        for span in span_in_block_list
+                    )
+
+                    # 计算block面积
+                    block_area = (block['bbox'][2] - block['bbox'][0]) * (block['bbox'][3] - block['bbox'][1])
+
+                    # 判断是否符合文本图条件
+                    if block_area > 0 and spans_area / block_area > 0.25:
+                        should_add_to_text_blocks = True
+
+            # 根据条件决定添加到哪个列表
+            if should_add_to_text_blocks:
+                block.pop('group_id', None)  # 移除group_id
+                text_blocks.append(block)
             else:
                 img_body_blocks.append(block)
 

+ 9 - 1
mineru/backend/pipeline/pipeline_analyze.py

@@ -190,7 +190,15 @@ def batch_image_analyze(
             batch_ratio = 1
             logger.info(f'Could not determine GPU memory, using default batch_ratio: {batch_ratio}')
 
-    batch_model = BatchAnalyze(model_manager, batch_ratio, formula_enable, table_enable)
+    # 检测torch的版本号
+    import torch
+    from packaging import version
+    if version.parse(torch.__version__) >= version.parse("2.8.0") or str(device).startswith('mps'):
+        enable_ocr_det_batch = False
+    else:
+        enable_ocr_det_batch = True
+
+    batch_model = BatchAnalyze(model_manager, batch_ratio, formula_enable, table_enable, enable_ocr_det_batch)
     results = batch_model(images_with_extra_info)
 
     clean_memory(get_device())

+ 1 - 0
mineru/model/mfr/unimernet/unimernet_hf/unimer_mbart/modeling_unimer_mbart.py

@@ -2191,6 +2191,7 @@ class UnimerMBartForCausalLM(UnimerMBartPreTrainedModel, GenerationMixin):
         output_hidden_states: Optional[bool] = None,
         return_dict: Optional[bool] = None,
         count_gt: Optional[torch.LongTensor] = None,
+        **kwargs,
     ) -> Union[Tuple, CausalLMOutputWithCrossAttentions]:
         r"""
         Args:

+ 2 - 2
mineru/model/vlm_sglang_model/image_processor.py

@@ -56,8 +56,8 @@ def process_anyres_image(image, processor, grid_pinpoints):
 
 
 class Mineru2ImageProcessor(BaseProcessor):
-    def __init__(self, hf_config, server_args, _processor):
-        super().__init__(hf_config, server_args, _processor)
+    def __init__(self, hf_config, server_args, _processor, *args, **kwargs):
+        super().__init__(hf_config, server_args, _processor, *args, **kwargs)
 
     @staticmethod
     def _process_single_image_task(

+ 94 - 9
mineru/utils/model_utils.py

@@ -131,15 +131,10 @@ def merge_high_iou_tables(table_res_list, layout_res, table_indices, iou_thresho
 
                     # Create merged table
                     merged_table = table_res_list[i].copy()
-                    merged_table['poly'][0] = union_xmin
-                    merged_table['poly'][1] = union_ymin
-                    merged_table['poly'][2] = union_xmax
-                    merged_table['poly'][3] = union_ymin
-                    merged_table['poly'][4] = union_xmax
-                    merged_table['poly'][5] = union_ymax
-                    merged_table['poly'][6] = union_xmin
-                    merged_table['poly'][7] = union_ymax
-
+                    merged_table['poly'] = [
+                        union_xmin, union_ymin, union_xmax, union_ymin,
+                        union_xmax, union_ymax, union_xmin, union_ymax
+                    ]
                     # Update layout_res
                     to_remove = [table_indices[j], table_indices[i]]
                     for idx in sorted(to_remove, reverse=True):
@@ -253,6 +248,83 @@ def remove_overlaps_min_blocks(res_list):
     return res_list, need_remove
 
 
+def remove_overlaps_low_confidence_blocks(combined_res_list, overlap_threshold=0.8):
+    """
+    Remove low-confidence blocks that overlap with other blocks.
+
+    This function identifies and removes blocks with low confidence scores that overlap
+    with other blocks. It calculates the coordinates and area of each block, and checks
+    for overlaps based on a specified threshold. Blocks that meet the criteria for removal
+    are returned in a list.
+
+    Parameters:
+        combined_res_list (list): A list of blocks, where each block is a dictionary containing
+            keys like 'poly' (polygon coordinates) and optionally 'score' (confidence score).
+        overlap_threshold (float): The threshold for determining overlap between blocks. Default is 0.8.
+
+    Returns:
+        list: A list of blocks to be removed, based on the overlap and confidence criteria.
+    """
+    # 计算每个block的坐标和面积
+    block_info = []
+    for block in combined_res_list:
+        xmin, ymin = int(block['poly'][0]), int(block['poly'][1])
+        xmax, ymax = int(block['poly'][4]), int(block['poly'][5])
+        area = (xmax - xmin) * (ymax - ymin)
+        score = block.get('score', 0.5)  # 如果没有score字段,默认为0.5
+        block_info.append((xmin, ymin, xmax, ymax, area, score, block))
+
+    blocks_to_remove = []
+    marked_indices = set()  # 跟踪已标记为删除的block索引
+
+    # 检查每个block内部是否有3个及以上的小block
+    for i, (xmin, ymin, xmax, ymax, area, score, block) in enumerate(block_info):
+        # 如果当前block已标记为删除,则跳过
+        if i in marked_indices:
+            continue
+
+        # 查找内部的小block (仅考虑尚未被标记为删除的block)
+        blocks_inside = [(j, j_score, j_block) for j, (xj_min, yj_min, xj_max, yj_max, j_area, j_score, j_block) in
+                         enumerate(block_info)
+                         if i != j and j not in marked_indices and is_inside(block_info[j], block_info[i],
+                                                                             overlap_threshold)]
+
+        # 如果内部有3个及以上的小block
+        if len(blocks_inside) >= 3:
+            # 计算小block的平均分数
+            avg_score = sum(s for _, s, _ in blocks_inside) / len(blocks_inside)
+
+            # 比较大block的分数和小block的平均分数
+            if score > avg_score:
+                # 保留大block,扩展其边界
+                # 首先将所有小block标记为要删除
+                for j, _, j_block in blocks_inside:
+                    if j_block not in blocks_to_remove:
+                        blocks_to_remove.append(j_block)
+                        marked_indices.add(j)  # 标记索引为已处理
+
+                # 扩展大block的边界以包含所有小block
+                new_xmin, new_ymin, new_xmax, new_ymax = xmin, ymin, xmax, ymax
+                for _, _, j_block in blocks_inside:
+                    j_xmin, j_ymin = int(j_block['poly'][0]), int(j_block['poly'][1])
+                    j_xmax, j_ymax = int(j_block['poly'][4]), int(j_block['poly'][5])
+                    new_xmin = min(new_xmin, j_xmin)
+                    new_ymin = min(new_ymin, j_ymin)
+                    new_xmax = max(new_xmax, j_xmax)
+                    new_ymax = max(new_ymax, j_ymax)
+
+                # 更新大block的边界
+                block['poly'][0] = block['poly'][6] = new_xmin
+                block['poly'][1] = block['poly'][3] = new_ymin
+                block['poly'][2] = block['poly'][4] = new_xmax
+                block['poly'][5] = block['poly'][7] = new_ymax
+            else:
+                # 保留小blocks,删除大block
+                blocks_to_remove.append(block)
+                marked_indices.add(i)  # 标记当前索引为已处理
+    return blocks_to_remove
+
+
 def get_res_list_from_layout_res(layout_res, iou_threshold=0.7, overlap_threshold=0.8, area_threshold=0.8):
     """Extract OCR, table and other regions from layout results."""
     ocr_res_list = []
@@ -311,6 +383,19 @@ def get_res_list_from_layout_res(layout_res, iou_threshold=0.7, overlap_threshol
             del res['bbox']
             layout_res.remove(res)
 
+    # 检测大block内部是否包含多个小block, 合并ocr和table列表进行检测
+    combined_res_list = ocr_res_list + filtered_table_res_list
+    blocks_to_remove = remove_overlaps_low_confidence_blocks(combined_res_list, overlap_threshold)
+    # 移除需要删除的blocks
+    for block in blocks_to_remove:
+        if block in ocr_res_list:
+            ocr_res_list.remove(block)
+        elif block in filtered_table_res_list:
+            filtered_table_res_list.remove(block)
+        # 同时从layout_res中删除
+        if block in layout_res:
+            layout_res.remove(block)
+
     return ocr_res_list, filtered_table_res_list, single_page_mfdetrec_res
 
 

+ 1 - 1
mineru/version.py

@@ -1 +1 @@
-__version__ = "2.1.7"
+__version__ = "2.1.11"

+ 0 - 404
signatures/version1/cla.json

@@ -1,404 +0,0 @@
-{
-  "signedContributors": [
-    {
-      "name": "eltociear",
-      "id": 22633385,
-      "comment_id": 2254564260,
-      "created_at": "2024-07-28T15:55:21Z",
-      "repoId": 765083837,
-      "pullRequestNo": 231
-    },
-    {
-      "name": "nutshellfool",
-      "id": 1439114,
-      "comment_id": 2259763094,
-      "created_at": "2024-07-31T06:24:39Z",
-      "repoId": 765083837,
-      "pullRequestNo": 258
-    },
-    {
-      "name": "zuanzuanshao",
-      "id": 43691054,
-      "comment_id": 2272997756,
-      "created_at": "2024-08-07T09:11:10Z",
-      "repoId": 765083837,
-      "pullRequestNo": 355
-    },
-    {
-      "name": "Thepathakarpit",
-      "id": 119810812,
-      "comment_id": 2286123353,
-      "created_at": "2024-08-13T12:23:16Z",
-      "repoId": 765083837,
-      "pullRequestNo": 418
-    },
-    {
-      "name": "Matthijz98",
-      "id": 17087153,
-      "comment_id": 2298912989,
-      "created_at": "2024-08-20T13:49:50Z",
-      "repoId": 765083837,
-      "pullRequestNo": 467
-    },
-    {
-      "name": "strongerfly",
-      "id": 11643869,
-      "comment_id": 2309481561,
-      "created_at": "2024-08-26T07:01:49Z",
-      "repoId": 765083837,
-      "pullRequestNo": 487
-    },
-    {
-      "name": "hamirmahal",
-      "id": 43425812,
-      "comment_id": 2395141155,
-      "created_at": "2024-10-05T18:22:47Z",
-      "repoId": 765083837,
-      "pullRequestNo": 687
-    },
-    {
-      "name": "wmpscc",
-      "id": 29891793,
-      "comment_id": 2416780426,
-      "created_at": "2024-10-16T13:02:13Z",
-      "repoId": 765083837,
-      "pullRequestNo": 682
-    },
-    {
-      "name": "randydl",
-      "id": 36127931,
-      "comment_id": 2439668779,
-      "created_at": "2024-10-26T17:39:26Z",
-      "repoId": 765083837,
-      "pullRequestNo": 793
-    },
-    {
-      "name": "hyastar",
-      "id": 117415976,
-      "comment_id": 2466539016,
-      "created_at": "2024-11-10T01:32:42Z",
-      "repoId": 765083837,
-      "pullRequestNo": 916
-    },
-    {
-      "name": "kimi360",
-      "id": 3158007,
-      "comment_id": 2472266659,
-      "created_at": "2024-11-13T02:57:34Z",
-      "repoId": 765083837,
-      "pullRequestNo": 938
-    },
-    {
-      "name": "ProseGuys",
-      "id": 45124798,
-      "comment_id": 2472990455,
-      "created_at": "2024-11-13T09:37:42Z",
-      "repoId": 765083837,
-      "pullRequestNo": 945
-    },
-    {
-      "name": "liugongjian",
-      "id": 9069358,
-      "comment_id": 2484888409,
-      "created_at": "2024-11-19T07:28:12Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1024
-    },
-    {
-      "name": "MatthewZMD",
-      "id": 12422335,
-      "comment_id": 2565021810,
-      "created_at": "2024-12-30T04:46:33Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1379
-    },
-    {
-      "name": "yzztin",
-      "id": 99233593,
-      "comment_id": 2568773016,
-      "created_at": "2025-01-03T07:02:55Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1397
-    },
-    {
-      "name": "utopia2077",
-      "id": 78017255,
-      "comment_id": 2571704177,
-      "created_at": "2025-01-05T17:57:17Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1412
-    },
-    {
-      "name": "beholder91",
-      "id": 113708464,
-      "comment_id": 2581919559,
-      "created_at": "2025-01-10T06:58:05Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1479
-    },
-    {
-      "name": "moria97",
-      "id": 59813791,
-      "comment_id": 2601404928,
-      "created_at": "2025-01-20T05:30:38Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1578
-    },
-    {
-      "name": "shniubobo",
-      "id": 6594544,
-      "comment_id": 2660086464,
-      "created_at": "2025-02-14T19:15:25Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1693
-    },
-    {
-      "name": "xuzijie1995",
-      "id": 25075527,
-      "comment_id": 2676066426,
-      "created_at": "2025-02-22T07:15:35Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1743
-    },
-    {
-      "name": "nadahlberg",
-      "id": 58701810,
-      "comment_id": 2676309097,
-      "created_at": "2025-02-22T17:04:14Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1748
-    },
-    {
-      "name": "BetterAndBetterII",
-      "id": 141388234,
-      "comment_id": 2680567709,
-      "created_at": "2025-02-25T05:21:05Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1767
-    },
-    {
-      "name": "luckymore",
-      "id": 5390013,
-      "comment_id": 2684392503,
-      "created_at": "2025-02-26T09:23:25Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1785
-    },
-    {
-      "name": "rschutski",
-      "id": 179498169,
-      "comment_id": 2705150371,
-      "created_at": "2025-03-06T23:16:30Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1863
-    },
-    {
-      "name": "qbit-",
-      "id": 4794088,
-      "comment_id": 2705914730,
-      "created_at": "2025-03-07T09:09:13Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1863
-    },
-    {
-      "name": "mauryaland",
-      "id": 22381129,
-      "comment_id": 2717322316,
-      "created_at": "2025-03-12T10:03:11Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1906
-    },
-    {
-      "name": "ZMR2194888146",
-      "id": 23751306,
-      "comment_id": 2742090197,
-      "created_at": "2025-03-21T02:23:38Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1950
-    },
-    {
-      "name": "Zephor5",
-      "id": 2234158,
-      "comment_id": 2748052094,
-      "created_at": "2025-03-24T12:58:56Z",
-      "repoId": 765083837,
-      "pullRequestNo": 1982
-    },
-    {
-      "name": "zjx20",
-      "id": 2639200,
-      "comment_id": 2800714918,
-      "created_at": "2025-04-14T07:25:26Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2215
-    },
-    {
-      "name": "Doge2077",
-      "id": 91442300,
-      "comment_id": 2801283257,
-      "created_at": "2025-04-14T10:40:54Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2226
-    },
-    {
-      "name": "vloum",
-      "id": 75369577,
-      "comment_id": 2811669681,
-      "created_at": "2025-04-17T03:54:59Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2267
-    },
-    {
-      "name": "kowyo",
-      "id": 110339237,
-      "comment_id": 2829263082,
-      "created_at": "2025-04-25T02:54:20Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2367
-    },
-    {
-      "name": "CharlesKeeling65",
-      "id": 94165417,
-      "comment_id": 2841356871,
-      "created_at": "2025-04-30T09:25:31Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2411
-    },
-    {
-      "name": "seedclaimer",
-      "id": 86753366,
-      "comment_id": 2916194375,
-      "created_at": "2025-05-28T12:50:25Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2536
-    },
-    {
-      "name": "liuzhenghua",
-      "id": 11787325,
-      "comment_id": 2921092605,
-      "created_at": "2025-05-30T02:57:07Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2550
-    },
-    {
-      "name": "PairZhu",
-      "id": 47098840,
-      "comment_id": 2938149702,
-      "created_at": "2025-06-04T02:39:39Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2566
-    },
-    {
-      "name": "AdrianWangs",
-      "id": 72337244,
-      "comment_id": 2943818300,
-      "created_at": "2025-06-05T11:30:42Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2578
-    },
-    {
-      "name": "YanzhenHuang",
-      "id": 86364920,
-      "comment_id": 2968974232,
-      "created_at": "2025-06-13T04:17:08Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2620
-    },
-    {
-      "name": "Ar-Hyk",
-      "id": 55748412,
-      "comment_id": 2970512136,
-      "created_at": "2025-06-13T14:02:16Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2634
-    },
-    {
-      "name": "hotelll",
-      "id": 45009029,
-      "comment_id": 2978780331,
-      "created_at": "2025-06-17T03:09:54Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2676
-    },
-    {
-      "name": "hsia",
-      "id": 654127,
-      "comment_id": 2979415817,
-      "created_at": "2025-06-17T17:35:10Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2699
-    },
-    {
-      "name": "CHENyuuuuuuu",
-      "id": 32993095,
-      "comment_id": 2982868924,
-      "created_at": "2025-06-18T06:34:06Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2719
-    },
-    {
-      "name": "yuanjua",
-      "id": 80858000,
-      "comment_id": 2983805144,
-      "created_at": "2025-06-18T11:27:23Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2727
-    },
-    {
-      "name": "QIN2DIM",
-      "id": 62018067,
-      "comment_id": 2992279796,
-      "created_at": "2025-06-20T17:04:59Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2758
-    },
-    {
-      "name": "herryqg",
-      "id": 107988674,
-      "comment_id": 2995155194,
-      "created_at": "2025-06-23T06:49:59Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2763
-    },
-    {
-      "name": "zhanluxianshen",
-      "id": 161462588,
-      "comment_id": 3002955644,
-      "created_at": "2025-06-25T03:59:03Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2787
-    },
-    {
-      "name": "ZhiweiXu-102307",
-      "id": 192890785,
-      "comment_id": 3015529289,
-      "created_at": "2025-06-28T15:37:58Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2826
-    },
-    {
-      "name": "hzwzwzw",
-      "id": 20764045,
-      "comment_id": 3017877153,
-      "created_at": "2025-06-30T05:44:13Z",
-      "repoId": 765083837,
-      "pullRequestNo": 2831
-    },
-    {
-      "name": "Tuyohai",
-      "id": 98230804,
-      "comment_id": 3077606100,
-      "created_at": "2025-07-16T08:53:24Z",
-      "repoId": 765083837,
-      "pullRequestNo": 3070
-    },
-    {
-      "name": "huazZeng",
-      "id": 125243371,
-      "comment_id": 3100630363,
-      "created_at": "2025-07-22T03:04:40Z",
-      "repoId": 765083837,
-      "pullRequestNo": 3129
-    }
-  ]
-}

Vissa filer visades inte eftersom för många filer har ändrats