Amelia-James's picture
Update app.py
25ac852 verified
raw
history blame
3.27 kB
import os
from dotenv import load_dotenv
from groq import Groq
import streamlit as st
# Load environment variables
load_dotenv()
# Initialize the Groq client with API key
client = Groq(api_key=os.getenv("GROQ_API_KEY"))
# Function to generate MCQs as a 35-year experienced educator
def generate_mcqs_from_text(user_text):
prompt = f"""
You are a 35-year experienced educator specializing in crafting challenging and insightful MCQs.
Based on the following text, generate between 30 to 50 multiple-choice questions (MCQs).
Each question should:
1. Test critical thinking and understanding of the content.
2. Include four options (A, B, C, D), with one correct answer and three well-designed distractors.
3. Provide clear, concise language and avoid ambiguity.
Format the output as:
Question: [Your question here]
A. [Option 1]
B. [Option 2]
C. [Option 3]
D. [Option 4]
Correct Answer: [Correct Option]
Text: {user_text}
"""
chat_completion = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="gemma2-9b-it", # Use a valid Groq-supported model
)
return chat_completion.choices[0].message.content
# Function to evaluate MCQ answers like an experienced teacher
def evaluate_answers(mcqs, user_answers):
prompt = f"""
You are a 35-year experienced educator evaluating student answers.
The student has completed the following MCQs. Please:
1. Check the correctness of each answer.
2. Provide detailed feedback for each question, explaining why the student's choice is correct or incorrect.
3. Assign an overall score and include advice for improvement.
MCQs: {mcqs}
User Answers: {user_answers}
"""
chat_completion = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="gemma2-9b-it", # Use a valid Groq-supported model
)
return chat_completion.choices[0].message.content
# Streamlit App
st.title("Experienced Educator MCQ Generator & Evaluator")
st.sidebar.header("Input Settings")
# Input text from user
user_text = st.sidebar.text_area("Enter the text for generating MCQs:", height=200)
if st.sidebar.button("Generate MCQs"):
if user_text.strip():
with st.spinner("Generating MCQs..."):
mcqs = generate_mcqs_from_text(user_text)
st.subheader("Generated MCQs:")
st.text_area("MCQs", value=mcqs, height=400)
st.session_state["mcqs"] = mcqs # Store MCQs for evaluation
else:
st.error("Please enter text for generating MCQs.")
# Input user answers for evaluation
if "mcqs" in st.session_state:
st.subheader("Solve the MCQs")
user_answers = st.text_area("Enter your answers (e.g., A, B, C, D for each question):", height=100)
if st.button("Evaluate Answers"):
if user_answers.strip():
with st.spinner("Evaluating answers..."):
evaluation_result = evaluate_answers(st.session_state["mcqs"], user_answers)
st.subheader("Evaluation Result:")
st.text_area("Evaluation", value=evaluation_result, height=400)
else:
st.error("Please enter your answers for evaluation.")