Spaces:
Sleeping
Sleeping
from dotenv import load_dotenv | |
import os | |
import streamlit as st | |
import openai | |
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Document | |
from sentence_transformers import CrossEncoder | |
import fitz # PyMuPDF library for PDF processing | |
import tempfile | |
load_dotenv() | |
openai.api_key = st.secrets['api_key'] | |
# Create a sidebar | |
st.sidebar.title("Model Configuration") | |
# File uploader moved to the sidebar | |
uploaded_file = st.sidebar.file_uploader("Upload a PDF", type=["pdf"]) | |
# Option menu for model selection | |
model_selection = st.sidebar.selectbox("Model Selection", ["GPT 3.5", "LLama 2"]) | |
# Slider for selecting model temperature | |
model_temperature = st.sidebar.slider("Select model temperature", 0.0, 0.5, 1.0) | |
# Initialize LLM response storage | |
llm_responses = [] | |
# Initialize HHEM model | |
hhem_model = CrossEncoder('vectara/hallucination_evaluation_model') | |
if uploaded_file is not None: | |
# Save the uploaded PDF file to a temporary location | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_pdf: | |
temp_pdf.write(uploaded_file.read()) | |
temp_pdf_path = temp_pdf.name | |
# Open the PDF file using PyMuPDF | |
pdf_document = fitz.open(temp_pdf_path) | |
text = "" | |
for page_number in range(pdf_document.page_count): | |
page = pdf_document[page_number] | |
text += page.get_text() | |
documents = [Document(text=text)] | |
index = VectorStoreIndex.from_documents(documents) | |
query_engine = index.as_query_engine() | |
query = st.text_input("Ask your question") | |
button = st.button("Ask") | |
if button: | |
print(query) | |
response = query_engine.query(query) | |
st.write(response.response) | |
# Record LLM response | |
llm_responses.append(response.response) | |
# Calculate and display HHEM score for each LLM response | |
for i, llm_response in enumerate(llm_responses): | |
score = hhem_model.predict([text, llm_response]) | |
st.sidebar.write(f"Response {i + 1} - HHEM Score: {score}") | |
# Close and remove the temporary PDF file | |
pdf_document.close() | |
os.remove(temp_pdf_path) | |
# Display LLM responses | |
if llm_responses: | |
st.sidebar.markdown("## LLM Responses") | |
for i, llm_response in enumerate(llm_responses): | |
st.sidebar.write(f"Response {i + 1}: {llm_response}") | |