Waflon commited on
Commit
65bf80e
1 Parent(s): 5a04c29

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -58
app.py CHANGED
@@ -3,8 +3,6 @@ import getpass
3
  import os
4
 
5
  os.environ["OPENAI_API_KEY"] = st.secrets['OPENAI_API_KEY'] # agregada en la config de hugginface
6
- os.environ["LANGCHAIN_TRACING_V2"] = "true"
7
- os.environ["LANGCHAIN_API_KEY"] = st.secrets['OPENAI_API_KEY']
8
 
9
  from langchain.prompts import PromptTemplate
10
  from langchain.chains.llm import LLMChain
@@ -16,19 +14,15 @@ from langchain_community.vectorstores import FAISS
16
  from langchain_community.document_loaders import HuggingFaceDatasetLoader
17
  from langchain_community.embeddings import HuggingFaceEmbeddings
18
 
19
- # Initialization
20
- if 'chain' not in st.session_state:
21
- st.session_state['chain'] = 'dummy'
22
-
23
- def get_data():
24
- return st.session_state["chain"]
25
-
26
-
27
- def add_data(chain):
28
- st.session_state["chain"]= chain
29
-
30
- chain = get_data()
31
- if chain == 'dummy':
32
  #Carga de DATASET
33
  dataset_name = "Waflon/FAQ"
34
  page_content_column = "respuestas"
@@ -38,52 +32,40 @@ if chain == 'dummy':
38
  #Transformado a tipo de dato especifico para esto
39
  docs = text_splitter.split_documents(data)
40
 
41
- #Modelo QA sentence similarity
42
- modelPath = 'sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2' #español
43
- model_kwargs = {'device':'cpu'} # cuda or cpu
44
- encode_kwargs = {'normalize_embeddings': False}
45
-
46
- #Embeddings que transforman a vectores densos multidimensionales las preguntas del SII
47
- embeddings = HuggingFaceEmbeddings(
48
- model_name=modelPath, # Ruta a modelo Pre entrenado
49
- model_kwargs=model_kwargs, # Opciones de configuracion del modelo
50
- encode_kwargs=encode_kwargs # Opciones de Encoding
51
- )
52
-
53
  #DB y retriever
54
  db = 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.
55
- retriever = db.as_retriever(search_kwargs={"k": 3})
56
 
57
- prompt_template = """Usa los siguientes fragmentos de contextos para responder una pregunta al final. Por favor sigue las siguientes reglas:
58
- 1. Si la pregunta requiere vinculos, por favor retornar solamente las vinculos de los vinculos sin respuesta
59
- 2. Si no sabes la respuesta, no inventes una respuesta. Solamente di **No pude encontrar la respuesta definitiva, pero tal vez quieras ver los siguientes vinculos** y agregalos a la lista de vinculos.
60
- 3. Si encuentras la respuesta, escribe una respuesta concisa y agrega la lista de vinculos que sean usadas **directamente** para derivar la respuesta. Excluye los vinculos que sean irrelevantes al final de la respuesta
61
-
62
- {contexto}
63
-
64
- Pregunta: {question}
65
- Respuesta Util:"""
66
-
67
-
68
- QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt_template) # prompt_template defined above
69
- llm_chain = LLMChain(llm=ChatOpenAI(), prompt=QA_CHAIN_PROMPT, callbacks=None, verbose=True)
70
- document_prompt = PromptTemplate(
71
- input_variables=["page_content", "url"],
72
- template="Contexto:\n{page_content}\nVinculo: {url}",
73
- )
74
- combine_documents_chain = StuffDocumentsChain(
75
- llm_chain=llm_chain,
76
- document_variable_name="contexto",
77
- document_prompt=document_prompt,
78
- callbacks=None,
79
- )
80
- chain = RetrievalQA(
81
- combine_documents_chain=combine_documents_chain,
82
- callbacks=None,
83
- verbose=True,
84
- retriever=retriever,
85
- )
86
- add_data(chain)
 
87
 
88
  pregunta = st.text_area('Ingresa algun texto:', value="Que es un APA?")
89
  tmp_button = st.button("CLICK")
 
3
  import os
4
 
5
  os.environ["OPENAI_API_KEY"] = st.secrets['OPENAI_API_KEY'] # agregada en la config de hugginface
 
 
6
 
7
  from langchain.prompts import PromptTemplate
8
  from langchain.chains.llm import LLMChain
 
14
  from langchain_community.document_loaders import HuggingFaceDatasetLoader
15
  from langchain_community.embeddings import HuggingFaceEmbeddings
16
 
17
+ #Embeddings que transforman a vectores densos multidimensionales las preguntas del SII
18
+ embeddings = HuggingFaceEmbeddings(
19
+ model_name=sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, # Ruta a modelo Pre entrenado
20
+ model_kwargs={'device':'cpu'}, # Opciones de configuracion del modelo
21
+ encode_kwargs={'normalize_embeddings': False} # Opciones de Encoding
22
+ )
23
+ try:
24
+ db = FAISS.load_local("cache", embeddings)
25
+ except:
 
 
 
 
26
  #Carga de DATASET
27
  dataset_name = "Waflon/FAQ"
28
  page_content_column = "respuestas"
 
32
  #Transformado a tipo de dato especifico para esto
33
  docs = text_splitter.split_documents(data)
34
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  #DB y retriever
36
  db = 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.
 
37
 
38
+ retriever = db.as_retriever(search_kwargs={"k": 3})
39
+
40
+ prompt_template = """Usa los siguientes fragmentos de contextos para responder una pregunta al final. Por favor sigue las siguientes reglas:
41
+ 1. Si la pregunta requiere vinculos, por favor retornar solamente las vinculos de los vinculos sin respuesta
42
+ 2. Si no sabes la respuesta, no inventes una respuesta. Solamente di **No pude encontrar la respuesta definitiva, pero tal vez quieras ver los siguientes vinculos** y agregalos a la lista de vinculos.
43
+ 3. Si encuentras la respuesta, escribe una respuesta concisa y agrega la lista de vinculos que sean usadas **directamente** para derivar la respuesta. Excluye los vinculos que sean irrelevantes al final de la respuesta
44
+
45
+ {contexto}
46
+
47
+ Pregunta: {question}
48
+ Respuesta Util:"""
49
+
50
+
51
+ QA_CHAIN_PROMPT = PromptTemplate.from_template(prompt_template) # prompt_template defined above
52
+ llm_chain = LLMChain(llm=ChatOpenAI(), prompt=QA_CHAIN_PROMPT, callbacks=None, verbose=True)
53
+ document_prompt = PromptTemplate(
54
+ input_variables=["page_content", "url"],
55
+ template="Contexto:\n{page_content}\nVinculo: {url}",
56
+ )
57
+ combine_documents_chain = StuffDocumentsChain(
58
+ llm_chain=llm_chain,
59
+ document_variable_name="contexto",
60
+ document_prompt=document_prompt,
61
+ callbacks=None,
62
+ )
63
+ chain = RetrievalQA(
64
+ combine_documents_chain=combine_documents_chain,
65
+ callbacks=None,
66
+ verbose=True,
67
+ retriever=retriever,
68
+ )
69
 
70
  pregunta = st.text_area('Ingresa algun texto:', value="Que es un APA?")
71
  tmp_button = st.button("CLICK")