File size: 2,708 Bytes
7d95e47 753dfe9 7d95e47 3e45644 6aa8fed 3e45644 fe30128 3e45644 aa3c0ec 7d95e47 34af858 7d95e47 5c45ef1 7d95e47 dc80305 ce8a1c0 7d95e47 9c8bb20 3e45644 9c8bb20 ce8a1c0 34af858 5c45ef1 795f3cf 5c45ef1 7d95e47 ce8a1c0 34af858 7d95e47 ce8a1c0 34af858 7d95e47 ce8a1c0 34af858 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import streamlit as st
import os
from groq import Groq
from datetime import datetime
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_groq import ChatGroq
from langchain.chains import RetrievalQA
from langchain_pinecone import PineconeVectorStore
st.set_page_config('Opositor')
st.header("Pregunta al trebep")
modelos_llm = [
'llama3-70b-8192',
'llama3-8b-8192',
'mixtral-8x7b-32768',
'gemma-7b-it'
]
modelo_llm = st.selectbox('Modelo de lenguaje', list(modelos_llm))
@st.cache_resource
def setup(modelo_llm):
# Langsmith
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "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"
os.environ["LANGCHAIN_PROJECT"] = "trebep"
# CARGAMOS MODELO DE EMBEDDING
model_name = 'intfloat/multilingual-e5-base'
embedding = HuggingFaceEmbeddings(model_name=model_name)
# CARGAMOS LLM
os.environ["GROQ_API_KEY"] = "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"
llm = ChatGroq(model = modelo_llm)
# CARGAMOS EL VECTORSTORE DE PINECONE
os.environ["PINECONE_API_KEY"] ='4bf0b4cf-4ced-4f70-8977-d60bb8ae405a'
index_name = "boe-intfloat-multilingual-e5-base"
namespace = "trebep"
vectorstore = PineconeVectorStore(index_name=index_name, namespace=namespace, embedding=embedding)
# CREAMOS EL RETRIEVAL
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(),
return_source_documents=True,
#verbose=True
)
return qa
# Función para mostrar logs
def mostrar_logs(logs,hints):
# Crear un contenedor desplegable
with st.expander("Chunks"):
for hint in hints:
st.write(hint.page_content)
st.write("-" * 30)
st.sidebar.header("Registro de preguntas")
for entry in logs:
st.sidebar.write(f"**Pregunta: {entry['Pregunta']}**")
st.sidebar.write(f"Respuesta: {entry['Respuesta']}")
# Lista para almacenar preguntas y respuestas
logs = []
user_question = st.text_input("¡A jugar! Haz una pregunta al trebep:")
if user_question:
# Inicializar entorno
qa = setup(modelo_llm)
# Obtenemos la respuesta
respuesta = qa.invoke(user_question)
docs = respuesta['source_documents']
#result = respuesta['result']
result = respuesta['result'].strip("[]")
# Mostrar la variable en color verde
st.subheader("Respuesta")
st.write(f":green[{str(result)}]")
# Guardar pregunta y respuesta en los logs
logs.append({"Pregunta": user_question, "Respuesta": result})
# Mostrar logs actualizados
mostrar_logs(logs,docs)
|