Files
PDFToMD/tests/test_mineru_profile.py
2026-05-14 10:16:59 +09:00

107 lines
3.9 KiB
Python

from __future__ import annotations
from pdf2md.gpu import GpuInfo
from pdf2md.ir import WarningCode, WarningSeverity
from pdf2md.mineru_profile import resolve_mineru_profile
SAFE_ENV = {
"MINERU_PROCESSING_WINDOW_SIZE": "1",
"MINERU_API_MAX_CONCURRENT_REQUESTS": "1",
"MINERU_PDF_RENDER_THREADS": "1",
}
def test_auto_profile_uses_safe_values_without_gpu_inventory() -> None:
profile = resolve_mineru_profile("auto", selected_gpu=None, cuda_requested=True)
assert profile.applied_profile == "safe"
assert profile.environment == SAFE_ENV
assert [warning.code for warning in profile.warnings] == [WarningCode.GPU_UNAVAILABLE]
def test_auto_profile_uses_safe_values_for_gtx_1070_ti() -> None:
gpu = GpuInfo(index=0, name="NVIDIA GeForce GTX 1070 Ti", memory_total_mib=8192, driver_version="577.00")
profile = resolve_mineru_profile("auto", selected_gpu=gpu, cuda_requested=True)
assert profile.requested_profile == "auto"
assert profile.applied_profile == "safe"
assert profile.environment == SAFE_ENV
assert profile.selected_gpu_name == "NVIDIA GeForce GTX 1070 Ti"
def test_auto_profile_uses_moderate_values_for_16gb_turing_or_newer_gpu() -> None:
gpu = GpuInfo(index=0, name="NVIDIA RTX A4000", memory_total_mib=16384, driver_version="577.00")
profile = resolve_mineru_profile("auto", selected_gpu=gpu, cuda_requested=True)
assert profile.applied_profile == "auto"
assert profile.environment == {
"MINERU_PROCESSING_WINDOW_SIZE": "8",
"MINERU_API_MAX_CONCURRENT_REQUESTS": "1",
"MINERU_PDF_RENDER_THREADS": "4",
}
assert profile.warnings == ()
def test_auto_profile_uses_conservative_values_for_12gb_to_16gb_gpu() -> None:
gpu = GpuInfo(index=0, name="NVIDIA RTX 4070", memory_total_mib=12288, driver_version="577.00")
profile = resolve_mineru_profile("auto", selected_gpu=gpu, cuda_requested=True)
assert profile.applied_profile == "auto-conservative"
assert profile.environment == {
"MINERU_PROCESSING_WINDOW_SIZE": "4",
"MINERU_API_MAX_CONCURRENT_REQUESTS": "1",
"MINERU_PDF_RENDER_THREADS": "2",
}
def test_performance_profile_uses_performance_values_only_on_strong_gpu() -> None:
gpu = GpuInfo(index=1, name="NVIDIA RTX 4090", memory_total_mib=24564, driver_version="577.00")
profile = resolve_mineru_profile("performance", selected_gpu=gpu, cuda_requested=True)
assert profile.applied_profile == "performance"
assert profile.environment == {
"MINERU_PROCESSING_WINDOW_SIZE": "16",
"MINERU_API_MAX_CONCURRENT_REQUESTS": "1",
"MINERU_PDF_RENDER_THREADS": "4",
}
assert profile.selected_gpu_index == 1
assert profile.selected_gpu_vram_mib == 24564
def test_performance_profile_downgrades_to_safe_on_weak_gpu() -> None:
gpu = GpuInfo(index=0, name="NVIDIA GeForce GTX 1070 Ti", memory_total_mib=8192, driver_version="577.00")
profile = resolve_mineru_profile("performance", selected_gpu=gpu, cuda_requested=True)
assert profile.applied_profile == "safe"
assert profile.environment == SAFE_ENV
assert [warning.code for warning in profile.warnings] == [WarningCode.MINERU_PROFILE_ADJUSTED]
assert profile.warnings[0].severity == WarningSeverity.WARNING
def test_profile_details_are_json_ready() -> None:
gpu = GpuInfo(index=0, name="NVIDIA RTX A5000", memory_total_mib=24564, driver_version="577.00")
profile = resolve_mineru_profile("auto", selected_gpu=gpu, cuda_requested=True)
assert profile.to_engine_options() == {
"requested": "auto",
"applied": "auto",
"environment": {
"MINERU_API_MAX_CONCURRENT_REQUESTS": "1",
"MINERU_PDF_RENDER_THREADS": "4",
"MINERU_PROCESSING_WINDOW_SIZE": "8",
},
"selected_gpu": {
"index": 0,
"name": "NVIDIA RTX A5000",
"memory_total_mib": 24564,
"pre_turing_risk": False,
},
}