BramLeo commited on
Commit
7388122
·
verified ·
1 Parent(s): 78b8047

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -11
app.py CHANGED
@@ -1,14 +1,142 @@
1
- import torch
2
- from transformers import AutoModelForCausalLM, AutoTokenizer
 
 
 
 
 
 
 
 
 
 
3
 
4
- # Cek apakah GPU tersedia
5
- device = "cuda" if torch.cuda.is_available() else "cpu"
6
- print(f"Model akan dijalankan di: {device}")
 
 
 
 
 
 
7
 
8
- # Load model dari Hugging Face
9
- model_id = "HuggingFaceH4/zephyr-7b-beta"
10
- tokenizer = AutoTokenizer.from_pretrained(model_id)
11
- model = AutoModelForCausalLM.from_pretrained(model_id).to(device)
 
 
12
 
13
- # Cek apakah model sudah berada di GPU
14
- print("Apakah model ada di GPU?", next(model.parameters()).is_cuda)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/absensi.txt",
37
+ "bahandokumen/cuti.txt",
38
+ "bahandokumen/disiplinkerja.txt",
39
+ "bahandokumen/fasilitas&bantuan.txt",
40
+ "bahandokumen/fasilitaskerja.txt",
41
+ "bahandokumen/hak.txt",
42
+ "bahandokumen/hubunganpengusaha&serikat.txt",
43
+ "bahandokumen/istilah.txt",
44
+ "bahandokumen/jaminanserikat.txt",
45
+ "bahandokumen/jamkes.txt",
46
+ "bahandokumen/jamsos.txt",
47
+ "bahandokumen/keluhkesah.txt",
48
+ "bahandokumen/kenaikanupah.txt",
49
+ "bahandokumen/kewajiban.txt",
50
+ "bahandokumen/kompensasi.txt",
51
+ "bahandokumen/larangan.txt",
52
+ "bahandokumen/lembur.txt",
53
+ "bahandokumen/luaskesepakatan.txt",
54
+ "bahandokumen/mogok.txt",
55
+ "bahandokumen/pelanggaran&sanksi.txt",
56
+ "bahandokumen/pendidikan.txt",
57
+ "bahandokumen/pengangkatan.txt",
58
+ "bahandokumen/penilaian&promosi.txt",
59
+ "bahandokumen/pensiun.txt",
60
+ "bahandokumen/perjadin.txt",
61
+ "bahandokumen/pesangon.txt",
62
+ "bahandokumen/phk.txt",
63
+ "bahandokumen/pihak.txt",
64
+ "bahandokumen/pkb.txt",
65
+ "bahandokumen/resign.txt",
66
+ "bahandokumen/sanksi.txt",
67
+ "bahandokumen/shift.txt",
68
+ "bahandokumen/syaratkerja.txt",
69
+ "bahandokumen/sisacuti.txt",
70
+ "bahandokumen/target.txt",
71
+ "bahandokumen/tatacara.txt",
72
+ "bahandokumen/tka.txt",
73
+ "bahandokumen/tunjangan.txt",
74
+ "bahandokumen/uangpisah.txt",
75
+ "bahandokumen/upah.txt",
76
+ "bahandokumen/upahlembur.txt",
77
+ "bahandokumen/waktukerja.txt"]).load_data()
78
+
79
+ parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
80
+ nodes = parser.get_nodes_from_documents(documents)
81
+ embedding = HuggingFaceEmbedding("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
82
+ Settings.embed_model = embedding
83
+ index = VectorStoreIndex(nodes)
84
+ return index
85
+
86
+ # Inisialisasi Mesin Chat
87
+ def initialize_chat_engine(index):
88
+ from llama_index.core.prompts import PromptTemplate
89
+ from llama_index.core.chat_engine.condense_plus_context import CondensePlusContextChatEngine
90
+ retriever = index.as_retriever(similarity_top_k=3)
91
+ chat_engine = CondensePlusContextChatEngine.from_defaults(
92
+ retriever=retriever,
93
+ verbose=True,
94
+ )
95
+ return chat_engine
96
+
97
+ # Fungsi untuk menghasilkan respons chatbot
98
+ def generate_response(message, history, chat_engine):
99
+ chat_messages = [
100
+ ChatMessage(
101
+ role="system",
102
+ content="Anda adalah chatbot yang menjawab dalam bahasa Indonesia. Berikut contoh percakapan:\n"
103
+ "Pengguna: Apa itu lembur?\n"
104
+ "Chatbot: Lembur adalah pekerjaan yang dilakukan di luar jam kerja yang telah ditetapkan.\n"
105
+ "Pengguna: Apa syarat kerja di perusahaan?\n"
106
+ "Chatbot: Syarat kerja di perusahaan meliputi waktu kerja, gaji, dan tunjangan sesuai dengan peraturan perusahaan."
107
+ ),
108
+ ]
109
+ response = chat_engine.stream_chat(message)
110
+ text = "".join(response.response_gen) # Gabungkan semua token menjadi string
111
+ history.append((message, text)) # Tambahkan ke riwayat
112
+ return history
113
+
114
+ def clear_history(chat_engine):
115
+ chat_engine.clear()
116
+
117
+ # Inisialisasi Komponen Gradio untuk UI
118
+ def launch_gradio(chat_engine):
119
+ with gr.Blocks() as demo:
120
+ # Mengatur tombol untuk menghapus riwayat chat
121
+ clear_btn = gr.Button("Clear")
122
+ clear_btn.click(lambda: clear_history(chat_engine))
123
+
124
+ # Membuat antarmuka chat
125
+ chat_interface = gr.ChatInterface(
126
+ lambda message, history: generate_response(message, history, chat_engine)
127
+ )
128
+ demo.launch()
129
+
130
+ # Fungsi Utama untuk Menjalankan Aplikasi
131
+ def main():
132
+ # Unduh model dan inisialisasi pengaturan
133
+ model_path = initialize_llama_model()
134
+ initialize_settings(model_path) # Mengirimkan model_path ke fungsi initialize_settings
135
+ # Inisialisasi index dan engine
136
+ index = initialize_index()
137
+ chat_engine = initialize_chat_engine(index)
138
+ # Luncurkan antarmuka
139
+ launch_gradio(chat_engine)
140
+
141
+ if __name__ == "__main__":
142
+ main()