Taskmate / scrapapp.py
JanviMl's picture
Rename app.py to scrapapp.py
7a469ff verified
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()