Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import sqlite3 | |
| import os | |
| from transformers import pipeline | |
| # ----------------------------- | |
| # LOAD LIGHT MODEL (HF SAFE) | |
| # ----------------------------- | |
| generator = pipeline( | |
| "text-generation", | |
| model="distilgpt2", | |
| device=-1 # CPU only | |
| ) | |
| # ----------------------------- | |
| # DATABASE SETUP | |
| # ----------------------------- | |
| DB = "college.db" | |
| def init_db(): | |
| conn = sqlite3.connect(DB) | |
| c = conn.cursor() | |
| c.execute("""CREATE TABLE IF NOT EXISTS questions( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| student TEXT, | |
| year TEXT, | |
| question TEXT, | |
| answer TEXT | |
| )""") | |
| c.execute("""CREATE TABLE IF NOT EXISTS materials( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| year TEXT, | |
| subject TEXT, | |
| filename TEXT | |
| )""") | |
| conn.commit() | |
| conn.close() | |
| init_db() | |
| UPLOAD_DIR = "uploads" | |
| os.makedirs(UPLOAD_DIR, exist_ok=True) | |
| # ----------------------------- | |
| # FUNCTIONS | |
| # ----------------------------- | |
| def login(name, year): | |
| if year not in ["First Year", "Second Year"]: | |
| return "β Only First & Second Year Students Allowed" | |
| return f"β Welcome {name}" | |
| def generate_ai_answer(question): | |
| prompt = f"Answer this academic question clearly:\n{question}\nAnswer:" | |
| result = generator(prompt, max_length=150, do_sample=True)[0]["generated_text"] | |
| # Clean output | |
| answer = result.split("Answer:")[-1].strip() | |
| return answer | |
| def ask_question(name, year, question): | |
| if year not in ["First Year", "Second Year"]: | |
| return "Access Denied" | |
| answer = generate_ai_answer(question) | |
| conn = sqlite3.connect(DB) | |
| conn.execute( | |
| "INSERT INTO questions(student,year,question,answer) VALUES(?,?,?,?)", | |
| (name, year, question, answer) | |
| ) | |
| conn.commit() | |
| conn.close() | |
| return answer | |
| def view_materials(year): | |
| conn = sqlite3.connect(DB) | |
| rows = conn.execute( | |
| "SELECT subject, filename FROM materials WHERE year=?", | |
| (year,) | |
| ).fetchall() | |
| conn.close() | |
| if not rows: | |
| return "No materials uploaded yet." | |
| return "\n".join([f"{s} β {f}" for s, f in rows]) | |
| def upload_material(year, subject, file): | |
| if file is None: | |
| return "Upload a file" | |
| path = os.path.join(UPLOAD_DIR, file.name) | |
| with open(path, "wb") as f: | |
| f.write(file.read()) | |
| conn = sqlite3.connect(DB) | |
| conn.execute( | |
| "INSERT INTO materials(year,subject,filename) VALUES(?,?,?)", | |
| (year, subject, file.name) | |
| ) | |
| conn.commit() | |
| conn.close() | |
| return "β Uploaded Successfully" | |
| def teacher_view(): | |
| conn = sqlite3.connect(DB) | |
| rows = conn.execute("SELECT * FROM questions").fetchall() | |
| conn.close() | |
| text = "" | |
| for r in rows: | |
| text += f"\nID {r[0]} | {r[1]} ({r[2]})\nQ: {r[3]}\nA: {r[4]}\n" | |
| return text | |
| def update_answer(qid, new_answer): | |
| conn = sqlite3.connect(DB) | |
| conn.execute( | |
| "UPDATE questions SET answer=? WHERE id=?", | |
| (new_answer, qid) | |
| ) | |
| conn.commit() | |
| conn.close() | |
| return "Answer Updated" | |
| # ----------------------------- | |
| # UI | |
| # ----------------------------- | |
| with gr.Blocks(theme=gr.themes.Soft(), title="College LMS") as app: | |
| gr.Markdown("# π AI-Powered College LMS") | |
| with gr.Tab("Student Portal"): | |
| name = gr.Textbox(label="Name") | |
| year = gr.Dropdown(["First Year", "Second Year", "Other"]) | |
| login_btn = gr.Button("Login") | |
| login_msg = gr.Textbox() | |
| login_btn.click(login, [name, year], login_msg) | |
| question = gr.Textbox(label="Ask Question") | |
| ask_btn = gr.Button("Ask AI") | |
| answer = gr.Textbox(lines=6) | |
| ask_btn.click(ask_question, [name, year, question], answer) | |
| mat_btn = gr.Button("View Materials") | |
| materials = gr.Textbox() | |
| mat_btn.click(view_materials, year, materials) | |
| with gr.Tab("Teacher Panel"): | |
| t_year = gr.Dropdown(["First Year", "Second Year"]) | |
| subject = gr.Textbox(label="Subject") | |
| file = gr.File() | |
| upload_btn = gr.Button("Upload") | |
| upload_msg = gr.Textbox() | |
| upload_btn.click(upload_material, [t_year, subject, file], upload_msg) | |
| view_btn = gr.Button("Show Questions") | |
| all_q = gr.Textbox(lines=10) | |
| view_btn.click(teacher_view, outputs=all_q) | |
| qid = gr.Number(label="Question ID") | |
| new_ans = gr.Textbox(label="New Answer") | |
| upd_btn = gr.Button("Update") | |
| upd_msg = gr.Textbox() | |
| upd_btn.click(update_answer, [qid, new_ans], upd_msg) | |
| if __name__ == "__main__": | |
| app.launch() | |