MohamedMotaz's picture
exam app
e1087b2
raw
history blame contribute delete
No virus
3.53 kB
import streamlit as st
from phi.assistant import Assistant
from phi.document.reader.pdf import PDFReader
from phi.utils.log import logger
from assistant import get_groq_assistant
import io
import os
# environment variables
os.environ['GROQ_API_KEY'] = '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'
st.set_page_config(
page_title="Test Corrector Model"
)
st.title("Test Corrector Model")
st.markdown("##### Upload Model Answer and Student Answer PDFs to get the grades")
def restart_assistant():
st.session_state["assistant"] = None
st.session_state["assistant_run_id"] = None
st.rerun()
def main():
# Get LLM model
llm_model = st.sidebar.selectbox("Select LLM", options=["llama3-70b-8192", "llama3-8b-8192", "mixtral-8x7b-32768"])
embeddings_model = st.sidebar.selectbox("Select Embeddings", options=["nomic-embed-text", "text-embedding-3-small"])
if "llm_model" not in st.session_state:
st.session_state["llm_model"] = llm_model
elif st.session_state["llm_model"] != llm_model:
st.session_state["llm_model"] = llm_model
restart_assistant()
if "embeddings_model" not in st.session_state:
st.session_state["embeddings_model"] = embeddings_model
elif st.session_state["embeddings_model"] != embeddings_model:
st.session_state["embeddings_model"] = embeddings_model
restart_assistant()
#type annotation in Python. It indicates that the variable assistant is expected to be an instance of the Assistant class.
assistant: Assistant
if "assistant" not in st.session_state or st.session_state["assistant"] is None:
logger.info(f"---*--- Creating {llm_model} Assistant ---*---")
assistant = get_groq_assistant(llm_model=llm_model, embeddings_model=embeddings_model)
st.session_state["assistant"] = assistant
else:
assistant = st.session_state["assistant"]
try:
st.session_state["assistant_run_id"] = assistant.create_run()
except Exception:
st.warning("Could not create assistant, is the database running?")
return
# Upload model answer PDF
model_answer_pdf = st.file_uploader("Upload Model Answer PDF", type="pdf")
model_answers = []
if model_answer_pdf:
reader = PDFReader()
model_documents = reader.read(io.BytesIO(model_answer_pdf.read()))
model_answers = [doc.content for doc in model_documents]
# Upload student answer PDF
student_answer_pdf = st.file_uploader("Upload Student Answer PDF", type="pdf")
student_answers = []
if student_answer_pdf:
reader = PDFReader()
student_documents = reader.read(io.BytesIO(student_answer_pdf.read()))
student_answers = [doc.content for doc in student_documents]
# Grade answers
if st.button("Grade Answers"):
if model_answers and student_answers:
grades = []
# for model_answer, student_answer in zip(model_answers, student_answers):
prompt = f"Grade the following student answer based on the model answer:\n\nModel Answer: {[doc.content for doc in model_documents]}\n\nStudent Answer: {[doc.content for doc in student_documents]}"
response_generator = assistant.run(prompt)
response = ''.join(list(response_generator))
grades.append(response)
for i, grade in enumerate(grades, 1):
st.write(f"{grade}")
else:
st.warning("Please upload both Model Answer PDF and Student Answer PDF")
main()