|
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_community.vectorstores import FAISS |
|
from langchain_groq import ChatGroq |
|
|
|
from langchain.chains.question_answering import load_qa_chain |
|
from langchain.chains import RetrievalQA |
|
|
|
st.set_page_config('Opositor') |
|
st.header("Pregunta al trebep") |
|
|
|
|
|
os.environ["GROQ_API_KEY"] = "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" |
|
model = 'llama3-8b-8192' |
|
llm = ChatGroq(model = model) |
|
|
|
|
|
model_name = 'intfloat/multilingual-e5-small' |
|
embedding = HuggingFaceEmbeddings(model_name=model_name) |
|
|
|
|
|
index_name = "boe-intfloat-multilingual-e5-base" |
|
namespace = "trebep" |
|
vectorstore = PineconeVectorStore(index_name=index_name, namespace=names, embedding=embedding) |
|
|
|
|
|
qa = RetrievalQA.from_chain_type( |
|
llm=llm, |
|
chain_type="stuff", |
|
retriever=vectorstore.as_retriever(), |
|
|
|
|
|
) |
|
|
|
|
|
def mostrar_logs(logs,hints): |
|
|
|
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']}") |
|
|
|
|
|
|
|
logs = [] |
|
|
|
if pdf_obj: |
|
user_question = st.text_input("¡A jugar! Haz una pregunta sobre tu PDF:") |
|
if user_question: |
|
|
|
|
|
respuesta = qa.invoke(user_question) |
|
|
|
|
|
st.subheader("Respuesta") |
|
st.write(f":green[{str(respuesta)}]") |
|
|
|
|
|
logs.append({"Pregunta": user_question, "Respuesta": respuesta}) |
|
|
|
|
|
mostrar_logs(logs,docs) |
|
|