BramLeo commited on
Commit
bc7d716
·
verified ·
1 Parent(s): 1c4e26b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -32
app.py CHANGED
@@ -1,6 +1,5 @@
1
  import gradio as gr
2
  import gspread
3
- import time
4
  from oauth2client.service_account import ServiceAccountCredentials
5
  from llama_cpp import Llama
6
  from llama_index.core import VectorStoreIndex, Settings
@@ -13,15 +12,9 @@ from llama_index.core.chat_engine.condense_plus_context import CondensePlusConte
13
  from llama_index.core.schema import Document
14
 
15
  # ===================================
16
- # 1️⃣ Cache Data Google Sheets
17
  # ===================================
18
- cached_text_data = None
19
-
20
  def read_google_sheets():
21
- global cached_text_data
22
- if cached_text_data is not None:
23
- return cached_text_data
24
-
25
  try:
26
  scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
27
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
@@ -43,8 +36,7 @@ def read_google_sheets():
43
  except gspread.exceptions.WorksheetNotFound:
44
  all_data.append(f"❌ ERROR: Worksheet {sheet_name} tidak ditemukan.")
45
 
46
- cached_text_data = "\n".join(all_data).strip()
47
- return cached_text_data
48
 
49
  except gspread.exceptions.SpreadsheetNotFound:
50
  return "❌ ERROR: Spreadsheet tidak ditemukan!"
@@ -57,7 +49,7 @@ def read_google_sheets():
57
  # ===================================
58
  def initialize_llama_model():
59
  model_path = hf_hub_download(
60
- repo_id="TheBloke/zephyr-7b-beta-GGUF",
61
  filename="zephyr-7b-beta.Q4_K_M.gguf",
62
  cache_dir="./models"
63
  )
@@ -66,17 +58,8 @@ def initialize_llama_model():
66
  # ===================================
67
  # 3️⃣ Inisialisasi Pengaturan Model
68
  # ===================================
69
-
70
  def initialize_settings(model_path):
71
- Settings.llm = LlamaCPP(
72
- model_path=model_path,
73
- temperature=0.7,
74
- context_window=4096,
75
- max_new_tokens=512,
76
- # n_gpu_layers=20, # ❌ Hapus jika error
77
- model_kwargs={"n_ctx": 4096}
78
- )
79
-
80
 
81
  # ===================================
82
  # 4️⃣ Inisialisasi Index & Chat Engine
@@ -87,17 +70,17 @@ def initialize_index():
87
  parser = SentenceSplitter(chunk_size=100, chunk_overlap=30)
88
  nodes = parser.get_nodes_from_documents([document])
89
 
90
- embedding = HuggingFaceEmbedding("sentence-transformers/all-MiniLM-L6-v2") # ✅ Lebih ringan
91
  Settings.embed_model = embedding
92
 
93
  index = VectorStoreIndex(nodes)
94
  return index
95
 
96
  def initialize_chat_engine(index):
97
- retriever = index.as_retriever(similarity_top_k=1) # ✅ Kurangi ke 1 untuk kecepatan
98
  chat_engine = CondensePlusContextChatEngine.from_defaults(
99
  retriever=retriever,
100
- verbose=False
101
  )
102
  return chat_engine
103
 
@@ -105,8 +88,8 @@ def initialize_chat_engine(index):
105
  # 5️⃣ Fungsi untuk Merapikan Jawaban Chatbot
106
  # ===================================
107
  def clean_response(response):
108
- text = "".join(response.response_gen)
109
- text = text.replace("\n\n", "\n").strip()
110
  text = text.replace("user:", "").replace("jawaban:", "").replace("assistant:", "").strip()
111
  return text
112
 
@@ -125,17 +108,17 @@ def generate_response(message, history, chat_engine):
125
  "Jangan menjawab menggunakan Bahasa Inggris. "
126
  "Gunakan Bahasa Indonesia dengan gaya profesional dan ramah. "
127
  "Jika informasi tidak tersedia dalam dokumen, katakan dengan sopan bahwa Anda tidak tahu. "
128
- "Jawaban harus singkat, jelas, dan sesuai konteks. "
129
  "Jangan memberikan jawaban untuk pertanyaan yang tidak diajukan oleh pengguna. "
130
  "Jangan menyertakan rekomendasi pertanyaan lain."
131
  ),
132
  ),
133
  ]
134
 
135
- response = chat_engine.chat(message) # GANTI: pakai .chat() bukan .stream_chat()
136
- cleaned_text = response.response.strip() # GANTI: langsung ambil response
137
 
