Download scrapapp.py from JanviMl/Taskmate: direct link, hf CLI and curl.
- Browser
- Download file 3.33 kB
-
https://huggingface.co/spaces/JanviMl/Taskmate/resolve/main/scrapapp.py
- Command line
-
hf download hf://spaces/JanviMl/Taskmate/scrapapp.py
-
curl -L -o scrapapp.py https://huggingface.co/spaces/JanviMl/Taskmate/resolve/main/scrapapp.py
3.33 kB
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| import torch | |
| import firebase_admin | |
| from firebase_admin import credentials, db | |
| import os | |
| import json | |
| # Load Firebase credentials from firebase-key.json | |
| firebase_key_path = os.environ.get("FIREBASE_KEY_PATH", "firebase-key.json") | |
| with open(firebase_key_path, "r") as f: | |
| firebase_config = json.load(f) | |
| # Initialize Firebase | |
| cred = credentials.Certificate(firebase_config) | |
| firebase_admin.initialize_app(cred, { | |
| "databaseURL": "https://taskmate-d6e71-default-rtdb.firebaseio.com/" # Confirm this URL! | |
| }) | |
| ref = db.reference("tasks") | |
| # Load IBM Granite model from Hugging Face | |
| model_name = "ibm-granite/granite-7b-base—" # Switch to "granite-3b" if 7b is too heavy | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForCausalLM.from_pretrained(model_name) | |
| # Function to generate text with Granite | |
| def generate_response(prompt, max_length=100): | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| outputs = model.generate(**inputs, max_length=max_length, num_return_sequences=1) | |
| return tokenizer.decode(outputs[0], skip_special_tokens=True).strip() | |
| # Parse user input into structured task | |
| def parse_task(input_text, persona="default"): | |
| prompt = f"For a {persona} employee, extract task, time, priority from: '{input_text}'" | |
| response = generate_response(prompt) | |
| return response # e.g., "Task: Email boss, Time: Today, Priority: High" | |
| # Generate persona-specific subtasks | |
| def generate_subtasks(task, persona="default"): | |
| prompt = f"List 3 subtasks for '{task}' suited for a {persona} employee." | |
| response = generate_response(prompt, max_length=150) | |
| return response # e.g., "1. Draft email\n2. Send it\n3. Chill" | |
| # Main chat function | |
| def task_mate_chat(user_input, persona, chat_history): | |
| # Parse the input | |
| parsed = parse_task(user_input, persona) | |
| task_name = parsed.split(",")[0].replace("Task: ", "").strip() | |
| # Generate subtasks | |
| subtasks = generate_subtasks(task_name, persona) | |
| # Store in Firebase | |
| task_data = { | |
| "input": user_input, | |
| "parsed": parsed, | |
| "subtasks": subtasks, | |
| "persona": persona, | |
| "timestamp": str(db.ServerValue.TIMESTAMP) | |
| } | |
| ref.push().set(task_data) | |
| # Format response | |
| response = f"Parsed: {parsed}\nSubtasks:\n{subtasks}" | |
| chat_history.append((user_input, response)) | |
| return "", chat_history | |
| # Gradio Interface | |
| with gr.Blocks(title="Task_Mate") as interface: | |
| gr.Markdown("# Task_Mate: Your AI Task Buddy") | |
| persona = gr.Dropdown(["lazy", "multitasker", "perfect"], label="Who are you?", value="lazy") | |
| chatbot = gr.Chatbot(label="Chat with Task_Mate") | |
| msg = gr.Textbox(label="Talk to me", placeholder="e.g., 'What’s today?' or 'Meeting at 2 PM'") | |
| submit = gr.Button("Submit") | |
| # Handle chat submission | |
| submit.click( | |
| fn=task_mate_chat, | |
| inputs=[msg, persona, chatbot], | |
| outputs=[msg, chatbot] | |
| ) | |
| # Examples for each persona | |
| gr.Examples( | |
| examples=[ | |
| ["What’s today?", "lazy"], | |
| ["Meeting Sarah, slides, IT call", "multitasker"], | |
| ["Email boss by 3 PM", "perfect"] | |
| ], | |
| inputs=[msg, persona], | |
| outputs=chatbot | |
| ) | |
| interface.launch() |