File size: 2,306 Bytes
304653d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import pandas as pd
import datetime
from openai import OpenAI
import os

# ๐Ÿ” Setup API Key (store as HF_SECRET)
openai_api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=openai_api_key)

def generate_plan(subjects, exam_date, hours_per_day):
    subjects = [s.strip() for s in subjects.split(",")]
    exam_date = pd.to_datetime(exam_date)
    today = pd.to_datetime("today").normalize()
    total_days = (exam_date - today).days

    if total_days <= 0 or not subjects:
        return "Invalid input", None, None

    total_hours = total_days * hours_per_day
    hours_per_subject = total_hours // len(subjects)

    # Simple schedule
    schedule = []
    for i in range(total_days):
        date = today + pd.Timedelta(days=i)
        subject = subjects[i % len(subjects)]
        schedule.append({
            "Date": date.date(),
            "Subject": subject,
            "Hours": round(hours_per_day / len(subjects), 2)
        })

    df = pd.DataFrame(schedule)

    # Generate Tip from LLM
    prompt = f"""Generate a short, motivating study tip for a student studying {', '.join(subjects)} with {hours_per_day} hours per day until {exam_date.date()}."""
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    tip = response.choices[0].message.content.strip()

    return tip, df, df.to_csv(index=False)

# Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("## ๐Ÿ“š Personalized Study Plan Generator")

    subjects = gr.Textbox(label="Enter subjects (comma-separated)")
    exam_date = gr.Textbox(label="Enter exam date (YYYY-MM-DD)")
    hours = gr.Slider(1, 12, step=1, label="Hours per day")
    btn = gr.Button("Generate Plan")

    output_tip = gr.Textbox(label="AI Study Tip")
    output_table = gr.Dataframe(label="Study Plan")
    download_csv = gr.File(label="Download CSV")

    def generate_and_show(subjects, exam_date, hours):
        tip, df, csv = generate_plan(subjects, exam_date, hours)
        with open("study_plan.csv", "w") as f:
            f.write(csv)
        return tip, df, "study_plan.csv"

    btn.click(fn=generate_and_show, inputs=[subjects, exam_date, hours],
              outputs=[output_tip, output_table, download_csv])

demo.launch()