SohaAyub's picture
Update app.py
93afb5c verified
import os
import gradio as gr
from groq import Groq
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
import textwrap
# Initialize Groq client using environment variable
api_key = os.environ.get("AI_ROADMAP_KEY")
if api_key:
client = Groq(api_key=api_key)
else:
client = None
# ---------------- ROADMAP GENERATION ----------------
def generate_roadmap(domain, level, time_period):
if not domain or not level or not time_period:
return "Please fill in all fields."
if client is None:
return "Groq API key is missing. Please configure it in the Space settings."
try:
prompt = f"""
You are an expert learning mentor.
Create a detailed learning roadmap for:
Domain: {domain}
Skill Level: {level}
Time Duration: {time_period}
The roadmap should include:
- Weekly or phase-wise breakdown
- Topics to learn
- Tools and technologies
- Practice tasks or mini projects
- Learning tips
Use simple English and bullet points.
"""
response = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=900
)
return response.choices[0].message.content
except Exception:
return "Unable to generate roadmap at the moment. Please try again later."
# ---------------- PDF GENERATION ----------------
def generate_pdf(roadmap_text):
if not roadmap_text:
return None
try:
file_path = "AI_Learning_Roadmap.pdf"
pdf = canvas.Canvas(file_path, pagesize=A4)
width, height = A4
pdf.setFont("Helvetica", 10)
x = 40
y = height - 50
line_height = 14
for line in roadmap_text.split("\n"):
wrapped_lines = textwrap.wrap(line, 90) or [""]
for wrapped_line in wrapped_lines:
if y < 50:
pdf.showPage()
pdf.setFont("Helvetica", 10)
y = height - 50
pdf.drawString(x, y, wrapped_line)
y -= line_height
pdf.save()
return file_path
except Exception:
return None
# ---------------- GRADIO UI ----------------
with gr.Blocks() as app:
gr.Markdown("## AI Learning Roadmap Generator")
gr.Markdown("Generate a personalized learning roadmap and download it as a PDF.")
domain = gr.Textbox(label="Learning Domain", placeholder="Example: Data Science")
level = gr.Dropdown(
["Beginner", "Intermediate", "Advanced"],
label="Skill Level"
)
time_period = gr.Textbox(label="Time to Learn", placeholder="Example: 3 months")
generate_button = gr.Button("Generate Roadmap")
roadmap_output = gr.Textbox(label="Generated Roadmap", lines=20)
download_button = gr.Button("Download Roadmap as PDF")
pdf_file = gr.File(label="Download PDF")
generate_button.click(
fn=generate_roadmap,
inputs=[domain, level, time_period],
outputs=roadmap_output
)
download_button.click(
fn=generate_pdf,
inputs=roadmap_output,
outputs=pdf_file
)
app.launch()