segoedu commited on
Commit
7a1fb03
·
verified ·
1 Parent(s): 0331887

Create app.v0.py

Browse files
Files changed (1) hide show
  1. app.v0.py +93 -0
app.v0.py ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Esta es la primera versión de la aplicación
2
+ # Era de mis primeros escarceos RAG, LLM vía api, etc.
3
+ # Me hace ilu tenerla
4
+
5
+ import streamlit as st
6
+ import os
7
+ from groq import Groq
8
+ from datetime import datetime
9
+ from langchain_community.embeddings import HuggingFaceEmbeddings
10
+ from langchain_groq import ChatGroq
11
+ from langchain.chains import RetrievalQA
12
+ from langchain_pinecone import PineconeVectorStore
13
+
14
+
15
+ st.set_page_config('Opositor')
16
+ st.header("Pregunta al trebep")
17
+
18
+ modelos_llm = [
19
+ 'llama3-70b-8192',
20
+ 'llama3-8b-8192',
21
+ 'mixtral-8x7b-32768',
22
+ 'gemma-7b-it'
23
+ ]
24
+
25
+ modelo_llm = st.selectbox('Modelo de lenguaje', list(modelos_llm))
26
+
27
+
28
+ @st.cache_resource
29
+ def setup(modelo_llm):
30
+ # Langsmith
31
+ os.environ["LANGCHAIN_TRACING_V2"] = "true"
32
+ os.environ["LANGCHAIN_API_KEY"] = "TU_LANGCHAIN_API_KEY"
33
+ os.environ["LANGCHAIN_PROJECT"] = "trebep"
34
+
35
+ # CARGAMOS MODELO DE EMBEDDING
36
+ model_name = 'intfloat/multilingual-e5-base'
37
+ embedding = HuggingFaceEmbeddings(model_name=model_name)
38
+
39
+ # CARGAMOS LLM
40
+ os.environ["GROQ_API_KEY"] = "TU_GROQ_API_KEY"
41
+ llm = ChatGroq(model=modelo_llm)
42
+
43
+ # CARGAMOS EL VECTORSTORE DE PINECONE
44
+ os.environ["PINECONE_API_KEY"] = 'TU_PINECONE_API_KEY'
45
+ index_name = "boe-intfloat-multilingual-e5-base"
46
+ namespace = "trebep"
47
+ vectorstore = PineconeVectorStore(
48
+ index_name=index_name,
49
+ namespace=namespace,
50
+ embedding=embedding
51
+ )
52
+
53
+ # CREAMOS EL RETRIEVAL
54
+ qa = RetrievalQA.from_chain_type(
55
+ llm=llm,
56
+ chain_type="stuff",
57
+ retriever=vectorstore.as_retriever(),
58
+ return_source_documents=True,
59
+ # verbose=True
60
+ )
61
+
62
+ return qa
63
+
64
+
65
+ def mostrar_logs(logs, hints):
66
+ with st.expander("Chunks"):
67
+ for hint in hints:
68
+ st.write(hint.page_content)
69
+ st.write("-" * 30)
70
+
71
+ st.sidebar.header("Registro de preguntas")
72
+ for entry in logs:
73
+ st.sidebar.write(f"**Pregunta: {entry['Pregunta']}**")
74
+ st.sidebar.write(f"Respuesta: {entry['Respuesta']}")
75
+
76
+
77
+ logs = []
78
+ user_question = st.text_input("¡A jugar! Haz una pregunta al trebep:")
79
+
80
+ if user_question:
81
+ qa = setup(modelo_llm)
82
+
83
+ respuesta = qa.invoke(user_question)
84
+ docs = respuesta['source_documents']
85
+
86
+ result = respuesta['result'].strip("[]")
87
+
88
+ st.subheader("Respuesta")
89
+ st.write(f":green[{str(result)}]")
90
+
91
+ logs.append({"Pregunta": user_question, "Respuesta": result})
92
+
93
+ mostrar_logs(logs, docs)