Spaces:
Sleeping
Sleeping
# Knowledge retrieval tool using BM25 | |
from langchain_community.retrievers import BM25Retriever | |
from smolagents import Tool | |
class GaiaRetrieverTool(Tool): | |
name = "gaia_retriever" | |
description = "Semantic search for retrieving relevant information for GaiaAgent." | |
inputs = { | |
"query": { | |
"type": "string", | |
"description": "Query for semantic search." | |
} | |
} | |
output_type = "string" | |
def __init__(self, docs, **kwargs): | |
super().__init__(**kwargs) | |
self.retriever = BM25Retriever.from_documents(docs, k=3) | |
self.docs = docs # Store docs for fallback | |
def forward(self, query: str) -> str: | |
assert isinstance(query, str), "Query must be a string." | |
try: | |
docs = self.retriever.invoke(query) | |
if not docs: | |
return "\nNo specific information found. Here's some general knowledge:\n" + "".join([ | |
f"\n- {self.docs[i].page_content}" for i in range(min(3, len(self.docs))) | |
]) | |
return "\nRetrieved Information:\n" + "".join([ | |
f"\n- {doc.page_content}" for doc in docs | |
]) | |
except Exception as e: | |
print(f"Error in retriever: {str(e)}") | |
return f"Unable to retrieve specific information. The agent will rely on its general knowledge." | |