Spaces:
Sleeping
Sleeping
import os | |
import tempfile | |
from datetime import datetime | |
from PyPDF2 import PdfReader | |
from docx import Document | |
import streamlit as st | |
from transformers import pipeline | |
# β Page config MUST be first Streamlit command | |
st.set_page_config(page_title="AI Study Plan Assistant", layout="wide") | |
# Load models with caching | |
def load_models(): | |
summarizer = pipeline("summarization", model="facebook/bart-large-cnn") | |
qa_pipeline = pipeline("question-answering", model="distilbert-base-uncased-distilled-squad") | |
return summarizer, qa_pipeline | |
summarizer, qa_pipeline = load_models() | |
# Extract text from supported formats | |
def extract_text(file): | |
ext = os.path.splitext(file.name)[1].lower() | |
if ext == ".txt": | |
return file.read().decode("utf-8") | |
elif ext == ".docx": | |
doc = Document(file) | |
return "\n".join([para.text for para in doc.paragraphs]) | |
elif ext == ".pdf": | |
pdf_reader = PdfReader(file) | |
text = "" | |
for page in pdf_reader.pages: | |
text += page.extract_text() + "\n" | |
return text | |
else: | |
raise ValueError("Only .txt, .docx, and .pdf files are supported.") | |
# Generate study plan | |
def generate_plan(file, hours_per_day, exam_date, language): | |
try: | |
content = extract_text(file) | |
today = datetime.now().date() | |
exam = datetime.strptime(exam_date.strip(), "%Y-%m-%d").date() | |
days = (exam - today).days | |
if days <= 0: | |
return "β Exam date must be in the future." | |
prompt = f"Create a {days}-day study plan for this syllabus:\n{content}\nDaily study time: {hours_per_day} hours." | |
if language == "Urdu": | |
prompt += "\nTranslate the plan into Urdu." | |
summary = summarizer(prompt, max_length=512, min_length=150, do_sample=False) | |
return summary[0]['summary_text'] | |
except Exception as e: | |
return f"β οΈ Error: {str(e)}" | |
# Ask a question | |
def ask_question(file, question): | |
try: | |
context = extract_text(file) | |
result = qa_pipeline({"context": context, "question": question}) | |
return result['answer'] | |
except Exception as e: | |
return f"β οΈ Error: {str(e)}" | |
# Streamlit UI | |
st.sidebar.title("π Study Assistant Options") | |
uploaded_file = st.sidebar.file_uploader("Upload syllabus (.txt, .docx, .pdf)", type=["txt", "docx", "pdf"]) | |
study_hours = st.sidebar.number_input("Study hours per day", min_value=1, max_value=12, value=3) | |
exam_date = st.sidebar.text_input("Exam Date (YYYY-MM-DD)", value="2025-06-30") | |
language = st.sidebar.selectbox("Select Language", ["English", "Urdu"]) | |
st.title("π§ AI Study Plan & QA Assistant") | |
tab1, tab2 = st.tabs(["π Generate Study Plan", "β Ask a Question"]) | |
with tab1: | |
st.subheader("Generate a Personalized Study Plan") | |
if uploaded_file and st.button("Generate Study Plan"): | |
result = generate_plan(uploaded_file, study_hours, exam_date, language) | |
st.text_area("Study Plan", result, height=400) | |
with tab2: | |
st.subheader("Ask Questions from Uploaded Material") | |
question = st.text_input("Enter your question:") | |
if uploaded_file and question and st.button("Get Answer"): | |
answer = ask_question(uploaded_file, question) | |
st.text_area("Answer", answer, height=200) | |