Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2b77d8b
Use cache mount for genai docker (#4954)
Bobholamovic Jan 29, 2026
9d39bc9
Fix HPS order bug (#4955)
Bobholamovic Jan 29, 2026
966969f
Fix transformers version (#4956)
Bobholamovic Jan 29, 2026
306430a
Fix HPS and remove scipy from required deps (#4957)
Bobholamovic Jan 29, 2026
01f63a6
[Cherry-Pick]bugfix: unexpected change of the constant IMAGE_LABELS (…
changdazhou Jan 30, 2026
363b508
[METAX] add ppdoclayv3 to METAX_GPU_WHITELIST (#4959)
handsomecoderyang Jan 30, 2026
d59a344
vllm 0.10.2 needs transformers 4.x (#4963)
zhang-prog Jan 30, 2026
622b602
Bump version to 3.4.1
Bobholamovic Jan 30, 2026
c78fb95
Support setting PDF rendering scale factor (#4967)
Bobholamovic Feb 2, 2026
45989f0
Fix/doc vlm async cancellation (#4969) (#4971)
scyyh11 Feb 4, 2026
0a936ba
Fix typo (#4982)
Bobholamovic Feb 6, 2026
f790eff
add llama.cpp support (#4983)
zhang-prog Feb 9, 2026
a10d7c5
Add Intel GPU config (#4992)
Bobholamovic Feb 11, 2026
92a190e
Remove PaddleOCR-VL server page limit (#4991)
Bobholamovic Feb 11, 2026
04476cb
PaddleX Add ROCm 7.0 compatibility patches (#4990) (#4996)
M4jupitercannon Feb 12, 2026
edb4022
[Feat] Support setting expiration for BOS URLs (#4993)
Bobholamovic Feb 12, 2026
69e8d75
add \n for seal rec && bugfix for text in table && delete_pass by mod…
changdazhou Feb 13, 2026
f95d873
Fix auto batch size for PaddleOCR-VL-1.5-0.9B (#5003)
Bobholamovic Feb 13, 2026
c88d4c1
Bump version to 3.4.2
Bobholamovic Feb 13, 2026
e92d21f
Update HPS frozon deps (#5004)
Bobholamovic Feb 13, 2026
41b695b
update vlm batch_size (#5005)
zhang-prog Feb 13, 2026
901393a
support modular langchain as well
np-n Feb 25, 2026
b39f430
fix
np-n Feb 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/deploy_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Develop Docs
on:
push:
branches: #设置更新哪个分支会更新站点
- release/3.3
- release/3.4
permissions:
contents: write
jobs:
Expand All @@ -27,5 +27,5 @@ jobs:
- run: pip install mike mkdocs-material jieba mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-static-i18n mkdocs-minify-plugin
- run: |
git fetch origin gh-pages --depth=1
mike deploy --push --update-aliases 3.3 latest
mike deploy --push --update-aliases 3.4 latest
mike set-default --push latest
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,4 @@ repos:
files: ^paddlex/.*\.py$
additional_dependencies:
- stdlib-list==0.10.0
- setuptools
11 changes: 7 additions & 4 deletions deploy/genai_vllm_server_docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,24 @@ RUN apt-get update \
&& apt-get install -y libgl1 \
&& rm -rf /var/lib/apt/lists/*

ENV PIP_NO_CACHE_DIR=0
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

RUN python -m pip install torch==2.8.0
RUN --mount=type=cache,target=/root/.cache/pip \
python -m pip install torch==2.8.0

ARG PADDLEX_VERSION=">=3.3.6,<3.4"
RUN python -m pip install "paddlex${PADDLEX_VERSION}"
RUN --mount=type=cache,target=/root/.cache/pip \
python -m pip install "paddlex${PADDLEX_VERSION}"

ARG BUILD_FOR_SM120=false
RUN if [ "${BUILD_FOR_SM120}" = 'true' ]; then \
RUN --mount=type=cache,target=/root/.cache/pip \
if [ "${BUILD_FOR_SM120}" = 'true' ]; then \
python -m pip install https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.4.11/flash_attn-2.8.3%2Bcu128torch2.8-cp310-cp310-linux_x86_64.whl; \
else \
python -m pip install https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.3.14/flash_attn-2.8.2+cu128torch2.8-cp310-cp310-linux_x86_64.whl; \
fi \
&& python -m pip install transformers==4.57.6 \
&& paddlex --install genai-vllm-server

EXPOSE 8080
Expand Down
18 changes: 13 additions & 5 deletions deploy/hps/sdk/pipelines/OCR/server/model_repo/ocr/1/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def initialize(self, args):
self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -59,6 +60,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -105,12 +108,16 @@ def run_batch(self, inputs, log_ids, batch_id):

ret = executor.map(self._preprocess, inputs_g, log_ids_g)
ind_img_lsts, ind_data_info_lst, ind_visualize_enabled_lst = [], [], []
ind_input_id_lst, ind_log_id_lst, ind_input_lst = [], [], []
for i, item in enumerate(ret):
if isinstance(item, tuple):
assert len(item) == 3, len(item)
ind_img_lsts.append(item[0])
ind_data_info_lst.append(item[1])
ind_visualize_enabled_lst.append(item[2])
ind_input_id_lst.append(input_ids_g[i])
ind_log_id_lst.append(log_ids_g[i])
ind_input_lst.append(inputs_g[i])
else:
input_id = input_ids_g[i]
result_or_output_dic[input_id] = item
Expand Down Expand Up @@ -146,19 +153,19 @@ def run_batch(self, inputs, log_ids, batch_id):
ind_preds.append(preds[start_idx : start_idx + len(item)])
start_idx += len(item)

for i, result in zip(
input_ids_g,
for input_id, result in zip(
ind_input_id_lst,
executor.map(
self._postprocess,
ind_img_lsts,
ind_data_info_lst,
ind_visualize_enabled_lst,
ind_preds,
log_ids_g,
inputs_g,
ind_log_id_lst,
ind_input_lst,
),
):
result_or_output_dic[i] = result
result_or_output_dic[input_id] = result

assert len(result_or_output_dic) == len(
inputs
Expand Down Expand Up @@ -270,6 +277,7 @@ def _postprocess(self, images, data_info, visualize_enabled, preds, log_id, inpu
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/OCR/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.2.5
0.2.6
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def initialize(self, args):
self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -44,6 +45,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -142,6 +145,7 @@ def run(self, input, log_id):
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/PP-ChatOCRv3-doc/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.2
0.3.3
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def initialize(self, args):
self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -44,6 +45,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -143,6 +146,7 @@ def run(self, input, log_id):
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/PP-ChatOCRv4-doc/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.4.2
0.4.3
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,10 @@
class TritonPythonModel(BaseTritonPythonModel):
def initialize(self, args):
super().initialize(args)

self.pipeline.inintial_visual_predictor(self.pipeline.config)

self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -47,6 +45,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -151,6 +151,7 @@ def run(self, input, log_id):
filename_template=f"markdown_{i}/{{key}}",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
md_flags = md_data["page_continuation_flags"]
Expand All @@ -165,6 +166,7 @@ def run(self, input, log_id):
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/PP-DocTranslation/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.2
0.1.3
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def initialize(self, args):
self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -58,6 +59,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -104,12 +107,16 @@ def run_batch(self, inputs, log_ids, batch_id):

ret = executor.map(self._preprocess, inputs_g, log_ids_g)
ind_img_lsts, ind_data_info_lst, ind_visualize_enabled_lst = [], [], []
ind_input_ids_lst, ind_log_ids_lst, ind_inputs_lst = [], [], []
for i, item in enumerate(ret):
if isinstance(item, tuple):
assert len(item) == 3, len(item)
ind_img_lsts.append(item[0])
ind_data_info_lst.append(item[1])
ind_visualize_enabled_lst.append(item[2])
ind_input_ids_lst.append(input_ids_g[i])
ind_log_ids_lst.append(log_ids_g[i])
ind_inputs_lst.append(inputs_g[i])
else:
input_id = input_ids_g[i]
result_or_output_dic[input_id] = item
Expand Down Expand Up @@ -179,19 +186,19 @@ def run_batch(self, inputs, log_ids, batch_id):
ind_preds.append(preds[start_idx : start_idx + len(item)])
start_idx += len(item)

for i, result in zip(
input_ids_g,
for input_id, result in zip(
ind_input_ids_lst,
executor.map(
self._postprocess,
ind_img_lsts,
ind_data_info_lst,
ind_visualize_enabled_lst,
ind_preds,
log_ids_g,
inputs_g,
ind_log_ids_lst,
ind_inputs_lst,
),
):
result_or_output_dic[i] = result
result_or_output_dic[input_id] = result

assert len(result_or_output_dic) == len(
inputs
Expand Down Expand Up @@ -323,6 +330,7 @@ def _postprocess(self, images, data_info, visualize_enabled, preds, log_id, inpu
filename_template=f"markdown_{i}/{{key}}",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
md_flags = md_data["page_continuation_flags"]
Expand All @@ -337,6 +345,7 @@ def _postprocess(self, images, data_info, visualize_enabled, preds, log_id, inpu
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/PP-StructureV3/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.5
0.3.6
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def initialize(self, args):
self.context = {}
self.context["file_storage"] = None
self.context["return_img_urls"] = False
self.context["url_expires_in"] = -1
self.context["max_num_input_imgs"] = _DEFAULT_MAX_NUM_INPUT_IMGS
self.context["max_output_img_size"] = _DEFAULT_MAX_OUTPUT_IMG_SIZE
if self.app_config.extra:
Expand All @@ -58,6 +59,8 @@ def initialize(self, args):
self.context["return_img_urls"] = self.app_config.extra[
"return_img_urls"
]
if "url_expires_in" in self.app_config.extra:
self.context["url_expires_in"] = self.app_config.extra["url_expires_in"]
if "max_num_input_imgs" in self.app_config.extra:
self.context["max_num_input_imgs"] = self.app_config.extra[
"max_num_input_imgs"
Expand Down Expand Up @@ -104,12 +107,16 @@ def run_batch(self, inputs, log_ids, batch_id):

ret = executor.map(self._preprocess, inputs_g, log_ids_g)
ind_img_lsts, ind_data_info_lst, ind_visualize_enabled_lst = [], [], []
ind_input_id_lst, ind_log_id_lst, ind_input_lst = [], [], []
for i, item in enumerate(ret):
if isinstance(item, tuple):
assert len(item) == 3, len(item)
ind_img_lsts.append(item[0])
ind_data_info_lst.append(item[1])
ind_visualize_enabled_lst.append(item[2])
ind_input_id_lst.append(input_ids_g[i])
ind_log_id_lst.append(log_ids_g[i])
ind_input_lst.append(inputs_g[i])
else:
input_id = input_ids_g[i]
result_or_output_dic[input_id] = item
Expand Down Expand Up @@ -157,19 +164,19 @@ def run_batch(self, inputs, log_ids, batch_id):
ind_preds.append(preds[start_idx : start_idx + len(item)])
start_idx += len(item)

for i, result in zip(
input_ids_g,
for input_id, result in zip(
ind_input_id_lst,
executor.map(
self._postprocess,
ind_img_lsts,
ind_data_info_lst,
ind_visualize_enabled_lst,
ind_preds,
log_ids_g,
inputs_g,
ind_log_id_lst,
ind_input_lst,
),
):
result_or_output_dic[i] = result
result_or_output_dic[input_id] = result

assert len(result_or_output_dic) == len(
inputs
Expand Down Expand Up @@ -301,6 +308,7 @@ def _postprocess(self, images, data_info, visualize_enabled, preds, log_id, inpu
filename_template=f"markdown_{i}/{{key}}",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
if visualize_enabled:
Expand All @@ -314,6 +322,7 @@ def _postprocess(self, images, data_info, visualize_enabled, preds, log_id, inpu
filename_template=f"{{key}}_{i}.jpg",
file_storage=self.context["file_storage"],
return_urls=self.context["return_img_urls"],
url_expires_in=self.context["url_expires_in"],
max_img_size=self.context["max_output_img_size"],
)
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,3 +103,7 @@ SubPipelines:
module_name: image_unwarping
model_name: UVDoc
model_dir: null

Serving:
extra:
max_num_input_imgs: null
2 changes: 1 addition & 1 deletion deploy/hps/sdk/pipelines/PaddleOCR-VL/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.2.0
0.3.1
Loading