diff --git a/backend/app/database/falkor/code-graph-backend/api/graph.py b/backend/app/database/falkor/code-graph-backend/api/graph.py index 7c91405b..6b112c9a 100644 --- a/backend/app/database/falkor/code-graph-backend/api/graph.py +++ b/backend/app/database/falkor/code-graph-backend/api/graph.py @@ -8,6 +8,7 @@ import logging logging.basicConfig(level=logging.DEBUG, format='%(filename)s - %(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) def graph_exists(name: str): db = FalkorDB(host=os.getenv('FALKORDB_HOST', 'localhost'), @@ -53,13 +54,19 @@ def __init__(self, name: str) -> None: try: self.g.create_node_range_index("File", "name", "ext") except Exception: - pass + logger.exception( + "Failed to create node range index for File(name, ext)" + ) + # index Function using full-text search try: self.g.create_node_fulltext_index("Searchable", "name") except Exception: - pass + logger.exception( + "Failed to create fulltext index for Searchable(name)" + ) + def clone(self, clone: str) -> "Graph": """ diff --git a/backend/app/services/embedding_service/service.py b/backend/app/services/embedding_service/service.py index 4527c4f9..98a59c68 100644 --- a/backend/app/services/embedding_service/service.py +++ b/backend/app/services/embedding_service/service.py @@ -1,3 +1,4 @@ +import asyncio import logging import config from typing import List, Dict, Any, Optional @@ -66,6 +67,10 @@ def llm(self) -> ChatGoogleGenerativeAI: raise return self._llm + + def _encode_sync(self, *args, **kwargs): + return self.model.encode(*args, **kwargs) + async def get_embedding(self, text: str) -> List[float]: """Generate embedding for a single text input""" try: @@ -74,12 +79,14 @@ async def get_embedding(self, text: str) -> List[float]: text = [text] # Generate embeddings - embeddings = self.model.encode( + embeddings = await asyncio.to_thread( + self._encode_sync, text, convert_to_tensor=True, show_progress_bar=False ) + # Convert to standard Python list and return embedding_list = embeddings[0].cpu().tolist() logger.debug(f"Generated embedding with dimension: {len(embedding_list)}") @@ -92,13 +99,15 @@ async def get_embeddings(self, texts: List[str]) -> List[List[float]]: """Generate embeddings for multiple text inputs in batches""" try: # Generate embeddings - embeddings = self.model.encode( + embeddings = await asyncio.to_thread( + self._encode_sync, texts, convert_to_tensor=True, batch_size=MAX_BATCH_SIZE, show_progress_bar=len(texts) > 10 ) + # Convert to standard Python list embedding_list = embeddings.cpu().tolist() logger.info(f"Generated {len(embedding_list)} embeddings")