sathwikabhavaraju2005 commited on
Commit
f72c672
Β·
verified Β·
1 Parent(s): 1a16e5f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -16
app.py CHANGED
@@ -1,21 +1,33 @@
1
  import gradio as gr
2
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
 
 
 
3
 
4
  # ------------------------------
5
- # Load Fine-Tuned Question Generator
6
  # ------------------------------
7
- model_name = "iarfmoose/t5-base-question-generator"
8
- tokenizer = AutoTokenizer.from_pretrained(model_name)
9
- model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
 
 
 
 
 
 
 
 
 
10
 
11
  # ------------------------------
12
- # Better Quiz Generator
13
  # ------------------------------
14
  def generate_mcqs(text, num_questions=3):
15
  input_text = f"generate questions: {text.strip()}"
16
- input_ids = tokenizer.encode(input_text, return_tensors="pt", max_length=512, truncation=True)
17
 
18
- outputs = model.generate(
19
  input_ids=input_ids,
20
  max_length=256,
21
  num_return_sequences=num_questions,
@@ -24,24 +36,135 @@ def generate_mcqs(text, num_questions=3):
24
  top_p=0.95
25
  )
26
 
27
- questions = [tokenizer.decode(out, skip_special_tokens=True).strip() for out in outputs]
28
  return "\n".join([f"{i+1}. {q}" for i, q in enumerate(questions)])
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  # ------------------------------
31
  # Gradio Interface
32
  # ------------------------------
33
  with gr.Blocks() as demo:
34
- gr.Markdown("# 🧠 Quiz Generator (Fine-Tuned T5)")
35
-
36
- with gr.Row():
37
  quiz_text = gr.Textbox(label="πŸ“„ Input Content", lines=6, placeholder="Paste a paragraph here...")
38
-
39
- with gr.Row():
40
  quiz_slider = gr.Slider(1, 10, value=3, label="🧾 Number of Questions")
41
  quiz_btn = gr.Button("πŸš€ Generate Quiz")
 
 
42
 
43
- quiz_output = gr.Textbox(label="πŸ“‹ Generated Questions", lines=10)
 
 
 
 
44
 
45
- quiz_btn.click(fn=generate_mcqs, inputs=[quiz_text, quiz_slider], outputs=quiz_output)
 
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  demo.launch()
 
1
  import gradio as gr
2
+ import pandas as pd
3
+ import torch
4
+ from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, T5Tokenizer, T5ForConditionalGeneration
5
+ from sentence_transformers import SentenceTransformer, util
6
 
7
  # ------------------------------
8
+ # Load Models
9
  # ------------------------------
10
+ # Fine-tuned quiz generator model
11
+ quiz_model_name = "iarfmoose/t5-base-question-generator"
12
+ quiz_tokenizer = AutoTokenizer.from_pretrained(quiz_model_name)
13
+ quiz_model = AutoModelForSeq2SeqLM.from_pretrained(quiz_model_name)
14
+
15
+ # For summarizer and fallback tasks
16
+ default_model_name = "t5-base"
17
+ tokenizer_qg = T5Tokenizer.from_pretrained(default_model_name)
18
+ model_qg = T5ForConditionalGeneration.from_pretrained(default_model_name)
19
+
20
+ # For plagiarism detection
21
+ model_plag = SentenceTransformer('all-MiniLM-L6-v2')
22
 
23
  # ------------------------------
24
+ # Quiz Generator (Fine-Tuned)
25
  # ------------------------------
26
  def generate_mcqs(text, num_questions=3):
27
  input_text = f"generate questions: {text.strip()}"
28
+ input_ids = quiz_tokenizer.encode(input_text, return_tensors="pt", max_length=512, truncation=True)
29
 
30
+ outputs = quiz_model.generate(
31
  input_ids=input_ids,
32
  max_length=256,
33
  num_return_sequences=num_questions,
 
36
  top_p=0.95
37
  )
38
 
39
+ questions = [quiz_tokenizer.decode(out, skip_special_tokens=True).strip() for out in outputs]
40
  return "\n".join([f"{i+1}. {q}" for i, q in enumerate(questions)])
41
 
