Skip to content

Commit 93396f2

Browse files
authored
Merge pull request #50 from opendatalab/dev
Dev
2 parents fc8464c + 0fe03d5 commit 93396f2

File tree

2 files changed

+34
-17
lines changed

2 files changed

+34
-17
lines changed

mineru_vl_utils/vlm_client/http_client.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import httpx
88
from httpx_retries import Retry, RetryTransport
99
from PIL import Image
10+
from loguru import logger
1011

1112
from .base_client import (
1213
DEFAULT_SYSTEM_PROMPT,
@@ -63,14 +64,22 @@ def __init__(
6364

6465
if not server_url:
6566
server_url = _get_env("MINERU_VL_SERVER")
66-
6767
if server_url.endswith("/"): # keep server_url if it ends with '/'
6868
server_url = server_url.rstrip("/")
6969
else: # use base_url if it does not end with '/' (backward compatibility)
7070
server_url = self._get_base_url(server_url)
71-
7271
self.server_url = server_url
73-
self.server_headers = server_headers
72+
73+
api_key = os.getenv("MINERU_VL_API_KEY", "").strip()
74+
if api_key:
75+
headers = dict(server_headers) if server_headers else {}
76+
if "Authorization" in headers:
77+
logger.warning("Overriding existing 'Authorization' header with MINERU_VL_API_KEY from environment variable.")
78+
headers["Authorization"] = f"Bearer {api_key}"
79+
self.server_headers = headers
80+
else:
81+
self.server_headers = server_headers
82+
7483
self.http_timeout = http_timeout
7584
self.max_retries = max_retries
7685
self.retry_backoff_factor = retry_backoff_factor
@@ -79,6 +88,7 @@ def __init__(
7988
self._aio_client_sem = asyncio.Semaphore(1)
8089
self._aio_client_cache: dict[asyncio.AbstractEventLoop, httpx.AsyncClient] = {}
8190

91+
model_name = model_name or os.getenv("MINERU_VL_MODEL_NAME")
8292
if model_name:
8393
self._check_model_name(self.server_url, model_name)
8494
self.model_name = model_name
@@ -164,7 +174,8 @@ def _get_model_name(self, base_url: str) -> str:
164174
raise RequestError(f"No models found in response from {base_url}. Response body: {response.text}")
165175
if len(models) != 1:
166176
raise RequestError(
167-
f"Expected exactly one model from {base_url}, but got {len(models)}. Please specify the model name."
177+
f"Expected exactly one model from {base_url}, but got {len(models)}. Please specify the model name"
178+
f" or set the `MINERU_VL_MODEL_NAME` environment variable."
168179
)
169180
model_name = models[0].get("id", "")
170181
if not model_name:
@@ -275,6 +286,11 @@ def get_response_content(self, response_data: dict) -> str:
275286
content = message["content"]
276287
if not (content is None or isinstance(content, str)):
277288
raise ServerError(f"Unexpected content type: {type(content)}.")
289+
# Allow the end token to be configured via environment variable, falling back to the default.
290+
# Set MINERU_VLM_END_TOKEN to override or disable stripping (e.g., set to an empty string).
291+
end_token = os.getenv("MINERU_VLM_END_TOKEN", "<|im_end|>")
292+
if end_token and isinstance(content, str) and content.endswith(end_token):
293+
content = content[:-len(end_token)]
278294
return content or ""
279295

280296
def predict(

pyproject.toml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ description = "Utilities for MinerU Vision-Language models"
1414
readme = "README.md"
1515
requires-python = ">=3.10,<3.14"
1616
dependencies = [
17-
"httpx",
18-
"httpx-retries",
19-
"aiofiles",
20-
"pillow",
21-
"pydantic",
17+
"httpx",
18+
"httpx-retries",
19+
"aiofiles",
20+
"pillow",
21+
"pydantic",
22+
"loguru",
2223
]
2324
classifiers = [
2425
"Programming Language :: Python :: 3",
@@ -33,20 +34,20 @@ Issues = "https://github.com/opendatalab/mineru-vl-utils/issues"
3334

3435
[project.optional-dependencies]
3536
transformers = [
36-
"torch>=2.6.0,<3",
37-
"transformers>=4.51.1,<5.0.0",
38-
"accelerate>=1.5.1",
39-
"torchvision",
37+
"torch>=2.6.0,<3",
38+
"transformers>=4.51.1,<5.0.0",
39+
"accelerate>=1.5.1",
40+
"torchvision",
4041
]
4142
vllm = [
42-
"vllm>=0.10.0,<=0.11.0",
43+
"vllm>=0.10.1.1,<0.12",
4344
]
4445
mlx = [
45-
"mlx-vlm>=0.3.3,<0.4.0",
46+
"mlx-vlm>=0.3.3,<0.4.0",
4647
]
4748
lmdeploy = [
48-
"lmdeploy>=0.10.2",
49-
"qwen_vl_utils",
49+
"lmdeploy>=0.10.2,<0.12",
50+
"qwen_vl_utils",
5051
]
5152

5253
[tool.setuptools.dynamic]

0 commit comments

Comments
 (0)