MefhigosetH commited on
Commit
e742fa6
1 Parent(s): 956feb2

Hacemos refactor de ingest.py

Browse files
Files changed (3) hide show
  1. app.py +1 -2
  2. chatbot/llm.py +7 -11
  3. ingest.py +43 -11
app.py CHANGED
@@ -7,8 +7,7 @@ from langchain.globals import set_verbose, set_debug
7
 
8
 
9
  def respond(message, history):
10
- prompt = llm.getMainTemplate()
11
- chain = prompt | llm.llm
12
  response = chain.invoke({"message": message, "history": history})
13
  return response.content
14
 
 
7
 
8
 
9
  def respond(message, history):
10
+ chain = llm.main_prompt | llm.llm
 
11
  response = chain.invoke({"message": message, "history": history})
12
  return response.content
13
 
chatbot/llm.py CHANGED
@@ -8,26 +8,22 @@ class GeminiAI:
8
  Google Gemini AI class.
9
  """
10
 
 
 
 
 
 
11
  def __init__(self, llm_model_name: str) -> None:
12
  self.llm = ChatGoogleGenerativeAI(model=llm_model_name)
13
 
14
- def getMainTemplate(self) -> ChatPromptTemplate:
15
- """
16
- Devuelve el system prompt principal.
17
- """
18
-
19
- prompt = ChatPromptTemplate.from_messages(
20
  [
21
- ("system",
22
- "Eres un asesor experto en la Resolucion 1650/24 de la DGCyE de la Provincia de Buenos Aires.\n"
23
- "Tu tarea es utiliza la informaci贸n de la conversaci贸n y el contexto disponible para responder las consultas del usuario.\n"),
24
  ("placeholder", "{history}"),
25
  ("human", "{message}"),
26
  ]
27
  )
28
 
29
- return prompt
30
-
31
 
32
 
33
  if __name__ == "__main__":
 
8
  Google Gemini AI class.
9
  """
10
 
11
+ system_prompt = """
12
+ Eres un asesor experto en la Resolucion 1650/24 de la DGCyE de la Provincia de Buenos Aires.\n
13
+ Tu tarea es utiliza la informaci贸n de la conversaci贸n y el contexto disponible para responder las consultas del usuario.
14
+ """
15
+
16
  def __init__(self, llm_model_name: str) -> None:
17
  self.llm = ChatGoogleGenerativeAI(model=llm_model_name)
18
 
19
+ self.main_prompt = ChatPromptTemplate.from_messages(
 
 
 
 
 
20
  [
21
+ ("system",self.system_prompt),
 
 
22
  ("placeholder", "{history}"),
23
  ("human", "{message}"),
24
  ]
25
  )
26
 
 
 
27
 
28
 
29
  if __name__ == "__main__":
ingest.py CHANGED
@@ -3,23 +3,55 @@ Modulo para procesar el PDF de la resolucion e indexar su contenido en la DB, pa
3
 
4
  Por simplicidad, se indexo un documento por cada p谩gina completa del documento. TODO: Implementar estrategia ParentDocumentRetriever.
5
  """
6
- #from langchain_community.document_loaders import PyPDFLoader
7
  from chatbot.embeddings import init_embeddings
8
  from chatbot.vectorstore import ChromaDB
 
 
9
 
10
- if __name__ == "__main__":
11
- #loader = PyPDFLoader("2024_DP_134.pdf")
 
 
12
  embedding_model = init_embeddings()
 
 
 
 
 
 
 
13
 
 
 
 
 
 
 
14
  vector_store = ChromaDB(embedding_model)
15
 
16
- #for page in loader.lazy_load():
17
- #print(f"Procesando pagina {page.metadata['page']} - len: {len(page.page_content)}")
18
- #vector_store.add_documents([page])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
- results = vector_store.db.similarity_search(
21
- "Cuantos anexos contiene la resolucion?",
22
- k=2,
23
- )
24
 
25
- print(results)
 
3
 
4
  Por simplicidad, se indexo un documento por cada p谩gina completa del documento. TODO: Implementar estrategia ParentDocumentRetriever.
5
  """
6
+ from langchain_community.document_loaders import PyPDFLoader
7
  from chatbot.embeddings import init_embeddings
8
  from chatbot.vectorstore import ChromaDB
9
+ from typing import List
10
+ import sys, argparse
11
 
12
+
13
+
14
+ def query(consulta: str) -> List:
15
+ """ Realiza una consulta a la vectorstore. """
16
  embedding_model = init_embeddings()
17
+ vector_store = ChromaDB(embedding_model)
18
+ docs = vector_store.db.similarity_search(
19
+ consulta,
20
+ k=2,
21
+ )
22
+
23
+ return docs
24
 
25
+
26
+
27
+ def ingest(filename: str) -> None:
28
+ """ Ingiere un archivo PDF y lo indexa en la vectorstore. """
29
+ loader = PyPDFLoader(filename)
30
+ embedding_model = init_embeddings()
31
  vector_store = ChromaDB(embedding_model)
32
 
33
+ for page in loader.lazy_load():
34
+ print(f"Procesando pagina {page.metadata['page']} - len: {len(page.page_content)}")
35
+ vector_store.add_documents([page])
36
+
37
+
38
+
39
+ if __name__ == "__main__":
40
+ parser = argparse.ArgumentParser(description='Este script permite interactuar con la vectorstore.')
41
+ parser.add_argument('operacion',
42
+ type=str,
43
+ choices=["ingest", "query"],
44
+ help="La operaci贸n que se desea realizar sobre la DB. 'ingest' para agregar un PDF a la DB. 'query' para hacer una consulta.")
45
+ parser.add_argument("argumento", help="Nombre del archivo a ingerir o consulta a realizar.")
46
+ args = parser.parse_args()
47
+
48
+ if args.operacion == 'ingest':
49
+ ingest(args.argumento)
50
+ print("Listo.")
51
+
52
+ elif args.operacion == 'query':
53
+ docs = query(args.argumento)
54
+ print(docs)
55
 
56
+ sys.exit(0)
 
 
 
57