File size: 3,396 Bytes
415cfe5
 
 
 
bb0771d
415cfe5
 
 
 
93a5e08
52d5182
415cfe5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92d67dd
 
 
93a5e08
92d67dd
 
 
 
93a5e08
eee0b5e
2e46dd2
 
 
 
 
1fe91ac
415cfe5
 
1370400
 
415cfe5
 
93a5e08
415cfe5
 
 
3b56ba3
415cfe5
 
703c4df
 
10f43f0
 
2e46dd2
 
 
 
 
b6b79c3
 
aa1786a
d572e23
415cfe5
 
 
21d8d6a
 
415cfe5
 
 
 
 
 
 
50629ff
415cfe5
 
 
 
 
 
07fa4ec
2e46dd2
51b662a
 
415cfe5
 
 
 
516d157
 
03110c9
4a8ac98
77c2ee2
703c4df
 
eee0b5e
2e46dd2
10f43f0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import PyPDF2
import nltk
import random
import streamlit as st
from langchain_openai import OpenAI

# Download NLTK data (if not already downloaded)
nltk.download('punkt')

# LangChain OpenAI wrapper
client = OpenAI(api_key="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")

def extract_text_from_pdf(pdf_file):
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    text = ""
    for page_num in range(len(pdf_reader.pages)):
        text += pdf_reader.pages[page_num].extract_text()
    return text

def generate_mcqs_on_topic(text, topic, num_mcqs=5):
    # Tokenize the text into sentences
    sentences = nltk.sent_tokenize(text)

    # Randomly select sentences to create Questions
    selected_sentences = random.sample(sentences, min(num_mcqs, len(sentences)))

    mcqs = []
    for sentence in selected_sentences:
        # Use ChatGPT for interactive question generation
        chatgpt_question = generate_question_with_chatgpt(sentence, topic)
        mcqs.append(chatgpt_question)

    return mcqs

def generate_question_with_chatgpt(context, topic):
    # Initializing the default value
    generated_question = {
        'content': "Unable to generate a question..",
        'options': [],  # assuming options is a list
        'correct_answer': "Unknown"
    }

    data = {
        "model": "gpt-3.5-turbo",
        "temperature": 0.7,
        "max_tokens": 1024,
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": f"What is the question on {topic} for the following? {context}"},
        ],
    }

    response = client.chat.completions.create(data)
    result = response.json()

    print("API Response:", result)  # Add this line for debugging

    if 'choices' in result:
        # Extract the generated question, options, and correct answer from the response
        generated_question = {
            'content': result["choices"][0]["message"]["content"],
            'options': result["choices"][0]["message"].get("options", []),
            'correct_answer': result["choices"][0]["message"].get("correct_answer", "Unknown")
        }
    else:
        print("Unexpected API response format.")

    return generated_question

def main(): 
    # Title of the Application
    st.header("🤖CB Quiz Generator🧠", divider='rainbow')
    st.subheader("☕CoffeeBeans☕")

    # User input 
    pdf_file = st.file_uploader("Upload PDF Document:", type=["pdf"])
    num_mcqs = st.number_input("Enter Number of MCQs to Generate:", min_value=1, step=1, value=5)
    topic = st.text_input("Enter the Topic in which the quiz has to be generated")

    # Button to trigger QUIZ generation
    if st.button("Generate Quiz"):
        if pdf_file:
            text = extract_text_from_pdf(pdf_file)
            mcqs = generate_mcqs_on_topic(text, topic, num_mcqs)

            # Display the generated Questions
            st.success(f"Generated {num_mcqs} Questions:")
            for i, generated_question in enumerate(mcqs, start=1):
                st.write(f"\nQuestion {i}: {generated_question['content']}")
                st.write(f"Options: {', '.join(generated_question['options'])}")
                st.write(f"Correct Answer: {generated_question['correct_answer']}")
        else:
            st.error("Please upload a PDF document.")

if __name__ == "__main__":
    main()