BramLeo commited on
Commit
87f1fea
·
verified ·
1 Parent(s): 2ccd845

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +247 -87
app.py CHANGED
@@ -1,101 +1,261 @@
1
- # Import Library yang Diperlukan
2
- import gradio as gr
3
- import shutil
4
- import os
5
- import subprocess
 
 
 
 
 
 
 
 
6
  from llama_cpp import Llama
7
- from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings
8
- from llama_index.core.llms import ChatMessage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  from llama_index.llms.llama_cpp import LlamaCPP
10
- from llama_index.embeddings.huggingface import HuggingFaceEmbedding
11
- from huggingface_hub import hf_hub_download
12
- from llama_index.core.node_parser import SentenceSplitter
 
 
13
 
14
- # Fungsi untuk mengunduh model Llama
15
- def initialize_llama_model():
16
- # Unduh model jika belum ada di direktori kerja
17
- model_path = hf_hub_download(
18
- repo_id="TheBLoke/zephyr-7b-beta-GGUF", # Nama repo model
19
- filename="zephyr-7b-beta.Q4_K_M.gguf", # Nama file model
20
- cache_dir="./models" # Lokasi direktori untuk menyimpan model
21
- )
22
- return model_path
23
 
24
- # Fungsi untuk mengatur konfigurasi Settings
25
- def initialize_settings(model_path):
26
- Settings.llm = LlamaCPP(
27
- model_path=model_path,
28
- temperature=0.7,
29
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- # Fungsi untuk Menginisialisasi Index
32
- def initialize_index():
33
- # Tentukan dokumen input untuk pembacaan data
34
- documents = SimpleDirectoryReader(input_files=["bahandokumen/K3.txt",
35
- "bahandokumen/bonus.txt",
36
- "bahandokumen/cuti.txt",
37
- "bahandokumen/disiplinkerja.txt",
38
- "bahandokumen/fasilitas&bantuan.txt",
39
- "bahandokumen/upahlembur.txt",
40
- "bahandokumen/waktukerja.txt"]).load_data()
41
-
42
- parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
43
- nodes = parser.get_nodes_from_documents(documents)
44
- embedding = HuggingFaceEmbedding("BAAI/bge-base-en-v1.5")
45
- Settings.embed_model = embedding
46
- index = VectorStoreIndex(nodes)
47
- return index
48
-
49
- # Inisialisasi Mesin Chat
50
- def initialize_chat_engine(index):
51
- from llama_index.core.prompts import PromptTemplate
52
- from llama_index.core.chat_engine.condense_plus_context import CondensePlusContextChatEngine
53
- retriever = index.as_retriever(similarity_top_k=3)
54
- chat_engine = CondensePlusContextChatEngine.from_defaults(
55
- retriever=retriever,
56
- verbose=True,
57
  )
58
- return chat_engine
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
- # Fungsi untuk menghasilkan respons chatbot
61
- def generate_response(message, history, chat_engine):
62
  chat_messages = [
63
  ChatMessage(
64
  role="system",
65
  content="Anda adalah chatbot yang selalu menjawab pertanyaan secara singkat, ramah, dan jelas dalam bahasa Indonesia."
66
  ),
67
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  response = chat_engine.stream_chat(message)
69
- text = "".join(response.response_gen) # Gabungkan semua token menjadi string
70
- history.append((message, text)) # Tambahkan ke riwayat
71
- return history
72
-
73
- def clear_history(chat_engine):
74
- chat_engine.clear()
75
-
76
- # Inisialisasi Komponen Gradio untuk UI
77
- def launch_gradio(chat_engine):
78
- with gr.Blocks() as demo:
79
- # Mengatur tombol untuk menghapus riwayat chat
80
- clear_btn = gr.Button("Clear")
81
- clear_btn.click(lambda: clear_history(chat_engine))
82
-
83
- # Membuat antarmuka chat
84
- chat_interface = gr.ChatInterface(
85
- lambda message, history: generate_response(message, history, chat_engine)
86
- )
87
- demo.launch()
88
-
89
- # Fungsi Utama untuk Menjalankan Aplikasi
90
- def main():
91
- # Unduh model dan inisialisasi pengaturan
92
- model_path = initialize_llama_model()
93
- initialize_settings(model_path) # Mengirimkan model_path ke fungsi initialize_settings
94
- # Inisialisasi index dan engine
95
- index = initialize_index()
96
- chat_engine = initialize_chat_engine(index)
97
- # Luncurkan antarmuka
98
- launch_gradio(chat_engine)
99
-
100
- if __name__ == "__main__":
101
- main()
 
1
+ # -*- coding: utf-8 -*-
2
+ """Chatbot
3
+
4
+ Automatically generated by Colab.
5
+
6
+ Original file is located at
7
+ https://colab.research.google.com/drive/1mbREVflL7r6y0hCUPE-MD3VzJJUs5OfR
8
+ """
9
+
10
+ !huggingface-cli download TheBloke/zephyr-7B-beta-GGUF zephyr-7b-beta.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
11
+
12
+ !CMAKE_ARGS="-DGGML_CUDA=on" pip install llama-cpp-python
13
+
14
  from llama_cpp import Llama
15
+
16
+ llm = Llama(
17
+ model_path="/content/zephyr-7b-beta.Q4_K_M.gguf",
18
+ n_gpu_layers=-1, # Uncomment to use GPU acceleration
19
+ # seed=1337, # Uncomment to set a specific seed
20
+ # n_ctx=2048, # Uncomment to increase the context window
21
+ )
22
+
23
+ llm("What is Large Language Model?", max_tokens=128)
24
+
25
+ !pip install llama-index gradio
26
+
27
+ pip install llama-index-llms-llama-cpp
28
+
29
+ from typing import Sequence, Optional
30
+
31
+ from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
32
  from llama_index.llms.llama_cpp import LlamaCPP
33
+ from llama_index.llms.llama_cpp.llama_utils import (
34
+ messages_to_prompt,
35
+ completion_to_prompt,
36
+ )
37
+ from llama_index.core.llms import ChatMessage
38
 
39
+ def zephyr_messages_to_prompt(
40
+ messages: Sequence[ChatMessage],
41
+ system_prompt: Optional[str]=None
42
+ ) -> str:
43
+ prompt = ""
44
+ for message in messages:
45
+ prompt += f"<|{message.role}|>\n"
46
+ prompt += f"{message.content}</s>\n"
 
47
 
48
+ return prompt + "<|assistant|>\n"
49
+
50
+ llm = LlamaCPP(
51
+ # You can pass in the URL to a GGML model to download it automatically
52
+ model_url=None,
53
+ # optionally, you can set the path to a pre-downloaded model instead of model_url
54
+ model_path="/content/zephyr-7b-beta.Q4_K_M.gguf",
55
+ temperature=0.1,
56
+ max_new_tokens=1000,
57
+ # llama2 has a context window of 4096 tokens, but we set it lower to allow for some wiggle room
58
+ context_window=3900,
59
+ # kwargs to pass to __call__()
60
+ generate_kwargs={},
61
+ # kwargs to pass to __init__()
62
+ # set to at least 1 to use GPU
63
+ model_kwargs={"n_gpu_layers": 1},
64
+ # transform inputs into Llama2 format
65
+ messages_to_prompt=messages_to_prompt,
66
+ completion_to_prompt=completion_to_prompt,
67
+ verbose=True,
68
+ )
69
 
70
+ messages = [
71
+ ChatMessage(
72
+ role="system",
73
+ content="Anda adalah chatbot yang selalu menjawab pertanyaan secara singkat, ramah, dan jelas dalam bahasa Indonesia."
74
+ ),
75
+ ChatMessage(
76
+ role="user",
77
+ content="There's a llama on my lawn, how can I get rid of him?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  )
79
+ ]
80
+
81
+ # zephyr_messages_to_prompt(messages)
82
+
83
+ response = llm.stream_chat(messages)
84
+ for r in response:
85
+ print(r.delta, end="", flush=True)
86
+
87
+ !pip install flask-ngrok
88
+ !pip install pymongo
89
+
90
+ !ngrok http 27017
91
+
92
+ import gradio as gr
93
 
94
+
95
+ def generate_response(message, history):
96
  chat_messages = [
97
  ChatMessage(
98
  role="system",
99
  content="Anda adalah chatbot yang selalu menjawab pertanyaan secara singkat, ramah, dan jelas dalam bahasa Indonesia."
100
  ),
101
  ]
102
+ for human, ai in history:
103
+ chat_messages.append(ChatMessage(
104
+ role="user",
105
+ content=human
106
+ ))
107
+ chat_messages.append(ChatMessage(
108
+ role="assistant",
109
+ content=ai
110
+ ))
111
+
112
+ chat_messages.append(ChatMessage(
113
+ role="user",
114
+ content=message
115
+ ))
116
+
117
+ response = llm.stream_chat(chat_messages)
118
+ text = ""
119
+ for r in response:
120
+ text += r.delta
121
+ yield text
122
+
123
+ gr.ChatInterface(generate_response).launch()
124
+
125
+ from google.colab import files
126
+ uploaded = files.upload()
127
+ for filename in uploaded.keys():
128
+ print(uploaded[filename])
129
+
130
+ !pip install pypdf -q
131
+
132
+ from llama_index.core import SimpleDirectoryReader
133
+ documents = SimpleDirectoryReader(input_files=["/content/bahandokumen/K3.txt",
134
+ "/content/bahandokumen/bonus.txt",
135
+ "/content/bahandokumen/jadwallembur.txt",
136
+ "/content/bahandokumen/datalembur.txt",
137
+ "/content/bahandokumen/absensi.txt",
138
+ "/content/bahandokumen/sisacuti.txt",
139
+ "/content/bahandokumen/target.txt",
140
+ "/content/bahandokumen/cuti.txt",
141
+ "/content/bahandokumen/disiplinkerja.txt",
142
+ "/content/bahandokumen/fasilitas&bantuan.txt",
143
+ "/content/bahandokumen/fasilitaskerja.txt",
144
+ "/content/bahandokumen/hak.txt",
145
+ "/content/bahandokumen/hubunganpengusaha&serikat.txt",
146
+ "/content/bahandokumen/istilah.txt",
147
+ "/content/bahandokumen/jaminanserikat.txt",
148
+ "/content/bahandokumen/jamkes.txt",
149
+ "/content/bahandokumen/jamsos.txt",
150
+ "/content/bahandokumen/keluhkesah.txt",
151
+ "/content/bahandokumen/kenaikanupah.txt",
152
+ "/content/bahandokumen/kewajiban.txt",
153
+ "/content/bahandokumen/kompensasi.txt",
154
+ "/content/bahandokumen/larangan.txt",
155
+ "/content/bahandokumen/lembur.txt",
156
+ "/content/bahandokumen/luaskesepakatan.txt",
157
+ "/content/bahandokumen/mogok.txt",
158
+ "/content/bahandokumen/pelanggaran&sanksi.txt",
159
+ "/content/bahandokumen/pendidikan.txt",
160
+ "/content/bahandokumen/pengangkatan.txt",
161
+ "/content/bahandokumen/penilaian&promosi.txt",
162
+ "/content/bahandokumen/pensiun.txt",
163
+ "/content/bahandokumen/perjadin.txt",
164
+ "/content/bahandokumen/pesangon.txt",
165
+ "/content/bahandokumen/phk.txt",
166
+ "/content/bahandokumen/pihak.txt",
167
+ "/content/bahandokumen/pkb.txt",
168
+ "/content/bahandokumen/resign.txt",
169
+ "/content/bahandokumen/sanksi.txt",
170
+ "/content/bahandokumen/shift.txt",
171
+ "/content/bahandokumen/syaratkerja.txt",
172
+ "/content/bahandokumen/tatacara.txt",
173
+ "/content/bahandokumen/tka.txt",
174
+ "/content/bahandokumen/tunjangan.txt",
175
+ "/content/bahandokumen/uangpisah.txt",
176
+ "/content/bahandokumen/upah.txt",
177
+ "/content/bahandokumen/upahlembur.txt",
178
+ "/content/bahandokumen/waktukerja.txt"]).load_data()
179
+
180
+ from llama_index.core.node_parser import SentenceSplitter
181
+ parser = SentenceSplitter(chunk_size=300, chunk_overlap=20)
182
+ nodes = parser.get_nodes_from_documents(documents)
183
+
184
+ nodes[1].get_content()
185
+
186
+ !pip install llama-index-embeddings-huggingface
187
+
188
+ from llama_index.embeddings.huggingface import HuggingFaceEmbedding
189
+ from llama_index.core import Settings
190
+
191
+ embedding = HuggingFaceEmbedding("BAAI/bge-base-en-v1.5")
192
+ Settings.llm=llm
193
+ Settings.embed_model=embedding
194
+
195
+ from llama_index.core import VectorStoreIndex
196
+
197
+ index = VectorStoreIndex(nodes)
198
+
199
+ retriever = index.as_retriever(similarity_top_k=3)
200
+
201
+ results = retriever.retrieve("Sebutkan Jadwal Lembur Tahun 2024?")
202
+
203
+ len(results)
204
+
205
+ results[0].get_content()
206
+
207
+ query_engine = index.as_query_engine(similarity_top_k=3)
208
+ response = query_engine.query("Sebutkan Jadwal Lembur Tahun 2024?")
209
+ response.response
210
+
211
+ from llama_index.core.prompts import PromptTemplate
212
+ from llama_index.core.llms import ChatMessage, MessageRole
213
+ from llama_index.core.chat_engine.condense_plus_context import (
214
+ CondensePlusContextChatEngine,
215
+ )
216
+
217
+ chat_engine = CondensePlusContextChatEngine.from_defaults(
218
+ retriever=retriever,
219
+ verbose=True,
220
+ )
221
+
222
+ response = chat_engine.chat("Sebutkan Jadwal Lembur Tahun 2024?")
223
+
224
+ response.response
225
+
226
+ response = chat_engine.chat("Apakah anda bisa menjelaskan target Bulan Januari?")
227
+
228
+ response.response
229
+
230
+ import gradio as gr
231
+
232
+ chat_engine.reset()
233
+
234
+ def generate_response(message, history):
235
+ chat_messages = [
236
+ ChatMessage(
237
+ role="system",
238
+ content="Anda adalah chatbot yang selalu pertanyaan dalam bahasa Indonesia dengan singkat dan ramah."
239
+ ),
240
+ ]
241
  response = chat_engine.stream_chat(message)
242
+ text = ""
243
+ for token in response.response_gen:
244
+ text += token
245
+ yield text
246
+
247
+ def clear_history():
248
+ chat_engine.reset()
249
+
250
+ # Membuat tombol 'Clear'
251
+ clear_btn = gr.Button("Clear")
252
+
253
+ # Mengatur layout dengan gr.Blocks
254
+ with gr.Blocks() as demo:
255
+ # Mengatur tombol untuk menghapus riwayat chat
256
+ clear_btn.click(clear_history)
257
+
258
+ # Membuat antarmuka chat tanpa argumen clear_btn
259
+ chat_interface = gr.ChatInterface(generate_response)
260
+
261
+ demo.launch()