diff --git a/backend/app/services/embedding_service/service.py b/backend/app/services/embedding_service/service.py index 4527c4f9..3fb144f8 100644 --- a/backend/app/services/embedding_service/service.py +++ b/backend/app/services/embedding_service/service.py @@ -34,20 +34,54 @@ def __init__(self, model_name: str = MODEL_NAME, device: str = EMBEDDING_DEVICE) self.device = device self._model = None self._llm = None + self._model_loading = False + self._model_access_count = 0 logger.info(f"Initializing EmbeddingService with model: {model_name} on device: {device}") @property def model(self) -> SentenceTransformer: + ## track how often model is accessed + self._model_access_count+=1 + logger.debug( + f"EmbeddingService.model accessed " + f"(access count={self._model_access_count}, " + f"model_loaded={self._model is not None})" + ) + """Lazy-load embedding model to avoid loading during import""" if self._model is None: + # Detect concurrent initialization attempts (observability only) + if self._model_loading: + logger.warning( + "Concurrent access detected while embedding model is initializing. " + "This may indicate a race condition." + ) + + self._model_loading = True try: - logger.info(f"Loading embedding model: {self.model_name}") + logger.info( + f"No cached embedding model found. " + f"Initializing model '{self.model_name}' on device '{self.device}'." + ) self._model = SentenceTransformer(self.model_name, device=self.device) + logger.info( - f"Model loaded successfully. Embedding dimension: {self._model.get_sentence_embedding_dimension()}") + f"Embedding model initialized successfully. " + f"Embedding dimension: {self._model.get_sentence_embedding_dimension()}" + ) except Exception as e: - logger.error(f"Error loading model {self.model_name}: {str(e)}") + logger.error(f"Error loading model {self.model_name}: {str(e)}", + exc_info=True + ) raise + finally: + self._model_loading = False + else: + # Explicit reuse log (this was missing earlier) + logger.debug( + "Reusing existing embedding model instance from cache." + ) + return self._model @property