BramLeo commited on
Commit
9657a0d
·
verified ·
1 Parent(s): b571d20

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -24
app.py CHANGED
@@ -40,31 +40,49 @@ def read_pkb_json():
40
  # ===================================
41
  def read_google_sheets():
42
  try:
 
43
  scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
 
 
44
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
45
  client = gspread.authorize(creds)
46
-
 
47
  SPREADSHEET_ID = "1e_cNMhwF-QYpyYUpqQh-XCw-OdhWS6EuYsoBUsVtdNg"
 
 
48
  sheet_names = ["datatarget", "datacuti", "dataabsen", "datalembur"]
49
 
50
- all_data = []
 
 
51
  spreadsheet = client.open_by_key(SPREADSHEET_ID)
52
  for sheet_name in sheet_names:
53
  try:
54
  sheet = spreadsheet.worksheet(sheet_name)
55
  data = sheet.get_all_values()
 
 
56
  all_data.append(f"=== Data dari {sheet_name.upper()} ===")
57
  all_data.extend([" | ".join(row) for row in data])
58
- all_data.append("\n")
 
59
  except gspread.exceptions.WorksheetNotFound:
60
  all_data.append(f"❌ ERROR: Worksheet {sheet_name} tidak ditemukan.")
61
 
62
- return "\n".join(all_data)
 
 
 
 
 
 
 
63
  except Exception as e:
64
  return f"❌ ERROR: {str(e)}"
65
 
66
  # ===================================
67
- # 3️⃣ Inisialisasi Model Llama
68
  # ===================================
69
  def initialize_llama_model():
