Prak2005's picture
Update app.py
bc5e078 verified
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()