Spaces:
Sleeping
Sleeping
File size: 3,551 Bytes
242da2d bc20a41 a9d0ada e33f38e a9d0ada e33f38e a9d0ada af08924 a9d0ada 529a636 a9d0ada 242da2d a9d0ada 242da2d 529a636 242da2d 529a636 242da2d 529a636 242da2d a9d0ada 242da2d 529a636 242da2d af08924 a9d0ada 242da2d af08924 242da2d 529a636 242da2d 529a636 a9d0ada 529a636 a9d0ada 242da2d 529a636 a9d0ada 242da2d af08924 242da2d a9d0ada 529a636 af08924 a9d0ada 242da2d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
import os
from datetime import datetime
from PyPDF2 import PdfReader
from docx import Document
import streamlit as st
from groq import Groq
# β
Streamlit Page Config
st.set_page_config(page_title="AI Study Plan Assistant", layout="wide")
# β
Load Groq Client
@st.cache_resource
def load_groq_client():
return Groq(api_key=os.getenv("GROQ_API_KEY"))
groq_client = load_groq_client()
# β
Extract text from files
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:
if page.extract_text():
text += page.extract_text() + "\n"
return text
else:
raise ValueError("Only .txt, .docx, and .pdf files are supported.")
# β
Query Groq LLM
def query_groq(prompt, temperature=0.5):
try:
chat = groq_client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="mixtral-8x7b-32768",
temperature=temperature
)
return chat.choices[0].message.content.strip()
except Exception as e:
return f"β οΈ Groq API Error: {str(e)}"
# β
Study Plan Generation
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 detailed {days}-day study plan from the syllabus below.
You should assume the user can study {hours_per_day} hours per day.
Output should be in {language}.
Syllabus:
\"\"\"
{content}
\"\"\"
"""
return query_groq(prompt)
except Exception as e:
return f"β οΈ Error: {str(e)}"
# β
Question Answering
def ask_question(file, question):
try:
context = extract_text(file)
prompt = f"""Based on the following study material, answer the question below:
Study Material:
\"\"\"
{context}
\"\"\"
Question: {question}
Answer:"""
return query_groq(prompt)
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)
|