|
import os |
|
from dotenv import load_dotenv |
|
from groq import Groq |
|
import streamlit as st |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
client = Groq(api_key=os.getenv("GROQ_API_KEY")) |
|
|
|
|
|
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", |
|
) |
|
return chat_completion.choices[0].message.content |
|
|
|
|
|
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", |
|
) |
|
return chat_completion.choices[0].message.content |
|
|
|
|
|
st.title("Experienced Educator MCQ Generator & Evaluator") |
|
st.sidebar.header("Input Settings") |
|
|
|
|
|
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 |
|
else: |
|
st.error("Please enter text for generating MCQs.") |
|
|
|
|
|
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.") |
|
|