138
- history.append((message, cleaned_text))
139
  return cleaned_text
140
 
141
  # ===================================
@@ -144,10 +127,10 @@ def generate_response(message, history, chat_engine):
144
  def main():
145
  model_path = initialize_llama_model()
146
  initialize_settings(model_path)
147
-
148
  index = initialize_index()
149
  chat_engine = initialize_chat_engine(index)
150
-
151
  def chatbot_response(message, history):
152
  return generate_response(message, history, chat_engine)
153
 
 
1
  import gradio as gr
2
  import gspread
 
3
  from oauth2client.service_account import ServiceAccountCredentials
4
  from llama_cpp import Llama
5
  from llama_index.core import VectorStoreIndex, Settings
 
12
  from llama_index.core.schema import Document
13
 
14
  # ===================================
15
+ # 1️⃣ Fungsi Membaca Data Google Spreadsheet
16
  # ===================================
 
 
17
  def read_google_sheets():
 
 
 
 
18
  try:
19
  scope = ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/drive"]
20
  creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
 
36
  except gspread.exceptions.WorksheetNotFound:
37
  all_data.append(f"❌ ERROR: Worksheet {sheet_name} tidak ditemukan.")
38
 
39
+ return "\n".join(all_data).strip()
 
40
 
41
  except gspread.exceptions.SpreadsheetNotFound:
42
  return "❌ ERROR: Spreadsheet tidak ditemukan!"
 
49
  # ===================================
50
  def initialize_llama_model():
51
  model_path = hf_hub_download(
52
+ repo_id="TheBLoke/zephyr-7b-beta-GGUF",
53
  filename="zephyr-7b-beta.Q4_K_M.gguf",
54
  cache_dir="./models"
55
  )
 
58
  # ===================================
59
  # 3️⃣ Inisialisasi Pengaturan Model
60
  # ===================================
 
61
  def initialize_settings(model_path):
62
+ Settings.llm = LlamaCPP(model_path=model_path, temperature=0.7)
 
 
 
 
 
 
 
 
63
 
64
  # ===================================
65
  # 4️⃣ Inisialisasi Index & Chat Engine
 
70
  parser = SentenceSplitter(chunk_size=100, chunk_overlap=30)
71
  nodes = parser.get_nodes_from_documents([document])
72
 
73
+ embedding = HuggingFaceEmbedding("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
74
  Settings.embed_model = embedding
75
 
76
  index = VectorStoreIndex(nodes)
77
  return index
78
 
79
  def initialize_chat_engine(index):
80
+ retriever = index.as_retriever(similarity_top_k=3)
81
  chat_engine = CondensePlusContextChatEngine.from_defaults(
82
  retriever=retriever,
83
+ verbose=False # ❌ Hapus verbose agar tidak ada referensi dokumen
84
  )
85
  return chat_engine
86
 
 
88
  # 5️⃣ Fungsi untuk Merapikan Jawaban Chatbot
89
  # ===================================
90
  def clean_response(response):
91
+ text = "".join(response.response_gen) # Gabungkan teks yang dihasilkan
92
+ text = text.replace("\n\n", "\n").strip() # Hilangkan newline berlebihan
93
  text = text.replace("user:", "").replace("jawaban:", "").replace("assistant:", "").strip()
94
  return text
95
 
 
108
  "Jangan menjawab menggunakan Bahasa Inggris. "
109
  "Gunakan Bahasa Indonesia dengan gaya profesional dan ramah. "
110
  "Jika informasi tidak tersedia dalam dokumen, katakan dengan sopan bahwa Anda tidak tahu. "
111
+ "Jawaban harus singkat, jelas, dan sesuai konteks."
112
  "Jangan memberikan jawaban untuk pertanyaan yang tidak diajukan oleh pengguna. "
113
  "Jangan menyertakan rekomendasi pertanyaan lain."
114
  ),
115
  ),
116
  ]
117
 
118
+ response = chat_engine.stream_chat(message)
119
+ cleaned_text = clean_response(response) # 🔹 Gunakan fungsi clean_response()
120
 
121
+ history.append((message, cleaned_text)) # 🔹 Pastikan hanya teks yang masuk ke history
122
  return cleaned_text
123
 
124
  # ===================================
 
127
  def main():
128
  model_path = initialize_llama_model()
129
  initialize_settings(model_path)
130
+
131
  index = initialize_index()
132
  chat_engine = initialize_chat_engine(index)
133
+
134
  def chatbot_response(message, history):
135
  return generate_response(message, history, chat_engine)
136