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 # Access the API key from Hugging Face Secrets openai.api_key = os.environ.get("OPENAI_API_KEY") # Sample dataset of resources resources = pd.DataFrame({ "Resource": ["Python Tutorial", "Math Basics", "Data Structures", "Machine Learning Intro"], "Type": ["Video", "Article", "Video", "Video"], "Learning Style": ["Visual", "Reading", "Visual", "Visual"] }) # Global variables tasks = [] points = 0 # Function to recommend resources 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] # Function to add a task def add_task(task, deadline, priority): global tasks tasks.append({"Task": task, "Deadline": deadline, "Priority": priority, "Completed": False}) return "Task added successfully!" # Function to mark a task as completed def mark_completed(task_index): global tasks, points if 0 <= task_index < len(tasks): tasks[task_index]["Completed"] = True points += 10 # Award 10 points for completing a task return f"Task marked as completed! You earned 10 points. Total points: {points}" return "Invalid task index." # Function to visualize progress def show_progress(): completed = sum(1 for task in tasks if task["Completed"]) remaining = len(tasks) - completed # Create a progress chart 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}" # Function to interact with the chatbot def chatbot(user_input): response = openai.Completion.create( engine="text-davinci-003", prompt=user_input, max_tokens=50 ) return response.choices[0].text.strip() # Function to sync tasks with Google Calendar 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!" # Gradio Interface 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) # Launch the app demo.launch()