def _get_context()

in agora/cerebral_api/src/app.py [0:0]


    def _get_context(self, query: str) -> str:
        """Get relevant context from vector store with enhanced logging."""
        try:
            if VERBOSE:
                logger.debug(f"Searching for context with query: '{query}'")
                collection_info = self.vectorstore._collection.count()
                logger.debug(f"Total documents in collection: {collection_info}")

            # Try direct similarity search first
            documents = self.vectorstore.similarity_search_with_relevance_scores(
                query,
                k=3
            )
            
            if VERBOSE:
                logger.debug(f"Found {len(documents)} documents")
                for doc, score in documents:
                    logger.debug(f"Document score: {score}")
                    logger.debug(f"Document source: {doc.metadata.get('source', 'Unknown')}")
                    logger.debug(f"Content preview: {doc.page_content[:100]}...")

            if not documents:
                logger.warning("No documents found in similarity search")
                return "No relevant context found."
            
            # Format context with relevance information
            contexts = []
            for doc, score in documents:
                if score > 0.3:  # Filtrar por relevancia
                    source = os.path.basename(doc.metadata.get('source', 'Unknown source'))
                    context_text = (
                        f"[Relevance: {score:.2f}] From {source}:\n"
                        f"{doc.page_content.strip()}"
                    )
                    contexts.append(context_text)
                    
                    if VERBOSE:
                        logger.debug(f"Added context from {source} with score {score:.2f}")

            if not contexts:
                logger.warning("No contexts passed relevance threshold")
                return "No sufficiently relevant context found."

            final_context = "\n\n".join(contexts)
            
            if VERBOSE:
                logger.debug(f"Final context length: {len(final_context)} characters")
                logger.debug(f"Context preview: {final_context[:200]}...")
                
            return final_context
                
        except Exception as e:
            logger.error(f"Error retrieving context: {str(e)}")
            if VERBOSE:
                import traceback
                logger.debug(f"Full error traceback:")
                logger.debug(traceback.format_exc())
            return "Error retrieving context from the knowledge base."