6464 get_ipfs_datasets_manager = None
6565 logger .info ("ipfs_datasets_py not available - dataset storage disabled" )
6666
67- # Import ipfs_accelerate_py for compute acceleration
68- try :
69- import sys
70- from pathlib import Path as PathlibPath
71- accelerate_path = PathlibPath (__file__ ).parent .parent / "ipfs_accelerate_py"
72- if accelerate_path .exists ():
73- sys .path .insert (0 , str (accelerate_path ))
74-
75- from ipfs_accelerate_py import AccelerateCompute
76- HAS_ACCELERATE = True
77- logger .info ("ipfs_accelerate_py compute layer available for arrow metadata" )
78- except ImportError :
79- HAS_ACCELERATE = False
80- AccelerateCompute = None
81- logger .info ("ipfs_accelerate_py not available - using default compute" )
67+ HAS_ACCELERATE = False
68+ AccelerateCompute = None
69+
70+
71+ def _load_accelerate_compute_class (* , deps : object | None = None ):
72+ """Best-effort lazy loader for AccelerateCompute.
73+
74+ Supports dependency injection by allowing callers to pass a deps container
75+ that may already cache an imported ipfs_accelerate_py module.
76+ """
77+
78+ global HAS_ACCELERATE , AccelerateCompute
79+ if AccelerateCompute is not None :
80+ return AccelerateCompute
81+ try :
82+ from ipfs_kit_py import get_ipfs_accelerate
83+
84+ mod = get_ipfs_accelerate (deps = deps )
85+ if mod is None :
86+ return None
87+ cls = getattr (mod , "AccelerateCompute" , None )
88+ if cls is None :
89+ return None
90+ AccelerateCompute = cls
91+ HAS_ACCELERATE = True
92+ return AccelerateCompute
93+ except Exception :
94+ return None
8295
8396#
8497logger = logging .getLogger (__name__ )
@@ -110,7 +123,10 @@ def __init__(
110123 cluster_id : str = "default" ,
111124 enable_dataset_storage : bool = False ,
112125 enable_compute_layer : bool = False ,
113- dataset_batch_size : int = 100
126+ dataset_batch_size : int = 100 ,
127+ * ,
128+ deps : object | None = None ,
129+ accelerate_compute = None ,
114130 ): # Added node_id and cluster_id
115131 # Check if PyArrow is available before proceeding
116132 if not ARROW_AVAILABLE :
@@ -152,8 +168,8 @@ def __init__(
152168 self .dataset_manager = None
153169 self ._metadata_buffer = []
154170
155- # Compute layer configuration
156- self .enable_compute_layer = enable_compute_layer and HAS_ACCELERATE
171+ # Compute layer configuration
172+ self .enable_compute_layer = bool ( enable_compute_layer )
157173 self .compute_layer = None
158174
159175 # Initialize dataset manager if enabled
@@ -168,7 +184,13 @@ def __init__(
168184 # Initialize compute layer if enabled
169185 if self .enable_compute_layer :
170186 try :
171- self .compute_layer = AccelerateCompute ()
187+ if accelerate_compute is not None :
188+ self .compute_layer = accelerate_compute
189+ else :
190+ cls = _load_accelerate_compute_class (deps = deps )
191+ if cls is None :
192+ raise ImportError ("ipfs_accelerate_py not available" )
193+ self .compute_layer = cls ()
172194 logger .info ("Arrow Metadata Index compute layer enabled" )
173195 except Exception as e :
174196 logger .warning (f"Failed to initialize compute layer: { e } " )
0 commit comments