42
+ # ------------------------------
43
+ # Weakness Analyzer
44
+ # ------------------------------
45
+ def analyze_weakness(csv_file):
46
+ df = pd.read_csv(csv_file.name)
47
+ summary = df.groupby("Topic")["Score"].mean().sort_values()
48
+ return summary.to_string()
49
+
50
+ # ------------------------------
51
+ # Teaching Assistant (Mock)
52
+ # ------------------------------
53
+ def chatbot_response(message, history):
54
+ return "This is a placeholder response for now. (LLM not integrated)"
55
+
56
+ # ------------------------------
57
+ # Speech Question Solver (Mock)
58
+ # ------------------------------
59
+ def speech_answer(audio):
60
+ return "Audio transcription and answer generation not supported offline."
61
+
62
+ # ------------------------------
63
+ # Summarizer
64
+ # ------------------------------
65
+ def summarize_text(text):
66
+ input_text = f"summarize: {text.strip()}"
67
+ input_ids = tokenizer_qg.encode(input_text, return_tensors="pt", max_length=512, truncation=True)
68
+ summary_ids = model_qg.generate(input_ids, max_length=150, min_length=30, length_penalty=5.0, num_beams=2)
69
+ return tokenizer_qg.decode(summary_ids[0], skip_special_tokens=True)
70
+
71
+ # ------------------------------
72
+ # Engagement Predictor (Mock)
73
+ # ------------------------------
74
+ def predict_engagement(file):
75
+ df = pd.read_csv(file.name)
76
+ avg_time = df["TimeSpent"].mean()
77
+ return "βœ… Engaged student" if avg_time >= 10 else "⚠️ Risk of disengagement"
78
+
79
+ # ------------------------------
80
+ # Badge Generator
81
+ # ------------------------------
82
+ def generate_badge(file):
83
+ df = pd.read_csv(file.name)
84
+ avg_score = df["Score"].mean()
85
+ if avg_score >= 80:
86
+ return "πŸ… Gold Badge"
87
+ elif avg_score >= 50:
88
+ return "πŸ₯ˆ Silver Badge"
89
+ else:
90
+ return "πŸ₯‰ Bronze Badge"
91
+
92
+ # ------------------------------
93
+ # Translator (Mock)
94
+ # ------------------------------
95
+ def translate_text(text, target_lang):
96
+ return f"(Translated to {target_lang}) - This is a mock translation."
97
+
98
+ # ------------------------------
99
+ # Plagiarism Checker
100
+ # ------------------------------
101
+ def check_plagiarism(text1, text2):
102
+ emb1 = model_plag.encode(text1, convert_to_tensor=True)
103
+ emb2 = model_plag.encode(text2, convert_to_tensor=True)
104
+ score = util.cos_sim(emb1, emb2).item()
105
+ return f"Similarity Score: {score:.2f} - {'⚠️ Possible Plagiarism' if score > 0.8 else 'βœ… Looks Original'}"
106
+
107
  # ------------------------------
108
  # Gradio Interface
109
  # ------------------------------
110
  with gr.Blocks() as demo:
111
+ gr.Markdown("# πŸ“š Smart LMS Suite (AI Powered Offline Tools)")
112
+
113
+ with gr.Tab("🧠 Quiz Generator"):
114
  quiz_text = gr.Textbox(label="πŸ“„ Input Content", lines=6, placeholder="Paste a paragraph here...")
 
 
115
  quiz_slider = gr.Slider(1, 10, value=3, label="🧾 Number of Questions")
116
  quiz_btn = gr.Button("πŸš€ Generate Quiz")
117
+ quiz_output = gr.Textbox(label="πŸ“‹ Generated Questions", lines=10)
118
+ quiz_btn.click(fn=generate_mcqs, inputs=[quiz_text, quiz_slider], outputs=quiz_output)
119
 
120
+ with gr.Tab("πŸ“‰ Weakness Analyzer"):
121
+ weak_file = gr.File(label="Upload CSV with Topic & Score columns")
122
+ weak_btn = gr.Button("Analyze")
123
+ weak_out = gr.Textbox(label="Analysis")
124
+ weak_btn.click(fn=analyze_weakness, inputs=weak_file, outputs=weak_out)
125
 
126
+ with gr.Tab("πŸ€– Teaching Assistant"):
127
+ gr.ChatInterface(fn=chatbot_response)
128
 
129
+ with gr.Tab("🎀 Speech Q Solver"):
130
+ audio_in = gr.Audio(label="Upload Audio", type="filepath")
131
+ audio_btn = gr.Button("Get Answer")
132
+ audio_out = gr.Textbox(label="Answer")
133
+ audio_btn.click(fn=speech_answer, inputs=audio_in, outputs=audio_out)
134
+
135
+ with gr.Tab("πŸ“„ Summarizer"):
136
+ sum_text = gr.Textbox(lines=5, label="Paste Text")
137
+ sum_btn = gr.Button("Summarize")
138
+ sum_out = gr.Textbox(label="Summary")
139
+ sum_btn.click(fn=summarize_text, inputs=sum_text, outputs=sum_out)
140
+
141
+ with gr.Tab("πŸ“Š Engagement Predictor"):
142
+ eng_file = gr.File(label="Upload CSV with TimeSpent column")
143
+ eng_btn = gr.Button("Predict")
144
+ eng_out = gr.Textbox()
145
+ eng_btn.click(fn=predict_engagement, inputs=eng_file, outputs=eng_out)
146
+
147
+ with gr.Tab("πŸ… Badge Generator"):
148
+ badge_file = gr.File(label="Upload CSV with Score column")
149
+ badge_btn = gr.Button("Get Badge")
150
+ badge_out = gr.Textbox()
151
+ badge_btn.click(fn=generate_badge, inputs=badge_file, outputs=badge_out)
152
+
153
+ with gr.Tab("🌍 Translator"):
154
+ trans_in = gr.Textbox(label="Enter Text")
155
+ trans_lang = gr.Textbox(label="Target Language")
156
+ trans_btn = gr.Button("Translate")
157
+ trans_out = gr.Textbox()
158
+ trans_btn.click(fn=translate_text, inputs=[trans_in, trans_lang], outputs=trans_out)
159
+
160
+ with gr.Tab("πŸ“‹ Plagiarism Checker"):
161
+ text1 = gr.Textbox(label="Text 1", lines=3)
162
+ text2 = gr.Textbox(label="Text 2", lines=3)
163
+ plag_btn = gr.Button("Check Similarity")
164
+ plag_out = gr.Textbox()
165
+ plag_btn.click(fn=check_plagiarism, inputs=[text1, text2], outputs=plag_out)
166
+
167
+ # ------------------------------
168
+ # Launch the App
169
+ # ------------------------------
170
  demo.launch()