BramLeo commited on
Commit
6c29747
·
verified ·
1 Parent(s): 2e2a8a6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -22
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 read_google_sheets():
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
- all_data = []
24
  spreadsheet = client.open_by_key(SPREADSHEET_ID)
25
 
26
  for sheet_name in sheet_names:
27
- try:
28
- sheet = spreadsheet.worksheet(sheet_name)
29
- data = sheet.get_all_values()
30
- all_data.append(f"=== Data dari {sheet_name.upper()} ===")
31
- all_data.extend([" | ".join(row) for row in data])
32
- all_data.append("\n")
33
- except gspread.exceptions.WorksheetNotFound:
34
- all_data.append(f" Worksheet {sheet_name} tidak ditemukan.")
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 asisten HRD yang membantu karyawan memahami administrasi perusahaan. Jawablah dengan Bahasa Indonesia yang profesional dan ramah. Jika tidak tahu, katakan tidak tahu dengan sopan. Jangan jawab dalam bahasa Inggris.
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 = read_google_sheets()
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()