AI-PLAGARISM / app.py
indhupamula's picture
Update app.py
19fd14a verified
Raw
History Blame Contribute Delete
4.29 kB
import streamlit as st
# βœ… Set page config (must be the first Streamlit command)
st.set_page_config(page_title="AI-Powered Coding Question Generator", layout="centered")
import os
import subprocess
import sqlite3
import random
from fpdf import FPDF
from transformers import pipeline
# βœ… Force install missing dependencies
missing_packages = ["transformers", "torch", "sentence-transformers", "fpdf"]
for package in missing_packages:
try:
__import__(package)
except ImportError:
subprocess.call(["pip", "install", package])
# βœ… Create database
def create_database():
conn = sqlite3.connect("questions.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS questions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
subject TEXT,
topic TEXT,
question TEXT
)
""")
conn.commit()
conn.close()
# βœ… Insert question into database
def insert_question(subject, topic, question):
conn = sqlite3.connect("questions.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO questions (subject, topic, question) VALUES (?, ?, ?)", (subject, topic, question))
conn.commit()
conn.close()
# βœ… Retrieve stored questions
def get_questions(subject, topic, num):
conn = sqlite3.connect("questions.db")
cursor = conn.cursor()
cursor.execute("SELECT question FROM questions WHERE subject = ? AND topic = ? ORDER BY RANDOM() LIMIT ?", (subject, topic, num))
questions = [q[0] for q in cursor.fetchall()]
conn.close()
return questions
# βœ… Load AI Model for Question Generation
@st.cache_resource
def load_model():
try:
model = pipeline("text-generation", model="microsoft/CodeGPT-small-py")
return model
except Exception as e:
st.error(f"❌ Error loading AI Model: {e}")
return None
model = load_model()
# βœ… Generate AI Questions
def generate_ai_questions(subject, topic, num):
if not model:
return ["❌ AI Model not loaded. Try restarting the app."]
try:
prompt = f"Generate {num} coding-related questions specifically about {topic} in {subject}. Ensure the questions are clear and relevant to programming."
generated = model(prompt, max_length=100, num_return_sequences=num)
return [q["generated_text"].strip() for q in generated]
except Exception as e:
return [f"❌ Error generating questions: {e}"]
# βœ… Generate PDF
def generate_pdf(subject, topic, questions):
pdf = FPDF()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.add_page()
pdf.set_font("Arial", style='B', size=16)
pdf.cell(200, 10, f"{subject} - {topic} Questions", ln=True, align='C')
pdf.ln(10)
pdf.set_font("Arial", size=12)
for i, question in enumerate(questions, 1):
pdf.multi_cell(0, 10, f"{i}. {question}")
pdf.ln(5)
pdf.output("generated_questions.pdf")
return "generated_questions.pdf"
# βœ… Main Application
def main():
st.title("πŸ’» AI-Based Coding Question Generator")
st.sidebar.header("πŸ“Œ Settings")
subject = st.sidebar.selectbox("Select Subject", ["DSA", "Python", "Java", "DBMS"])
topic = st.sidebar.text_input("Enter a topic (e.g., 'Recursion', 'SQL Joins')")
num = st.sidebar.slider("Number of Questions:", 1, 5, 2)
if st.sidebar.button("πŸ” Generate Questions"):
if topic.strip():
questions = get_questions(subject, topic, num)
if not questions:
questions = generate_ai_questions(subject, topic, num)
for q in questions:
insert_question(subject, topic, q)
st.subheader(f"πŸ“Œ {subject} - {topic} Questions")
for i, q in enumerate(questions, 1):
st.write(f"{i}. {q}")
if st.button("πŸ“₯ Download as PDF"):
pdf_path = generate_pdf(subject, topic, questions)
with open(pdf_path, "rb") as f:
st.download_button("πŸ“₯ Download PDF", f, file_name="questions.pdf", mime="application/pdf")
else:
st.warning("⚠️ Please enter a valid topic!")
if __name__ == "__main__":
create_database()
main()