| | import gradio as gr |
| | import pandas as pd |
| | from sklearn.feature_extraction.text import TfidfVectorizer |
| | from sklearn.metrics.pairwise import cosine_similarity |
| | import openai |
| | import matplotlib.pyplot as plt |
| | from io import BytesIO |
| | import base64 |
| | import os |
| | from google.auth.transport.requests import Request |
| | from google.oauth2.credentials import Credentials |
| | from google_auth_oauthlib.flow import InstalledAppFlow |
| | from googleapiclient.discovery import build |
| |
|
| | |
| | openai.api_key = os.environ.get("OPENAI_API_KEY") |
| |
|
| | |
| | resources = pd.DataFrame({ |
| | "Resource": ["Python Tutorial", "Math Basics", "Data Structures", "Machine Learning Intro"], |
| | "Type": ["Video", "Article", "Video", "Video"], |
| | "Learning Style": ["Visual", "Reading", "Visual", "Visual"] |
| | }) |
| |
|
| | |
| | tasks = [] |
| | points = 0 |
| |
|
| | |
| | def recommend_resources(learning_style): |
| | vectorizer = TfidfVectorizer() |
| | tfidf_matrix = vectorizer.fit_transform(resources["Learning Style"]) |
| | user_vector = vectorizer.transform([learning_style]) |
| | similarities = cosine_similarity(user_vector, tfidf_matrix) |
| | recommended_index = similarities.argmax() |
| | return resources.iloc[recommended_index] |
| |
|
| | |
| | def add_task(task, deadline, priority): |
| | global tasks |
| | tasks.append({"Task": task, "Deadline": deadline, "Priority": priority, "Completed": False}) |
| | return "Task added successfully!" |
| |
|
| | |
| | def mark_completed(task_index): |
| | global tasks, points |
| | if 0 <= task_index < len(tasks): |
| | tasks[task_index]["Completed"] = True |
| | points += 10 |
| | return f"Task marked as completed! You earned 10 points. Total points: {points}" |
| | return "Invalid task index." |
| |
|
| | |
| | def show_progress(): |
| | completed = sum(1 for task in tasks if task["Completed"]) |
| | remaining = len(tasks) - completed |
| | |
| | |
| | plt.bar(["Completed", "Remaining"], [completed, remaining], color=["green", "red"]) |
| | plt.title("Study Progress") |
| | buffer = BytesIO() |
| | plt.savefig(buffer, format="png") |
| | buffer.seek(0) |
| | image_base64 = base64.b64encode(buffer.getvalue()).decode("utf-8") |
| | plt.close() |
| | return f"data:image/png;base64,{image_base64}" |
| |
|
| | |
| | def chatbot(user_input): |
| | response = openai.Completion.create( |
| | engine="text-davinci-003", |
| | prompt=user_input, |
| | max_tokens=50 |
| | ) |
| | return response.choices[0].text.strip() |
| |
|
| | |
| | def sync_with_calendar(): |
| | creds = None |
| | if os.path.exists("token.json"): |
| | creds = Credentials.from_authorized_user_file("token.json", ["https://www.googleapis.com/auth/calendar"]) |
| | if not creds or not creds.valid: |
| | if creds and creds.expired and creds.refresh_token: |
| | creds.refresh(Request()) |
| | else: |
| | flow = InstalledAppFlow.from_client_secrets_file("credentials.json", ["https://www.googleapis.com/auth/calendar"]) |
| | creds = flow.run_local_server(port=0) |
| | with open("token.json", "w") as token: |
| | token.write(creds.to_json()) |
| | |
| | service = build("calendar", "v3", credentials=creds) |
| | for task in tasks: |
| | event = { |
| | "summary": task["Task"], |
| | "start": {"dateTime": task["Deadline"] + "T09:00:00", "timeZone": "UTC"}, |
| | "end": {"dateTime": task["Deadline"] + "T10:00:00", "timeZone": "UTC"}, |
| | } |
| | event = service.events().insert(calendarId="primary", body=event).execute() |
| | return "Tasks synced with Google Calendar!" |
| |
|
| | |
| | with gr.Blocks() as demo: |
| | gr.Markdown("# AI-Powered Study Assistant") |
| | |
| | with gr.Tab("Task Management"): |
| | with gr.Row(): |
| | task_input = gr.Textbox(label="Task") |
| | deadline_input = gr.Textbox(label="Deadline (YYYY-MM-DD)") |
| | priority_input = gr.Textbox(label="Priority (High/Medium/Low)") |
| | add_task_button = gr.Button("Add Task") |
| | task_output = gr.Textbox(label="Output") |
| | add_task_button.click(add_task, inputs=[task_input, deadline_input, priority_input], outputs=task_output) |
| | |
| | with gr.Row(): |
| | task_index_input = gr.Number(label="Task Index to Mark as Completed") |
| | mark_completed_button = gr.Button("Mark Completed") |
| | mark_completed_output = gr.Textbox(label="Output") |
| | mark_completed_button.click(mark_completed, inputs=task_index_input, outputs=mark_completed_output) |
| | |
| | gr.Markdown("### Tasks") |
| | task_list = gr.Dataframe(headers=["Task", "Deadline", "Priority", "Completed"], value=tasks) |
| | |
| | with gr.Tab("Progress Tracking"): |
| | progress_button = gr.Button("Show Progress") |
| | progress_image = gr.Image(label="Progress Chart") |
| | progress_button.click(show_progress, outputs=progress_image) |
| | |
| | with gr.Tab("Chatbot"): |
| | chatbot_input = gr.Textbox(label="Ask a question:") |
| | chatbot_output = gr.Textbox(label="Chatbot Response") |
| | chatbot_button = gr.Button("Ask") |
| | chatbot_button.click(chatbot, inputs=chatbot_input, outputs=chatbot_output) |
| | |
| | with gr.Tab("Recommendations"): |
| | learning_style_input = gr.Textbox(label="Enter your preferred learning style (Visual/Reading):") |
| | recommendation_output = gr.Textbox(label="Recommended Resource") |
| | recommend_button = gr.Button("Get Recommendation") |
| | recommend_button.click(recommend_resources, inputs=learning_style_input, outputs=recommendation_output) |
| | |
| | with gr.Tab("Google Calendar Sync"): |
| | sync_button = gr.Button("Sync with Google Calendar") |
| | sync_output = gr.Textbox(label="Output") |
| | sync_button.click(sync_with_calendar, outputs=sync_output) |
| |
|
| | |
| | demo.launch() |