Add YOLO preflight runtime diagnostics
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from importlib import metadata
|
||||
from pathlib import Path
|
||||
from typing import Any, Type
|
||||
|
||||
@@ -42,6 +44,10 @@ class YoloPreflightService:
|
||||
"max_tiles": resolved_settings.yolo_max_tiles,
|
||||
"will_download_models": False,
|
||||
"will_run_inference": False,
|
||||
"runtime": YoloPreflightService._runtime_details(
|
||||
settings=resolved_settings,
|
||||
assume_dependencies=assume_dependencies,
|
||||
),
|
||||
}
|
||||
|
||||
if not resolved_settings.yolo_enabled:
|
||||
@@ -50,6 +56,8 @@ class YoloPreflightService:
|
||||
|
||||
dependencies_available = True if assume_dependencies else yolo_adapter_class.dependencies_available()
|
||||
result["checks"]["dependencies_available"] = dependencies_available
|
||||
if dependencies_available and not assume_dependencies:
|
||||
result["runtime"]["cuda_available"] = YoloPreflightService._torch_cuda_available()
|
||||
if not dependencies_available:
|
||||
result["status"] = "dependency_unavailable"
|
||||
result["message"] = "YOLO dependencies are not installed. Install backend optional extras with geointel-backend[ai]."
|
||||
@@ -115,3 +123,35 @@ class YoloPreflightService:
|
||||
else:
|
||||
result["message"] = "Configured YOLO preflight passed. No model was loaded and no inference was run."
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def _runtime_details(*, settings: Settings, assume_dependencies: bool) -> dict[str, Any]:
|
||||
model_directory = None
|
||||
if settings.yolo_model_path:
|
||||
model_directory = str(Path(settings.yolo_model_path).expanduser().parent)
|
||||
return {
|
||||
"dependencies_assumed": assume_dependencies,
|
||||
"model_directory": model_directory,
|
||||
"yolo_config_dir": os.environ.get("YOLO_CONFIG_DIR"),
|
||||
"torch_version": YoloPreflightService._package_version("torch"),
|
||||
"ultralytics_version": YoloPreflightService._package_version("ultralytics"),
|
||||
"cuda_available": None,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def _package_version(package_name: str) -> str | None:
|
||||
try:
|
||||
return metadata.version(package_name)
|
||||
except metadata.PackageNotFoundError:
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _torch_cuda_available() -> bool | None:
|
||||
try:
|
||||
import torch
|
||||
except Exception:
|
||||
return None
|
||||
try:
|
||||
return bool(torch.cuda.is_available())
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user