aazankhanYousafzai's picture
Update app.py
657a419 verified
import os
import gradio as gr
from groq import Groq
from pypdf import PdfReader
MODEL = "llama-3.1-8b-instant"
api_key = os.getenv("GROQ_API_KEY")
if not api_key:
raise RuntimeError("GROQ_API_KEY not found")
client = Groq(api_key=api_key)
DEFAULT_MSG = "How can I help you today?"
def read_pdf(file):
if file is None:
return ""
# HF sends dict: {'name':..., 'path':...}
if isinstance(file, dict):
path = file.get("path")
else:
path = getattr(file, "name", file)
reader = PdfReader(path)
text = ""
for page in reader.pages:
text += page.extract_text() or ""
return text
def ask_ai(prompt):
res = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.4,
max_tokens=700,
)
return res.choices[0].message.content
def summarizer(text): return ask_ai("Summarize:\n"+text)
def explainer(text): return ask_ai("Explain simply:\n"+text)
def mcq_generator(text): return ask_ai("Generate 10 MCQs:\n"+text)
def flashcard_generator(text): return ask_ai("Create 10 flashcards:\n"+text)
def router(text, mode):
return {
"Summarize": summarizer,
"Explain": explainer,
"MCQs": mcq_generator,
"Flashcards": flashcard_generator,
}[mode](text)
def app(text, pdf, mode):
if pdf is not None:
text = read_pdf(pdf)
if not text.strip():
return DEFAULT_MSG
return router(text, mode)
custom_css = """
/* FORCE OVERRIDE HF THEME */
.gradio-container * { box-sizing: border-box; }
/* Remove radio circles */
input[type="radio"]{display:none !important;}
/* Pills */
label:has(input[type="radio"]) {
padding:6px 12px;
margin:4px;
border-radius:999px;
border:1px solid #334155;
color:#cbd5f5;
cursor:pointer;
}
label:has(input[type="radio"]:checked) {
background:linear-gradient(90deg,#38bdf8,#a78bfa);
color:black !important;
font-weight:700;
border:none;
}
/* Center fake message */
.center-fake textarea{
text-align:center !important;
font-size:22px !important;
padding-top:40% !important;
}
"""
with gr.Blocks(css=custom_css) as interface:
gr.Markdown("## 📘 AI Study Assistant")
output = gr.Textbox(
lines=10,
label="Output",
value=DEFAULT_MSG,
interactive=False,
elem_classes=["center-fake"]
)
text = gr.Textbox(lines=4, label="Enter Notes or Topic")
pdf = gr.File(label="Upload PDF (optional)")
mode = gr.Radio(
["Summarize","Explain","MCQs","Flashcards"],
value="Summarize",
label="Choose Mode"
)
run = gr.Button("⚡ Generate")
def run_app(t,p,m):
res = app(t,p,m)
if res == DEFAULT_MSG:
return gr.update(value=res, interactive=False, elem_classes=["center-fake"])
else:
return gr.update(value=res, interactive=True, elem_classes=[])
run.click(run_app,[text,pdf,mode],output)
text.submit(run_app,[text,pdf,mode],output)
interface.launch()