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()