muhammadrazapathan commited on
Commit
3e86d8e
Β·
verified Β·
1 Parent(s): ab7b45e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +215 -0
app.py ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import sqlite3
3
+ import os
4
+ from transformers import pipeline
5
+
6
+ # -----------------------------
7
+ # LOAD LIGHTWEIGHT LLM MODEL
8
+ # (Good for HuggingFace CPU)
9
+ # -----------------------------
10
+ qa_pipeline = pipeline("text2text-generation", model="google/flan-t5-base")
11
+
12
+ # -----------------------------
13
+ # DATABASE SETUP
14
+ # -----------------------------
15
+ DB = "college.db"
16
+
17
+ def init_db():
18
+ conn = sqlite3.connect(DB)
19
+ c = conn.cursor()
20
+
21
+ c.execute("""CREATE TABLE IF NOT EXISTS questions(
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
23
+ student TEXT,
24
+ year TEXT,
25
+ question TEXT,
26
+ answer TEXT
27
+ )""")
28
+
29
+ c.execute("""CREATE TABLE IF NOT EXISTS materials(
30
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
31
+ year TEXT,
32
+ subject TEXT,
33
+ filename TEXT
34
+ )""")
35
+
36
+ conn.commit()
37
+ conn.close()
38
+
39
+ init_db()
40
+
41
+ UPLOAD_DIR = "uploads"
42
+ os.makedirs(UPLOAD_DIR, exist_ok=True)
43
+
44
+ # -----------------------------
45
+ # LOGIN VALIDATION
46
+ # -----------------------------
47
+ def login(name, year):
48
+ if year not in ["First Year", "Second Year"]:
49
+ return "❌ Access Denied! Only First & Second Year Allowed."
50
+ return f"βœ… Welcome {name}! Access Granted."
51
+
52
+ # -----------------------------
53
+ # AI ANSWER
54
+ # -----------------------------
55
+ def generate_ai_answer(question):
56
+ result = qa_pipeline(
57
+ f"Answer this for a college student clearly:\n{question}",
58
+ max_length=200
59
+ )[0]['generated_text']
60
+ return result
61
+
62
+ # -----------------------------
63
+ # ASK QUESTION
64
+ # -----------------------------
65
+ def ask_question(name, year, question):
66
+ if year not in ["First Year", "Second Year"]:
67
+ return "Access Denied."
68
+
69
+ ai_answer = generate_ai_answer(question)
70
+
71
+ conn = sqlite3.connect(DB)
72
+ conn.execute(
73
+ "INSERT INTO questions(student,year,question,answer) VALUES(?,?,?,?)",
74
+ (name, year, question, ai_answer)
75
+ )
76
+ conn.commit()
77
+ conn.close()
78
+
79
+ return ai_answer
80
+
81
+ # -----------------------------
82
+ # VIEW MATERIALS
83
+ # -----------------------------
84
+ def view_materials(year):
85
+ conn = sqlite3.connect(DB)
86
+ rows = conn.execute(
87
+ "SELECT subject, filename FROM materials WHERE year=?",
88
+ (year,)
89
+ ).fetchall()
90
+ conn.close()
91
+
92
+ if not rows:
93
+ return "No materials uploaded yet."
94
+
95
+ return "\n".join([f"{subj} β†’ {file}" for subj, file in rows])
96
+
97
+ # -----------------------------
98
+ # UPLOAD MATERIAL (TEACHER)
99
+ # -----------------------------
100
+ def upload_material(year, subject, file):
101
+ if file is None:
102
+ return "Upload a file first."
103
+
104
+ filepath = os.path.join(UPLOAD_DIR, file.name)
105
+
106
+ with open(filepath, "wb") as f:
107
+ f.write(file.read())
108
+
109
+ conn = sqlite3.connect(DB)
110
+ conn.execute(
111
+ "INSERT INTO materials(year,subject,filename) VALUES(?,?,?)",
112
+ (year, subject, os.path.basename(file.name))
113
+ )
114
+ conn.commit()
115
+ conn.close()
116
+
117
+ return "βœ… Uploaded Successfully"
118
+
119
+ # -----------------------------
120
+ # TEACHER VIEW QUESTIONS
121
+ # -----------------------------
122
+ def teacher_view():
123
+ conn = sqlite3.connect(DB)
124
+ rows = conn.execute("SELECT * FROM questions").fetchall()
125
+ conn.close()
126
+
127
+ output = ""
128
+ for r in rows:
129
+ output += f"\nID {r[0]} | {r[1]} ({r[2]})\nQ: {r[3]}\nA: {r[4]}\n"
130
+ return output
131
+
132
+ # -----------------------------
133
+ # UPDATE ANSWER
134
+ # -----------------------------
135
+ def update_answer(qid, new_answer):
136
+ conn = sqlite3.connect(DB)
137
+ conn.execute(
138
+ "UPDATE questions SET answer=? WHERE id=?",
139
+ (new_answer, qid)
140
+ )
141
+ conn.commit()
142
+ conn.close()
143
+ return "βœ… Answer Updated"
144
+
145
+ # -----------------------------
146
+ # MODERN UI DESIGN
147
+ # -----------------------------
148
+ with gr.Blocks(theme=gr.themes.Soft(), title="College LMS AI") as app:
149
+
150
+ gr.Markdown("""
151
+ # πŸŽ“ AI-Powered College LMS
152
+ ### *(Only First & Second Year Students Allowed)*
153
+
154
+ ---
155
+ """)
156
+
157
+ # ---------------- STUDENT PORTAL ----------------
158
+ with gr.Tab("πŸ‘¨β€πŸŽ“ Student Portal"):
159
+
160
+ gr.Markdown("## Login")
161
+
162
+ name = gr.Textbox(label="Student Name")
163
+ year = gr.Dropdown(["First Year", "Second Year", "Other"], label="Select Year")
164
+
165
+ login_btn = gr.Button("Login")
166
+ login_msg = gr.Textbox()
167
+
168
+ login_btn.click(login, inputs=[name, year], outputs=login_msg)
169
+
170
+ gr.Markdown("## πŸ€– Ask AI Tutor")
171
+
172
+ question = gr.Textbox(label="Ask Your Question")
173
+ ask_btn = gr.Button("Get Answer")
174
+
175
+ answer = gr.Textbox(lines=8, label="Answer")
176
+
177
+ ask_btn.click(ask_question, inputs=[name, year, question], outputs=answer)
178
+
179
+ gr.Markdown("## πŸ“š Study Materials")
180
+
181
+ mat_btn = gr.Button("Load Materials")
182
+ materials = gr.Textbox(lines=6)
183
+
184
+ mat_btn.click(view_materials, inputs=year, outputs=materials)
185
+
186
+ # ---------------- TEACHER PANEL ----------------
187
+ with gr.Tab("πŸ‘©β€πŸ« Teacher Panel"):
188
+
189
+ gr.Markdown("## Upload Study Material")
190
+
191
+ t_year = gr.Dropdown(["First Year", "Second Year"])
192
+ subject = gr.Textbox(label="Subject")
193
+ file = gr.File()
194
+
195
+ upload_btn = gr.Button("Upload")
196
+ upload_msg = gr.Textbox()
197
+
198
+ upload_btn.click(upload_material, inputs=[t_year, subject, file], outputs=upload_msg)
199
+
200
+ gr.Markdown("## Manage Questions")
201
+
202
+ view_btn = gr.Button("Show Questions")
203
+ all_q = gr.Textbox(lines=12)
204
+
205
+ view_btn.click(teacher_view, outputs=all_q)
206
+
207
+ qid = gr.Number(label="Question ID")
208
+ new_ans = gr.Textbox(label="New Answer")
209
+
210
+ upd_btn = gr.Button("Update Answer")
211
+ upd_msg = gr.Textbox()
212
+
213
+ upd_btn.click(update_answer, inputs=[qid, new_ans], outputs=upd_msg)
214
+
215
+ app.launch()