MefhigosetH's picture
Hacemos refactor de ingest.py
e742fa6
"""
Modulo para procesar el PDF de la resolucion e indexar su contenido en la DB, para su posterior utilizaci贸n por parte del chatbot.
Por simplicidad, se indexo un documento por cada p谩gina completa del documento. TODO: Implementar estrategia ParentDocumentRetriever.
"""
from langchain_community.document_loaders import PyPDFLoader
from chatbot.embeddings import init_embeddings
from chatbot.vectorstore import ChromaDB
from typing import List
import sys, argparse
def query(consulta: str) -> List:
""" Realiza una consulta a la vectorstore. """
embedding_model = init_embeddings()
vector_store = ChromaDB(embedding_model)
docs = vector_store.db.similarity_search(
consulta,
k=2,
)
return docs
def ingest(filename: str) -> None:
""" Ingiere un archivo PDF y lo indexa en la vectorstore. """
loader = PyPDFLoader(filename)
embedding_model = init_embeddings()
vector_store = ChromaDB(embedding_model)
for page in loader.lazy_load():
print(f"Procesando pagina {page.metadata['page']} - len: {len(page.page_content)}")
vector_store.add_documents([page])
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Este script permite interactuar con la vectorstore.')
parser.add_argument('operacion',
type=str,
choices=["ingest", "query"],
help="La operaci贸n que se desea realizar sobre la DB. 'ingest' para agregar un PDF a la DB. 'query' para hacer una consulta.")
parser.add_argument("argumento", help="Nombre del archivo a ingerir o consulta a realizar.")
args = parser.parse_args()
if args.operacion == 'ingest':
ingest(args.argumento)
print("Listo.")
elif args.operacion == 'query':
docs = query(args.argumento)
print(docs)
sys.exit(0)