File size: 2,274 Bytes
7d95e47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import os

from groq import Groq
from PyPDF2 import PdfReader
from datetime import datetime
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings 
#from langchain.vectorstores import FAISS
from langchain_community.vectorstores import FAISS
from langchain_groq import ChatGroq
#from langchain.chat_models import ChatOpenAI
from langchain.chains.question_answering import load_qa_chain
from langchain.chains import RetrievalQA

st.set_page_config('Opositor')
st.header("Pregunta al trebep")

# CARGAMOS LLM
os.environ["GROQ_API_KEY"] = "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"
model = 'llama3-8b-8192'
llm = ChatGroq(model = model)

# CARGAMOS MODELO DE EMBEDDING
model_name = 'intfloat/multilingual-e5-small'
embedding = HuggingFaceEmbeddings(model_name=model_name)

# CARGAMOS EL VECTORSTORE DE PINECONE
index_name = "boe-intfloat-multilingual-e5-base"
namespace = "trebep"
vectorstore = PineconeVectorStore(index_name=index_name, namespace=names, 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
)

# 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 = []

if pdf_obj:
    user_question = st.text_input("¡A jugar! Haz una pregunta sobre tu PDF:")
    if user_question:

        # Obtenemos la respuesta
        respuesta = qa.invoke(user_question)

        # Mostrar la variable en color verde
        st.subheader("Respuesta")
        st.write(f":green[{str(respuesta)}]")

        # Guardar pregunta y respuesta en los logs
        logs.append({"Pregunta": user_question, "Respuesta": respuesta})

        # Mostrar logs actualizados
        mostrar_logs(logs,docs)