File size: 5,605 Bytes
43a4ef4 b02a1ec a21a6cc 7fb3d43 a21a6cc b02a1ec bb546ea a1864a8 43a4ef4 4697e29 43a4ef4 4697e29 b02a1ec 4697e29 43a4ef4 39b77d1 4697e29 b02a1ec 4697e29 b02a1ec 4697e29 b02a1ec |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# Import Library yang Diperlukan
import gradio as gr
import shutil
import os
import subprocess
import sys
import platform
import transformers
import numpy
import torch
from llama_cpp import Llama
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings
from llama_index.core.llms import ChatMessage
from llama_index.llms.llama_cpp import LlamaCPP
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from huggingface_hub import hf_hub_download
from llama_index.core.node_parser import SentenceSplitter
print(LlamaCPP.__version__)
try:
# Periksa versi pip
subprocess.run(["pip", "--version"], check=True)
except FileNotFoundError:
print("pip tidak ditemukan di sistem.")
# Fungsi untuk memeriksa dan memastikan CUDA tersedia
def check_cuda_availability():
if torch.cuda.is_available():
print("CUDA Toolkit tersedia di sistem.")
return True
else:
print("CUDA Toolkit tidak ditemukan di sistem.")
return False
def install_llama_with_cuda():
try:
# Periksa ketersediaan CUDA Toolkit
if not check_cuda_availability():
print("Proses instalasi dihentikan karena CUDA Toolkit tidak tersedia.")
return
print("Memasang ulang llama-cpp-python dengan dukungan CUDA...")
# Perintah pemasangan ulang llama-cpp-python dengan dukungan CUDA
pip_path = "/home/user/.pyenv/versions/3.10.16/bin/pip"
print("Memasang ulang llama-cpp-python dengan dukungan CUDA...")
subprocess.run([pip_path, "install", "llama-cpp-python", "--force-reinstall", "--no-cache-dir"],
env={"CMAKE_ARGS": "-DGGML_CUDA=on"}, # Aktifkan dukungan CUDA
check=True
)
print("llama-cpp-python berhasil diinstal ulang dengan dukungan CUDA.")
except subprocess.CalledProcessError as e:
print(f"Error saat menginstal ulang llama-cpp-python: {e}")
except Exception as e:
print(f"Kesalahan umum: {e}")
# Fungsi untuk mengunduh model Llama
def initialize_llama_model():
# Unduh model jika belum ada di direktori kerja
model_path = hf_hub_download(
repo_id="TheBLoke/zephyr-7b-beta-GGUF", # Nama repo model
filename="zephyr-7b-beta.Q4_K_M.gguf", # Nama file model
cache_dir="./models" # Lokasi direktori untuk menyimpan model
)
return model_path
# Fungsi untuk mengatur konfigurasi Settings
def initialize_settings(model_path):
Settings.llm = Llama(
model_path=model_path,
n_gpu_layers=1, # Sesuaikan dengan kebutuhan perangkat Anda
temperature=0.7, # Sesuaikan untuk respons yang lebih cepat
top_p=0.9 # Mengurangi eksplorasi token
)
# Fungsi untuk Menginisialisasi Index
def initialize_index():
# Tentukan dokumen input untuk pembacaan data
documents = SimpleDirectoryReader(input_files=["bahandokumen/K3.txt",
"bahandokumen/bonus.txt",
"bahandokumen/cuti.txt",
"bahandokumen/disiplinkerja.txt",
"bahandokumen/fasilitas&bantuan.txt",
"bahandokumen/upahlembur.txt",
"bahandokumen/waktukerja.txt"]).load_data()
parser = SentenceSplitter(chunk_size=150, chunk_overlap=10)
nodes = parser.get_nodes_from_documents(documents)
embedding = HuggingFaceEmbedding("BAAI/bge-base-en-v1.5")
Settings.embed_model = embedding
index = VectorStoreIndex(nodes)
return index
# Inisialisasi Mesin Chat
def initialize_chat_engine(index):
from llama_index.core.prompts import PromptTemplate
from llama_index.core.chat_engine.condense_plus_context import CondensePlusContextChatEngine
retriever = index.as_retriever(similarity_top_k=3)
chat_engine = CondensePlusContextChatEngine.from_defaults(
retriever=retriever,
verbose=True,
)
return chat_engine
# Fungsi untuk menghasilkan respons chatbot
def generate_response(message, history, chat_engine):
chat_messages = [
ChatMessage(
role="system",
content="Anda adalah chatbot yang selalu menjawab pertanyaan secara singkat, ramah, dan jelas dalam bahasa Indonesia."
),
]
response = chat_engine.stream_chat(message)
text = "".join(response.response_gen) # Gabungkan semua token menjadi string
history.append((message, text)) # Tambahkan ke riwayat
return history
def clear_history(chat_engine):
chat_engine.clear()
# Inisialisasi Komponen Gradio untuk UI
def launch_gradio(chat_engine):
with gr.Blocks() as demo:
# Mengatur tombol untuk menghapus riwayat chat
clear_btn = gr.Button("Clear")
clear_btn.click(lambda: clear_history(chat_engine))
# Membuat antarmuka chat
chat_interface = gr.ChatInterface(
lambda message, history: generate_response(message, history, chat_engine)
)
demo.launch()
# Fungsi Utama untuk Menjalankan Aplikasi
def main():
install_llama_with_cuda()
# Unduh model dan inisialisasi pengaturan
model_path = initialize_llama_model()
initialize_settings(model_path) # Mengirimkan model_path ke fungsi initialize_settings
# Inisialisasi index dan engine
index = initialize_index()
chat_engine = initialize_chat_engine(index)
# Luncurkan antarmuka
launch_gradio(chat_engine)
if __name__ == "__main__":
main() |