From d91938df6f3fbff37c17b5683b30840a3105145c Mon Sep 17 00:00:00 2001 From: Interstellar Apexx Date: Thu, 16 Apr 2026 20:38:20 -0700 Subject: [PATCH] fix(yolo-skill): defer ultralytics import in optimized hardware mode to prevent missing module crashes on pure onnxruntime nodes --- skills/detection/yolo-detection-2026/scripts/env_config.py | 7 +++++-- skills/lib/env_config.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/skills/detection/yolo-detection-2026/scripts/env_config.py b/skills/detection/yolo-detection-2026/scripts/env_config.py index 10797702..f559cd66 100644 --- a/skills/detection/yolo-detection-2026/scripts/env_config.py +++ b/skills/detection/yolo-detection-2026/scripts/env_config.py @@ -781,8 +781,6 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): Returns: (model, format_str) — the YOLO model and its format name """ - from ultralytics import YOLO - t0 = time.perf_counter() if use_optimized and self.framework_ok: @@ -794,6 +792,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(optimized_path)) else: + from ultralytics import YOLO model = YOLO(str(optimized_path)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded {self.export_format} model ({self.load_ms:.0f}ms)") @@ -807,6 +806,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(optimized_path)) else: + from ultralytics import YOLO model = YOLO(str(optimized_path)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded HuggingFace ONNX model ({self.load_ms:.0f}ms)") @@ -815,6 +815,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): _log(f"Failed to load HF-downloaded model: {e}") # Try exporting then loading + from ultralytics import YOLO pt_model = YOLO(f"{model_name}.pt") exported = self.export_model(pt_model, model_name) if exported: @@ -823,6 +824,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(exported)) else: + from ultralytics import YOLO model = YOLO(str(exported)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded freshly exported {self.export_format} model ({self.load_ms:.0f}ms)") @@ -847,6 +849,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): return pt_model, "pytorch" # No optimization requested or framework missing + from ultralytics import YOLO model = YOLO(f"{model_name}.pt") fallback_device = self.device if fallback_device == "cuda": diff --git a/skills/lib/env_config.py b/skills/lib/env_config.py index 10797702..f559cd66 100644 --- a/skills/lib/env_config.py +++ b/skills/lib/env_config.py @@ -781,8 +781,6 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): Returns: (model, format_str) — the YOLO model and its format name """ - from ultralytics import YOLO - t0 = time.perf_counter() if use_optimized and self.framework_ok: @@ -794,6 +792,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(optimized_path)) else: + from ultralytics import YOLO model = YOLO(str(optimized_path)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded {self.export_format} model ({self.load_ms:.0f}ms)") @@ -807,6 +806,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(optimized_path)) else: + from ultralytics import YOLO model = YOLO(str(optimized_path)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded HuggingFace ONNX model ({self.load_ms:.0f}ms)") @@ -815,6 +815,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): _log(f"Failed to load HF-downloaded model: {e}") # Try exporting then loading + from ultralytics import YOLO pt_model = YOLO(f"{model_name}.pt") exported = self.export_model(pt_model, model_name) if exported: @@ -823,6 +824,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): if self.backend == "mps": model = self._load_onnx_coreml(str(exported)) else: + from ultralytics import YOLO model = YOLO(str(exported)) self.load_ms = (time.perf_counter() - t0) * 1000 _log(f"Loaded freshly exported {self.export_format} model ({self.load_ms:.0f}ms)") @@ -847,6 +849,7 @@ def load_optimized(self, model_name: str, use_optimized: bool = True): return pt_model, "pytorch" # No optimization requested or framework missing + from ultralytics import YOLO model = YOLO(f"{model_name}.pt") fallback_device = self.device if fallback_device == "cuda":