Spaces:
Sleeping
Sleeping
MefhigosetH
commited on
Commit
路
e742fa6
1
Parent(s):
956feb2
Hacemos refactor de ingest.py
Browse files- app.py +1 -2
- chatbot/llm.py +7 -11
- 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 |
-
|
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 |
-
|
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 |
-
|
7 |
from chatbot.embeddings import init_embeddings
|
8 |
from chatbot.vectorstore import ChromaDB
|
|
|
|
|
9 |
|
10 |
-
|
11 |
-
|
|
|
|
|
12 |
embedding_model = init_embeddings()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
vector_store = ChromaDB(embedding_model)
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
-
|
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 |
|
|