Spaces:
Sleeping
Sleeping
| cimport os | |
| import streamlit as st | |
| from groq import Groq | |
| from fpdf import FPDF | |
| # Set up Groq API client | |
| groq_api_key = os.getenv("GROQ_API_KEY") | |
| client = Groq(api_key=groq_api_key) | |
| # Initialize Streamlit app | |
| st.title("Timetable Generator") | |
| # Step 1: Collect user inputs for timetable generation | |
| subjects = ['Mathematics', 'Chemistry', 'Science', 'Engineering'] | |
| days_of_week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] | |
| num_days = st.slider('Select the number of days for your timetable', 1, 7, 5) | |
| time_slots = st.slider('Select the number of time slots per day', 1, 6, 4) | |
| # User input for subjects and time slots | |
| subject_schedule = {day: {subject: [] for subject in subjects} for day in days_of_week[:num_days]} | |
| for day in days_of_week[:num_days]: | |
| st.subheader(f"Schedule for {day}") | |
| for subject in subjects: | |
| subject_schedule[day][subject] = st.multiselect(f"Choose time slots for {subject} on {day}", | |
| options=[f"{hour}:00" for hour in range(8, 8 + time_slots)], | |
| label_visibility="collapsed") | |
| # Step 2: Request timetable generation from Groq API | |
| if st.button("Generate Timetable"): | |
| timetable_input = f"Create a timetable for {subject_schedule}. The timetable should span {num_days} days and include the following subjects: {', '.join(subjects)}." | |
| # API call to Groq's Llama model | |
| chat_completion = client.chat.completions.create( | |
| messages=[{"role": "user", "content": timetable_input}], | |
| model="llama-3.3-70b-versatile" | |
| ) | |
| # Extract generated timetable | |
| generated_timetable = chat_completion.choices[0].message.content | |
| st.write(generated_timetable) | |
| # Step 3: Generate a PDF with the timetable | |
| pdf = FPDF() | |
| pdf.set_auto_page_break(auto=True, margin=15) | |
| pdf.add_page() | |
| # Set Title | |
| pdf.set_font("Arial", size=12, style='B') | |
| pdf.cell(200, 10, txt="Weekly Timetable", ln=True, align='C') | |
| # Add each day's schedule to the PDF | |
| pdf.set_font("Arial", size=10) | |
| for day in subject_schedule: | |
| pdf.ln(10) | |
| pdf.cell(200, 10, txt=day, ln=True, align='L') | |
| for subject in subject_schedule[day]: | |
| time_slots = ", ".join(subject_schedule[day][subject]) | |
| pdf.cell(200, 10, txt=f"{subject}: {time_slots}", ln=True) | |
| # Save the PDF | |
| pdf.output("timetable.pdf") | |
| # Step 4: Allow user to download the PDF | |
| with open("timetable.pdf", "rb") as f: | |
| st.download_button( | |
| label="Download Timetable as PDF", | |
| data=f, | |
| file_name="timetable.pdf", | |
| mime="application/pdf" | |
| ) | |