File size: 3,504 Bytes
d4a486b
 
 
 
 
 
fc6c542
c9a612a
dc6b619
d4a486b
 
 
 
 
 
 
 
beab894
 
 
 
 
 
d4a486b
 
 
 
 
 
 
bf7eaec
d4a486b
 
 
beab894
d4a486b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import os 
import json
import pandas as pd
import traceback
import PyPDF2
import streamlit as st
from util import read_flie, get_table_data
from MCQGenerator import final_chain

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import OpenAI

from langchain.callbacks import get_openai_callback
from langchain.chains import SequentialChain    

import os
import json
import pandas as pd
import PyPDF2
import traceback

st.set_page_config(page_title = "MCQ Generater", page_icon='https://archive.org/download/github.com-langchain-ai-langchain_-_2023-09-20_11-56-54/cover.jpg')

st.title("πŸ€– MCQ Generater πŸ¦œπŸ”—")

st.image('https://miro.medium.com/v2/resize:fit:1400/1*odEY2uy37q-GTb8-u7_j8Q.png')


with open('Response.json','r') as f:
    RESPONSE_JSON = json.load(f)



# taking inputs

with st.form("user inputs") :
    
    # file upload
    
    uploaded_file = st.file_uploader('upload PDF or txt File πŸ‘¨β€πŸš€')
    
    # number of mcq
    
    num_mcq = st.number_input('no. of mcq 🎯',min_value = 2,max_value = 70)
    
    # subject
    
    subject = st.text_input('subject πŸ“š',max_chars = 50)
    
    level = st.text_input('level of hardness πŸ‘©πŸ»β€πŸ’»', max_chars = 25, placeholder = 'simple')
    
    submit = st.form_submit_button("Create")
    
if uploaded_file and submit is not None and subject and level and num_mcq : 
    
    with st.spinner('loading...😎') :
    
        try : 
            
            # calling the read_file func in utils and it will the uploaded doc text
            text = read_flie(uploaded_file)
            with get_openai_callback() as cb :
            
                response = final_chain(
                    {
                        'text' : text,
                        'number' : num_mcq,
                        'subject' : subject,
                        'level' : level,
                        'response_json' : json.dumps(RESPONSE_JSON)
                    }
                ) 
        except Exception as e :
            raise Exception('Error coming : Try again later πŸ•΅οΈβ€β™€οΈ')
        
        else :
            
            # print(response)
            if isinstance(response,dict):
                # make the DataFrame
                
                quiz = response.get('quiz',None)
                
                if quiz is not None :
                    
                    table_data = get_table_data(quiz)
                    
                    if table_data is not None :
                    
                        df = pd.DataFrame(table_data)
                        df.index = df.index+1 # index in the table/df start from 1 and not from 0 
                        st.table(df)
                        
                        
                        # displaying review as well
                        
                        st.header('Review πŸ§™πŸ½')
                        st.text_area(label = ' ',value=response['complexity'])
                    
                    else :
                        st.error("Sorry : There is an Error in Table Data πŸ•΅οΈβ€β™€οΈ")
                        
                else :
                    
                    st.error("Sorry : Error in Quiz πŸ•΅οΈβ€β™€οΈ")
            
            else :
                
                st.write(response)