import os as _os
def _ensure_ort_dylib() -> str | None:
if _os.environ.get("ORT_DYLIB_PATH"):
return _os.environ["ORT_DYLIB_PATH"]
try:
import onnxruntime as _ort except ImportError:
return None
_warm_gpu_dlls(_ort)
capi = _os.path.join(_os.path.dirname(_ort.__file__), "capi")
candidates: list[str] = []
if _os.name == "nt":
candidates = ["onnxruntime.dll"]
elif _os.name == "posix":
import glob as _glob
if __import__("sys").platform == "darwin":
candidates = ["libonnxruntime.dylib"]
else:
found = sorted(_glob.glob(_os.path.join(capi, "libonnxruntime.so.*")))
candidates = [ _os.path.basename(p) for p in found ] + ["libonnxruntime.so"]
for lib in candidates:
path = _os.path.join(capi, lib)
if _os.path.isfile(path):
_os.environ["ORT_DYLIB_PATH"] = path
if _os.name == "nt":
_os.add_dll_directory(capi)
return path
return None
def _warm_gpu_dlls(_ort) -> None:
try:
providers = _ort.get_available_providers()
except Exception:
return
if "CUDAExecutionProvider" not in providers:
return
try:
_ort.preload_dlls()
except Exception:
pass
ORT_DYLIB_PATH = _ensure_ort_dylib()
from bobine._native import (
ConverterConfig,
HybridConverter,
RoutingMode,
FormulaBackend,
ModelPrecision,
convert_to_markdown,
ConvertedDocument,
ExcelDocument,
convert_excel,
ingest_document,
convert_directory,
)
__all__ = [
"ConverterConfig",
"HybridConverter",
"RoutingMode",
"FormulaBackend",
"ModelPrecision",
"convert_to_markdown",
"ConvertedDocument",
"ExcelDocument",
"convert_excel",
"ingest_document",
"convert_directory",
"ORT_DYLIB_PATH",
]