Spaces:
Sleeping
Sleeping
from typing import List | |
from langchain.agents.react.base import DocstoreExplorer | |
from langchain.docstore.base import Docstore | |
# Rewrite Docstore lookup to match original implementation from author. | |
class CustomDocstoreExplorer(DocstoreExplorer): | |
def __init__(self, docstore: Docstore): | |
super().__init__(docstore) | |
self.lookup_str = "" | |
self.lookup_index = 0 | |
def lookup(self, term: str) -> str: | |
"""Lookup a term in document (if saved).""" | |
if self.document is None: | |
raise ValueError("Cannot lookup without a successful search first") | |
if term.lower() != self.lookup_str: | |
self.lookup_str = term.lower() | |
self.lookup_index = 0 | |
else: | |
self.lookup_index += 1 | |
lookups = [p for p in self._sentence if self.lookup_str in p.lower()] | |
if len(lookups) == 0: | |
return "No Results" | |
elif self.lookup_index >= len(lookups): | |
return "No More Results" | |
else: | |
result_prefix = f"(Result {self.lookup_index + 1}/{len(lookups)})" | |
return f"{result_prefix} {lookups[self.lookup_index]}" | |
def _sentence(self) -> List[str]: | |
if self.document is None: | |
raise ValueError("Cannot get paragraphs without a document") | |
return self.document.page_content.split(".") | |