Waflon commited on
Commit
dd5110c
·
verified ·
1 Parent(s): 3a2df8b

Update modelo.py

Browse files
Files changed (1) hide show
  1. modelo.py +12 -97
modelo.py CHANGED
@@ -13,6 +13,8 @@ from langchain.chains import RetrievalQA
13
  from langchain_openai import ChatOpenAI
14
  from typing import List
15
  import pandas as pd
 
 
16
 
17
  embeddings = HuggingFaceEmbeddings(
18
  model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", # Ruta a modelo Pre entrenado
@@ -56,22 +58,20 @@ class Reranking_retriever(BaseRetriever):
56
  docs.append(Document(page_content=df.respuestas[i], metadata=df.metadata[i]))
57
  return docs
58
 
59
- retriever = Reranking_retriever()
60
 
61
- def get_chain():
62
- # prompt_template =
63
- # prompt_template =
64
- QA_CHAIN_PROMPT = PromptTemplate.from_template("""
65
- Usa el siguiente contexto para responder la pregunta.
66
 
67
- Contexto
68
- {contexto}
69
 
70
- Pregunta: {question}
71
- Respuesta Util:"""
72
- ) # prompt_template defined above
73
-
74
 
 
 
75
  llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
76
 
77
  llm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT, callbacks=None, verbose=True)
@@ -82,89 +82,4 @@ def get_chain():
82
 
83
  chain = RetrievalQA(combine_documents_chain=combine_documents_chain, callbacks=None, verbose=True, retriever=retriever)
84
 
85
- return(chain)
86
-
87
-
88
-
89
-
90
- from langchain_core.runnables import RunnablePassthrough
91
- from langchain_core.output_parsers import StrOutputParser
92
- from langchain_community.document_loaders import PyPDFDirectoryLoader
93
- from langchain_core.callbacks import CallbackManagerForRetrieverRun
94
- from langchain.text_splitter import RecursiveCharacterTextSplitter
95
- from langchain_community.embeddings import HuggingFaceEmbeddings
96
- from langchain_core.retrievers import BaseRetriever
97
- from langchain_community.vectorstores import FAISS #Facebook AI Similarity Search
98
- from sentence_transformers import CrossEncoder
99
- from langchain_core.documents import Document
100
- from langchain.prompts import ChatPromptTemplate
101
- from langchain_openai import ChatOpenAI
102
- from typing import List
103
- import pandas as pd
104
-
105
- embeddings = HuggingFaceEmbeddings(
106
- model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", # Ruta a modelo Pre entrenado
107
- model_kwargs={'device':'cpu'}, # Opciones de configuracion del modelo
108
- encode_kwargs={'normalize_embeddings': False}) # Opciones de Encoding
109
-
110
- try:
111
- vectorstore = FAISS.load_local("cache", embeddings)
112
- except:
113
- loader = PyPDFDirectoryLoader("data/")
114
- data = loader.load()
115
-
116
- text_splitter = RecursiveCharacterTextSplitter(chunk_size=450, chunk_overlap=100, length_function=len)
117
- docs = text_splitter.split_documents(data)
118
-
119
- #DB y retriever
120
- vectorstore = FAISS.from_documents(docs, embeddings) # Create a retriever object from the 'db' with a search configuration where it retrieves up to 4 relevant splits/documents.
121
- vectorstore.save_local("cache")
122
-
123
- #Renranker para mejorar respuestas
124
- model = CrossEncoder('cross-encoder/ms-marco-TinyBERT-L-2-v2', max_length=512) #Por lejos el mejor, los otros no sirven
125
- class Reranking_retriever(BaseRetriever):
126
- def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]:
127
- busqueda = vectorstore.similarity_search_with_score(query, k=10, fetch_k=15) # k = 10 numero total de documento a traer previo al re ranking
128
-
129
- df = pd.DataFrame({ # Funciones lambda toman la ultima variable como input y la previa como iteracionm la primera x es que se retornara
130
- 'scores': list(map(lambda x : x[-1], busqueda)),
131
- 'respuestas': list(map(lambda x : x[0].page_content, busqueda)),
132
- 'metadata': list(map(lambda x : x[0].metadata ,busqueda))})
133
-
134
- print(df.scores)
135
- respuestas = df.respuestas.to_list() #lista de respuestas
136
-
137
- sentence_combinations = [[query, respuesta] for respuesta in respuestas] # So we create the respective sentence combinations
138
-
139
- scores = model.predict(sentence_combinations) #Aplica cross encoding para ver que para de q y a tienen mayor relacion, en este caso se manda la pregunta en cada una de ellas y se compara una a una con las respuestas
140
- scores = scores.argsort()[::-1] #Ordena puntajes de mas relevate a menos relevante siendo indice 0 el mas relevante
141
-
142
- docs = []
143
- for i in scores[:3]: #Los 3 resulados mas relevantes
144
- docs.append(Document(page_content=df.respuestas[i], metadata=df.metadata[i]))
145
- return docs
146
-
147
- retriever = Reranking_retriever()
148
-
149
- def get_chain():
150
- template = """
151
- Usa el siguiente contexto para responder la pregunta.
152
-
153
- Contexto
154
- {contexto}
155
-
156
- Pregunta: {pregunta}
157
- Respuesta Util:"""
158
-
159
- prompt = ChatPromptTemplate.from_template(template)
160
-
161
- model = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
162
-
163
- chain = (
164
- {"contexto": retriever, "pregunta": RunnablePassthrough()}
165
- | prompt
166
- | model
167
- | StrOutputParser()
168
- )
169
-
170
  return(chain)
 
13
  from langchain_openai import ChatOpenAI
14
  from typing import List
15
  import pandas as pd
16
+ import os
17
+ os.environ["OPENAI_API_KEY"] = st.secrets("OPENAI_API_KEY")
18
 
19
  embeddings = HuggingFaceEmbeddings(
20
  model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", # Ruta a modelo Pre entrenado
 
58
  docs.append(Document(page_content=df.respuestas[i], metadata=df.metadata[i]))
59
  return docs
60
 
61
+ retriever = Reranking_retriever() #Mi retriever personalizado, de 10 elementos retorna 3 filtrando por un cross encoder
62
 
63
+ QA_CHAIN_PROMPT = PromptTemplate.from_template("""
64
+ Usa el siguiente contexto para responder la pregunta.
 
 
 
65
 
66
+ Contexto
67
+ {contexto}
68
 
69
+ Pregunta: {question}
70
+ Respuesta Util:"""
71
+ )
 
72
 
73
+ def get_chain():
74
+
75
  llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0)
76
 
77
  llm_chain = LLMChain(llm=llm, prompt=QA_CHAIN_PROMPT, callbacks=None, verbose=True)
 
82
 
83
  chain = RetrievalQA(combine_documents_chain=combine_documents_chain, callbacks=None, verbose=True, retriever=retriever)
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  return(chain)