70
  model_path = hf_hub_download(
@@ -75,20 +93,33 @@ def initialize_llama_model():
75
  return model_path
76
 
77
  # ===================================
78
- # 4️⃣ Inisialisasi Index Data PKB & Spreadsheet
 
 
 
 
 
 
 
 
 
79
  # ===================================
80
  def initialize_index():
81
  text_data = read_google_sheets() + "\n" + read_pkb_json()
82
  document = Document(text=text_data)
 
 
83
  parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
84
- nodes = parser.get_nodes_from_documents([document])
 
85
  embedding = HuggingFaceEmbedding("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
86
  Settings.embed_model = embedding
 
87
  index = VectorStoreIndex(nodes)
88
  return index
89
 
90
  # ===================================
91
- # 5️⃣ Inisialisasi Chatbot
92
  # ===================================
93
  def initialize_chat_engine(index):
94
  retriever = index.as_retriever(similarity_top_k=3)
@@ -99,26 +130,40 @@ def initialize_chat_engine(index):
99
  return chat_engine
100
 
101
  # ===================================
102
- # 6️⃣ Fungsi untuk Respons Chatbot
103
  # ===================================
104
  def generate_response(message, history, chat_engine):
105
  if history is None:
106
  history = []
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  chat_messages = [
109
- ChatMessage(
110
- role="system",
111
- content=(
112
- "Anda adalah chatbot yang dirancang khusus untuk berbicara dalam Bahasa Indonesia. "
113
  "Anda adalah chatbot HRD yang membantu karyawan dalam memahami administrasi dan data perusahaan. "
114
  "Anda tidak diperbolehkan menjawab dalam bahasa lain, termasuk Inggris. "
115
  "Gunakan gaya bahasa profesional tetapi tetap ramah. "
116
  "Jika informasi tidak tersedia dalam dokumen, katakan dengan sopan bahwa Anda tidak tahu. "
117
  "Pastikan setiap jawaban diberikan secara ringkas, jelas, dan sesuai konteks."
118
  "Jawaban harus singkat, jelas, dan dalam Bahasa Indonesia."
119
- ),
120
  ),
121
- ]
 
122
 
123
  response = chat_engine.stream_chat(message)
124
  text = "".join(response.response_gen)
@@ -131,17 +176,14 @@ def generate_response(message, history, chat_engine):
131
  # ===================================
132
  def main():
133
  model_path = initialize_llama_model()
134
- Settings.llm = LlamaCPP(
135
- model_path=model_path,
136
- temperature=0.7,
137
- )
138
-
139
  index = initialize_index()
140
- chat_engine = initialize_chat_engine(index)
141
-
142
  def chatbot_response(message, history):
143
- return generate_response(message, history, chat_engine)
144
-
145
  gr.Interface(
146
  fn=chatbot_response,
147
  inputs=["text"],
 
40
  # ===================================
41
  def read_google_sheets():
42
  try:
43
+ # Tentukan scope akses ke Google Sheets & Drive
44
  scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
45
+
46
+ # Load kredensial dari file credentials.json
47
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
48
  client = gspread.authorize(creds)
49
+
50
+ # ID Spreadsheet (tetap sama untuk semua sheet)
51
  SPREADSHEET_ID = "1e_cNMhwF-QYpyYUpqQh-XCw-OdhWS6EuYsoBUsVtdNg"
52
+
53
+ # 📌 Daftar nama worksheet yang akan dibaca
54
  sheet_names = ["datatarget", "datacuti", "dataabsen", "datalembur"]
55
 
56
+ all_data = [] # 🔹 List untuk menyimpan semua data
57
+
58
+ # 📌 Loop untuk membaca setiap worksheet
59
  spreadsheet = client.open_by_key(SPREADSHEET_ID)
60
  for sheet_name in sheet_names:
61
  try:
62
  sheet = spreadsheet.worksheet(sheet_name)
63
  data = sheet.get_all_values()
64
+
65
+ # Tambahkan header nama sheet sebelum data untuk membedakan
66
  all_data.append(f"=== Data dari {sheet_name.upper()} ===")
67
  all_data.extend([" | ".join(row) for row in data])
68
+ all_data.append("\n") # Pisahkan tiap sheet dengan newline
69
+
70
  except gspread.exceptions.WorksheetNotFound:
71
  all_data.append(f"❌ ERROR: Worksheet {sheet_name} tidak ditemukan.")
72
 
73
+ # Gabungkan semua data menjadi satu string panjang
74
+ formatted_text = "\n".join(all_data)
75
+
76
+ return formatted_text
77
+
78
+ except gspread.exceptions.SpreadsheetNotFound:
79
+ return "❌ ERROR: Spreadsheet tidak ditemukan. Pastikan ID/nama benar!"
80
+
81
  except Exception as e:
82
  return f"❌ ERROR: {str(e)}"
83
 
84
  # ===================================
85
+ # 2️⃣ Fungsi untuk Mengunduh Model Llama
86
  # ===================================
87
  def initialize_llama_model():
88
  model_path = hf_hub_download(
 
93
  return model_path
94
 
95
  # ===================================
96
+ # 3️⃣ Inisialisasi Model dan Pengaturan
97
+ # ===================================
98
+ def initialize_settings(model_path):
99
+ Settings.llm = LlamaCPP(
100
+ model_path=model_path,
101
+ temperature=0.7,
102
+ )
103
+
104
+ # ===================================
105
+ # 4️⃣ Inisialisasi Index dari Data Spreadsheet
106
  # ===================================
107
  def initialize_index():
108
  text_data = read_google_sheets() + "\n" + read_pkb_json()
109
  document = Document(text=text_data)
110
+ documents = [document]
111
+
112
  parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
113
+ nodes = parser.get_nodes_from_documents(documents)
114
+
115
  embedding = HuggingFaceEmbedding("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
116
  Settings.embed_model = embedding
117
+
118
  index = VectorStoreIndex(nodes)
119
  return index
120
 
121
  # ===================================
122
+ # 5️⃣ Inisialisasi Mesin Chatbot
123
  # ===================================
124
  def initialize_chat_engine(index):
125
  retriever = index.as_retriever(similarity_top_k=3)
 
130
  return chat_engine
131
 
132
  # ===================================
133
+ # 6️⃣ Fungsi untuk Menghasilkan Respons Chatbot
134
  # ===================================
135
  def generate_response(message, history, chat_engine):
136
  if history is None:
137
  history = []
138
 
139
+ text_data = read_google_sheets()
140
+ document = Document(text=text_data)
141
+ documents = [document]
142
+
143
+ parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
144
+ nodes = parser.get_nodes_from_documents(documents)
145
+ index = VectorStoreIndex(nodes)
146
+ retriever = index.as_retriever(similarity_top_k=3)
147
+
148
+ chat_engine = CondensePlusContextChatEngine.from_defaults(
149
+ retriever=retriever,
150
+ verbose=True,
151
+ )
152
+
153
  chat_messages = [
154
+ ChatMessage(
155
+ role="system",
156
+ content=(
157
+ "Anda adalah chatbot yang dirancang khusus untuk berbicara dalam Bahasa Indonesia. "
158
  "Anda adalah chatbot HRD yang membantu karyawan dalam memahami administrasi dan data perusahaan. "
159
  "Anda tidak diperbolehkan menjawab dalam bahasa lain, termasuk Inggris. "
160
  "Gunakan gaya bahasa profesional tetapi tetap ramah. "
161
  "Jika informasi tidak tersedia dalam dokumen, katakan dengan sopan bahwa Anda tidak tahu. "
162
  "Pastikan setiap jawaban diberikan secara ringkas, jelas, dan sesuai konteks."
163
  "Jawaban harus singkat, jelas, dan dalam Bahasa Indonesia."
 
164
  ),
165
+ ),
166
+ ]
167
 
168
  response = chat_engine.stream_chat(message)
169
  text = "".join(response.response_gen)
 
176
  # ===================================
177
  def main():
178
  model_path = initialize_llama_model()
179
+ initialize_settings(model_path)
180
+
 
 
 
181
  index = initialize_index()
182
+ chat_engine = initialize_chat_engine(index)
183
+
184
  def chatbot_response(message, history):
185
+ return generate_response(message, history, chat_engine)
186
+
187
  gr.Interface(
188
  fn=chatbot_response,
189
  inputs=["text"],