mirror of
https://github.com/opendatalab/MinerU.git
synced 2026-03-27 19:18:34 +07:00
Compare commits
47 Commits
release-2.
...
release-2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a50616b089 | ||
|
|
da56746668 | ||
|
|
259ab11e74 | ||
|
|
64c7ac0083 | ||
|
|
4d0b6a0513 | ||
|
|
74726662ce | ||
|
|
990782acfc | ||
|
|
2ce4352a25 | ||
|
|
e76f29639f | ||
|
|
60d32b8ac1 | ||
|
|
1dbe356fa4 | ||
|
|
a67ff8707e | ||
|
|
7b701e4907 | ||
|
|
1b6ed5d0a0 | ||
|
|
d85b5e86cd | ||
|
|
9c6778d5ad | ||
|
|
22f5b0b4b4 | ||
|
|
2b3b4331f2 | ||
|
|
0de4075586 | ||
|
|
80cbeb2a3f | ||
|
|
be489ab780 | ||
|
|
0041919d22 | ||
|
|
f7affcefb7 | ||
|
|
a11f6de370 | ||
|
|
93a3bc776b | ||
|
|
7ceee7f7bf | ||
|
|
8e7bf5148a | ||
|
|
3920a8c1f3 | ||
|
|
3c817536b1 | ||
|
|
89e3e9e5ce | ||
|
|
03276996ce | ||
|
|
6411cdfd7c | ||
|
|
c27681642d | ||
|
|
112e1967e7 | ||
|
|
fe25040db5 | ||
|
|
b231f4493c | ||
|
|
4aef8fd168 | ||
|
|
3ff7fee8a6 | ||
|
|
0490af1cd7 | ||
|
|
1db99bb403 | ||
|
|
4267cfa2c3 | ||
|
|
f6f60b971a | ||
|
|
0f4dbbd0de | ||
|
|
e7ed7660e3 | ||
|
|
ab02c5943e | ||
|
|
a8d3f789bb | ||
|
|
9356552a04 |
10
README.md
10
README.md
@@ -17,7 +17,7 @@
|
||||
[](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
[](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
[](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
[](https://colab.research.google.com/gist/myhloli/3b3a00a4a0a61577b6c30f989092d20d/mineru_demo.ipynb)
|
||||
[](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)
|
||||
[](https://arxiv.org/abs/2409.18839)
|
||||
[](https://deepwiki.com/opendatalab/MinerU)
|
||||
|
||||
@@ -43,6 +43,14 @@
|
||||
</div>
|
||||
|
||||
# Changelog
|
||||
- 2025/08/01 2.1.10 Released
|
||||
- Fixed an issue in the `pipeline` backend where block overlap caused the parsing results to deviate from expectations #3232
|
||||
- 2025/07/30 2.1.9 Released
|
||||
- `transformers` 4.54.1 version adaptation
|
||||
- 2025/07/28 2.1.8 Released
|
||||
- `sglang` 0.4.9.post5 version adaptation
|
||||
- 2025/07/27 2.1.7 Released
|
||||
- `transformers` 4.54.0 version adaptation
|
||||
- 2025/07/26 2.1.6 Released
|
||||
- Fixed table parsing issues in handwritten documents when using `vlm` backend
|
||||
- Fixed visualization box position drift issue when document is rotated #3175
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
[](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
[](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
[](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
[](https://colab.research.google.com/gist/myhloli/3b3a00a4a0a61577b6c30f989092d20d/mineru_demo.ipynb)
|
||||
[](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)
|
||||
[](https://arxiv.org/abs/2409.18839)
|
||||
[](https://deepwiki.com/opendatalab/MinerU)
|
||||
|
||||
@@ -43,16 +43,24 @@
|
||||
</div>
|
||||
|
||||
# 更新记录
|
||||
- 2025/07/26 2.1.6发布
|
||||
- 2025/08/01 2.1.10 发布
|
||||
- 修复`pipeline`后端因block覆盖导致的解析结果与预期不符 #3232
|
||||
- 2025/07/30 2.1.9 发布
|
||||
- `transformers` 4.54.1 版本适配
|
||||
- 2025/07/28 2.1.8 发布
|
||||
- `sglang` 0.4.9.post5 版本适配
|
||||
- 2025/07/27 2.1.7 发布
|
||||
- `transformers` 4.54.0 版本适配
|
||||
- 2025/07/26 2.1.6 发布
|
||||
- 修复`vlm`后端解析部分手写文档时的表格异常问题
|
||||
- 修复文档旋转时可视化框位置漂移问题 #3175
|
||||
- 2025/07/24 2.1.5发布
|
||||
- 2025/07/24 2.1.5 发布
|
||||
- `sglang` 0.4.9 版本适配,同步升级dockerfile基础镜像为sglang 0.4.9.post3
|
||||
- 2025/07/23 2.1.4发布
|
||||
- 2025/07/23 2.1.4 发布
|
||||
- bug修复
|
||||
- 修复`pipeline`后端中`MFR`步骤在某些情况下显存消耗过大的问题 #2771
|
||||
- 修复某些情况下`image`/`table`与`caption`/`footnote`匹配不准确的问题 #3129
|
||||
- 2025/07/16 2.1.1发布
|
||||
- 2025/07/16 2.1.1 发布
|
||||
- bug修复
|
||||
- 修复`pipeline`在某些情况可能发生的文本块内容丢失问题 #3005
|
||||
- 修复`sglang-client`需要安装`torch`等不必要的包的问题 #2968
|
||||
@@ -60,7 +68,7 @@
|
||||
- 易用性更新
|
||||
- 更新`compose.yaml`,便于用户直接启动`sglang-server`、`mineru-api`、`mineru-gradio`服务
|
||||
- 启用全新的[在线文档站点](https://opendatalab.github.io/MinerU/zh/),简化readme,提供更好的文档体验
|
||||
- 2025/07/05 2.1.0发布
|
||||
- 2025/07/05 2.1.0 发布
|
||||
- 这是 MinerU 2 的第一个大版本更新,包含了大量新功能和改进,包含众多性能优化、体验优化和bug修复,具体更新内容如下:
|
||||
- 性能优化:
|
||||
- 大幅提升某些特定分辨率(长边2000像素左右)文档的预处理速度
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
# Use the official sglang image
|
||||
FROM lmsysorg/sglang:v0.4.9.post3-cu126
|
||||
# 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 lmsysorg/sglang:v0.4.9.post3-cu128-b200
|
||||
# FROM docker.m.daocloud.io/lmsysorg/sglang:v0.4.9.post6-cu128-b200
|
||||
|
||||
# Use the official sglang image
|
||||
# FROM lmsysorg/sglang:v0.4.9.post6-cu126
|
||||
# For blackwell GPU, use the following line instead:
|
||||
# FROM lmsysorg/sglang:v0.4.9.post6-cu128-b200
|
||||
|
||||
# Install libgl for opencv support & Noto fonts for Chinese characters
|
||||
RUN apt-get update && \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Use the official sglang image
|
||||
FROM lmsysorg/sglang:v0.4.9.post3-cu126
|
||||
FROM lmsysorg/sglang:v0.4.9.post6-cu126
|
||||
# For blackwell GPU, use the following line instead:
|
||||
# FROM lmsysorg/sglang:v0.4.9.post3-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 && \
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
[](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
[](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
[](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
[](https://colab.research.google.com/gist/myhloli/3b3a00a4a0a61577b6c30f989092d20d/mineru_demo.ipynb)
|
||||
[](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)
|
||||
[](https://arxiv.org/abs/2409.18839)
|
||||
[](https://deepwiki.com/opendatalab/MinerU)
|
||||
|
||||
|
||||
@@ -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.post3-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.post3-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
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
[](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
[](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
[](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
[](https://colab.research.google.com/gist/myhloli/3b3a00a4a0a61577b6c30f989092d20d/mineru_demo.ipynb)
|
||||
[](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)
|
||||
[](https://arxiv.org/abs/2409.18839)
|
||||
[](https://deepwiki.com/opendatalab/MinerU)
|
||||
|
||||
|
||||
@@ -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.post3-cu126`作为基础镜像,支持Turing/Ampere/Ada Lovelace/Hopper平台,
|
||||
> 如您使用较新的`Blackwell`平台,请将基础镜像修改为`lmsysorg/sglang:v0.4.9.post3-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说明
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -1416,7 +1416,11 @@ class UnimerMBartDecoder(UnimerMBartPreTrainedModel):
|
||||
raise ValueError("You have to specify either decoder_input_ids or decoder_inputs_embeds")
|
||||
|
||||
# past_key_values_length
|
||||
past_key_values_length = past_key_values[0][0].shape[2] if past_key_values is not None else 0
|
||||
# past_key_values_length = past_key_values[0][0].shape[2] if past_key_values is not None else 0
|
||||
past_key_values_length = 0
|
||||
if past_key_values is not None:
|
||||
if isinstance(past_key_values, (list, tuple)) and past_key_values:
|
||||
past_key_values_length = past_key_values[0][0].shape[2]
|
||||
|
||||
if inputs_embeds is None:
|
||||
inputs_embeds = self.embed_tokens(input_ids)
|
||||
@@ -1501,7 +1505,12 @@ class UnimerMBartDecoder(UnimerMBartPreTrainedModel):
|
||||
if dropout_probability < self.layerdrop:
|
||||
continue
|
||||
|
||||
past_key_value = past_key_values[idx] if past_key_values is not None else None
|
||||
# past_key_value = past_key_values[idx] if past_key_values is not None else None
|
||||
past_key_value = past_key_values[idx] if (
|
||||
past_key_values is not None and
|
||||
isinstance(past_key_values, (list, tuple)) and
|
||||
idx < len(past_key_values)
|
||||
) else None
|
||||
|
||||
if self.gradient_checkpointing and self.training:
|
||||
layer_outputs = self._gradient_checkpointing_func(
|
||||
@@ -2182,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:
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 @@
|
||||
__version__ = "2.1.5"
|
||||
__version__ = "2.1.9"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user