TaskScheduling / app.py
ghtmarco's picture
Update app.py
ce3c51f verified
import pandas as pd
import numpy as np
import gradio as gr
import joblib
from datetime import datetime
# Load model, scaler, dan feature names
model = joblib.load('random_forest_model.pkl')
scaler = joblib.load('scaler.pkl')
feature_names = joblib.load('feature_names.pkl')['feature_names']
def predict_task_priority(task_name, duration, deadline_str):
try:
# Validasi input task name
if not task_name.strip():
return "Error: Nama tugas tidak boleh kosong"
# Parse deadline string to calculate days
start_date = datetime.now()
try:
deadline = datetime.strptime(deadline_str, '%Y-%m-%d')
except:
return "Error: Format tanggal harus YYYY-MM-DD (contoh: 2024-12-31)"
deadline_days = (deadline - start_date).days
if deadline_days < 0:
return "Error: Deadline tidak boleh di masa lalu"
# Buat DataFrame dengan feature names yang sesuai
input_data = pd.DataFrame({
'duration_hours': [duration],
'deadline_days': [deadline_days]
})
# Transform menggunakan scaler
input_scaled = scaler.transform(input_data)
# Predict
priority = model.predict(input_scaled)[0]
priority_map = {
1: "Tinggi",
2: "Sedang",
3: "Rendah"
}
# Generate response
response = f"Analisis Tugas: {task_name}\n"
response += f"Durasi: {duration} jam\n"
response += f"Deadline: {deadline_str} ({deadline_days} hari lagi)\n"
response += f"Prioritas: {priority_map[priority]}\n\n"
# Add recommendations based on priority
if priority == 1:
response += "Rekomendasi: Kerjakan segera! Deadline dekat dan membutuhkan waktu lama."
response += "\nTindakan yang disarankan:"
response += "\n• Fokus utama pada tugas ini"
response += "\n• Buat jadwal spesifik untuk pengerjaannya"
response += "\n• Siapkan semua resource yang dibutuhkan"
elif priority == 2:
response += "Rekomendasi: Buatlah jadwal yang tepat dan mulai kerjakan secara bertahap."
response += "\nTindakan yang disarankan:"
response += "\n• Bagi tugas menjadi beberapa milestone"
response += "\n• Alokasikan waktu setiap hari untuk progress"
response += "\n• Pantau perkembangan secara reguler"
else:
response += "Rekomendasi: Dapat dikerjakan dengan lebih santai, tapi tetap pantau progress."
response += "\nTindakan yang disarankan:"
response += "\n• Buat timeline longgar untuk pengerjaan"
response += "\n• Sesuaikan dengan jadwal tugas prioritas lain"
response += "\n• Review progress mingguan"
return response
except Exception as e:
return f"Error: {str(e)}"
# Create Gradio interface
iface = gr.Interface(
fn=predict_task_priority,
inputs=[
gr.Textbox(
label="Nama Tugas",
placeholder="Masukkan nama tugas Anda",
info="Contoh: Laporan Akhir, Presentasi Project, dll."
),
gr.Slider(
minimum=1,
maximum=10,
value=5,
step=0.5,
label="Durasi Tugas (dalam jam)",
info="Perkiraan waktu yang dibutuhkan untuk menyelesaikan tugas"
),
gr.Textbox(
label="Deadline (YYYY-MM-DD)",
placeholder="Contoh: 2024-12-31",
info="Masukkan tanggal dalam format YYYY-MM-DD"
)
],
outputs=gr.Textbox(label="Hasil Analisis", lines=10),
title="Sistem Prioritas Tugas",
description="""
Sistem ini akan membantu Anda menentukan prioritas tugas berdasarkan:
1. Durasi pengerjaan tugas
2. Jarak waktu ke deadline
Hasil analisis akan memberikan rekomendasi pengelolaan waktu yang sesuai untuk membantu
Anda mengelola tugas dengan lebih efektif.
""",
examples=[
["Laporan Akhir Semester", 8, "2024-11-30"],
["Presentasi Project", 3, "2024-12-15"],
["Revisi Proposal", 5, "2024-11-25"]
]
)
if __name__ == "__main__":
iface.launch()