Update app.py
Browse files
app.py
CHANGED
@@ -7,11 +7,7 @@ from oauth2client.service_account import ServiceAccountCredentials
|
|
7 |
# =============== 1. Cache Google Sheets ===============
|
8 |
cached_text_data = None
|
9 |
|
10 |
-
def
|
11 |
-
global cached_text_data
|
12 |
-
if cached_text_data is not None:
|
13 |
-
return cached_text_data
|
14 |
-
|
15 |
try:
|
16 |
scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
|
17 |
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
|
@@ -20,26 +16,22 @@ def read_google_sheets():
|
|
20 |
SPREADSHEET_ID = "1e_cNMhwF-QYpyYUpqQh-XCw-OdhWS6EuYsoBUsVtdNg"
|
21 |
sheet_names = ["datatarget", "datacuti", "dataabsen", "datalembur", "pkb"]
|
22 |
|
23 |
-
|
24 |
spreadsheet = client.open_by_key(SPREADSHEET_ID)
|
25 |
|
26 |
for sheet_name in sheet_names:
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
cached_text_data = "\n".join(all_data).strip()
|
37 |
-
return cached_text_data
|
38 |
|
39 |
except Exception as e:
|
40 |
return f"❌ ERROR: {str(e)}"
|
41 |
|
42 |
-
|
43 |
# =============== 2. Load Model Transformers ===============
|
44 |
def load_model():
|
45 |
model_id = "HuggingFaceH4/zephyr-7b-beta" # Bisa ganti ke Zephyr juga
|
@@ -65,7 +57,7 @@ def load_model():
|
|
65 |
def generate_prompt(user_message, context_data):
|
66 |
prompt = f"""
|
67 |
### SISTEM:
|
68 |
-
Anda adalah
|
69 |
### DATA:
|
70 |
{context_data}
|
71 |
### PERTANYAAN:
|
@@ -77,17 +69,15 @@ Anda adalah asisten HRD yang membantu karyawan memahami administrasi perusahaan.
|
|
77 |
|
78 |
# =============== 4. Generate Response ===============
|
79 |
def generate_response(message, history, pipe):
|
80 |
-
context =
|
81 |
full_prompt = generate_prompt(message, context)
|
82 |
response = pipe(full_prompt)[0]["generated_text"]
|
83 |
|
84 |
-
# Bersihkan jawaban: ambil bagian setelah ### JAWABAN:
|
85 |
cleaned = response.split("### JAWABAN:")[-1].strip()
|
86 |
history = history or []
|
87 |
history.append((message, cleaned))
|
88 |
return cleaned
|
89 |
|
90 |
-
|
91 |
# =============== 5. Jalankan Gradio ===============
|
92 |
def main():
|
93 |
pipe = load_model()
|
|
|
7 |
# =============== 1. Cache Google Sheets ===============
|
8 |
cached_text_data = None
|
9 |
|
10 |
+
def search_google_sheets(user_query):
|
|
|
|
|
|
|
|
|
11 |
try:
|
12 |
scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
|
13 |
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
|
|
|
16 |
SPREADSHEET_ID = "1e_cNMhwF-QYpyYUpqQh-XCw-OdhWS6EuYsoBUsVtdNg"
|
17 |
sheet_names = ["datatarget", "datacuti", "dataabsen", "datalembur", "pkb"]
|
18 |
|
19 |
+
matched_data = []
|
20 |
spreadsheet = client.open_by_key(SPREADSHEET_ID)
|
21 |
|
22 |
for sheet_name in sheet_names:
|
23 |
+
sheet = spreadsheet.worksheet(sheet_name)
|
24 |
+
data = sheet.get_all_values()
|
25 |
+
for row in data:
|
26 |
+
row_text = " | ".join(row)
|
27 |
+
if user_query.lower() in row_text.lower():
|
28 |
+
matched_data.append(row_text)
|
29 |
+
|
30 |
+
return "\n".join(matched_data) if matched_data else "Maaf, saya tidak menemukan informasi yang relevan."
|
|
|
|
|
|
|
31 |
|
32 |
except Exception as e:
|
33 |
return f"❌ ERROR: {str(e)}"
|
34 |
|
|
|
35 |
# =============== 2. Load Model Transformers ===============
|
36 |
def load_model():
|
37 |
model_id = "HuggingFaceH4/zephyr-7b-beta" # Bisa ganti ke Zephyr juga
|
|
|
57 |
def generate_prompt(user_message, context_data):
|
58 |
prompt = f"""
|
59 |
### SISTEM:
|
60 |
+
Anda adalah chatbot HRD yang membantu karyawan memahami administrasi perusahaan. Jangan menjawab menggunakan Bahasa Inggris. Gunakan Bahasa Indonesia dengan gaya profesional dan ramah. Jika informasi tidak tersedia dalam dokumen, katakan dengan sopan bahwa Anda tidak tahu. Jawaban harus singkat, jelas, dan sesuai konteks. Jangan memberikan jawaban untuk pertanyaan yang tidak diajukan oleh pengguna. Jangan menyertakan rekomendasi pertanyaan lain.
|
61 |
### DATA:
|
62 |
{context_data}
|
63 |
### PERTANYAAN:
|
|
|
69 |
|
70 |
# =============== 4. Generate Response ===============
|
71 |
def generate_response(message, history, pipe):
|
72 |
+
context = search_google_sheets(message) # 🔍 Cari hanya bagian yang relevan
|
73 |
full_prompt = generate_prompt(message, context)
|
74 |
response = pipe(full_prompt)[0]["generated_text"]
|
75 |
|
|
|
76 |
cleaned = response.split("### JAWABAN:")[-1].strip()
|
77 |
history = history or []
|
78 |
history.append((message, cleaned))
|
79 |
return cleaned
|
80 |
|
|
|
81 |
# =============== 5. Jalankan Gradio ===============
|
82 |
def main():
|
83 |
pipe = load_model()
|