File size: 3,478 Bytes
5248bb3
 
 
 
 
1343b02
5248bb3
 
 
 
 
 
 
b621482
5248bb3
 
 
 
38e13f3
5248bb3
9534df5
fccfa74
f958fdb
1343b02
 
 
 
 
5248bb3
fccfa74
 
ac0c50f
f62d772
 
ac0c50f
 
f62d772
ac0c50f
f62d772
ac0c50f
 
 
 
 
 
f62d772
 
 
 
 
 
 
 
 
 
ac0c50f
 
f62d772
ac0c50f
f62d772
ac0c50f
 
f62d772
ac0c50f
f62d772
ac0c50f
fccfa74
f62d772
 
ac0c50f
 
902a2ad
9b029ab
 
307e4e1
 
 
 
 
 
 
 
 
 
 
 
 
9b029ab
fccfa74
 
 
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
import os
import json
import pandas as pd
import traceback
import streamlit as st
from src.mcqgenerator.utilis import read_file, get_table_data
from src.mcqgenerator.logger import logging
from src.mcqgenerator.mcqgenerator import generate_evaluate_chain
from langchain_community.callbacks import get_openai_callback
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.chains import SequentialChain
from weasyprint import HTML

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

st.title("MCQs Creator Application")



with st.form("user_inputs"):
    uploader_file = st.file_uploader("Upload a PDF or Txt file")
    mcq_count = st.text_input("No. of MCQS")
    subject = st.text_input("Insert subject", max_chars=20)
    tone = st.text_input("Complexity Level of Questions", max_chars=20, placeholder="Simple")
    button = st.form_submit_button("Create MCQs")

    df = None  # Declare df at a broader scope

    if button and uploader_file is not None and mcq_count and subject and tone:
        with st.spinner("loading..."):
            try:
                text = read_file(uploader_file)
                # Count tokens and the cost of the API call
                with get_openai_callback() as cb:
                    response = generate_evaluate_chain(
                        {
                            "text": text,
                            "number": mcq_count,
                            "subject": subject,
                            "tone": tone,
                            "response_json": json.dumps(RESPONSE_JSON)
                        }
                    )
            except Exception as e:
                traceback.print_exception(type(e), e, e.__traceback__)
                st.error("Error")
            else:
                print(f"Total Tokens:{cb.total_tokens}")
                print(f"Prompt Tokens:{cb.prompt_tokens}")
                print(f"Completion Tokens:{cb.completion_tokens}")
                print(f"Total Cost:{cb.total_cost}")
                if isinstance(response, dict):
                    # Extract the quiz data from the response
                    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
                            st.table(df)
                            # Display the review in a text box as well
                            st.text_area(label="Review", value=response["review"])
                            # Call the download function
                            
                        else:
                            st.error("Error in the table data")
                    else:
                        st.write(response)

def download(df):
    col1, col2 = st.columns(2)
    html_content = df.to_html(index=False)
    pdf_path = "generated_mcqs.pdf"

    if button:
        # Download CSV
        col1.download_button(
            label="Download CSV",
            data=df.to_csv(index=False).encode("utf-8"),
            file_name="generated_mcqs.csv",
            key="csv-download",
            help="Click to download as CSV",
        )

            
# Now you can use df outside the form if needed
if df is not None:
    download(df)