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)