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."