Spaces:
Sleeping
Sleeping
import gradio as gr | |
from sentence_transformers import SentenceTransformer | |
import datasets | |
import time | |
import faiss | |
# Impor tema custom dari themes.py | |
from themes_2 import ClassicMinimalTheme | |
# Inisialisasi dataset dan model hanya sekali di Gradio | |
def initialize(): | |
dataset = datasets.load_dataset('A-Roucher/english_historical_quotes', download_mode="force_redownload")['train'] | |
all_authors = list(set(dataset['author'])) | |
model_name = "BAAI/bge-small-en-v1.5" | |
encoder = SentenceTransformer(model_name) | |
index = faiss.read_index('index_alone.faiss') | |
return dataset, encoder, index, all_authors | |
# Fungsi untuk melakukan pencarian kutipan berdasarkan query | |
def search(query, dataset, encoder, index, progress=gr.Progress()): | |
start = time.time() | |
if len(query.strip()) == 0: | |
return "Silakan masukkan ide atau kata kunci." # Tidak ada pencarian jika query kosong | |
# Memulai progres dengan 0% | |
progress(0, desc="Memulai proses...") | |
# Encode query menjadi embedding | |
progress(0.2, desc="Proses encoding...") | |
query_embedding = encoder.encode([query]) | |
time.sleep(1) # Simulasi proses lambat | |
# Cari kutipan yang paling mirip menggunakan faiss | |
progress(0.5, desc="Menemukan kutipan yang mirip...") | |
_, samples = index.search(query_embedding, k=10) | |
time.sleep(1) | |
quotes = dataset.select(samples[0]) | |
result = "\n\n" | |
for i in progress.tqdm(range(len(quotes)), desc="Menyusun hasil..."): | |
time.sleep(0.25) # Simulasi penundaan saat menyusun hasil | |
# Menggunakan HTML untuk mengatur ukuran font pada quote dan tebal pada author | |
result += f"## โญ {quotes['author'][i]}\n> {quotes['quote'][i]}\n----\n" | |
# result += f"<b>{quotes['author'][i]}</b><br><span style='font-size: 20px;'>{quotes['quote'][i]}</span></hr>" | |
delay = "%.3f" % (time.time() - start) | |
# Proses selesai 100% | |
progress(1.0, desc="Selesai!") | |
return f"_Waktu komputasi: **{delay} detik**_{result}" | |
# Fungsi untuk memulai pencarian dengan progress tracking | |
def run_search(query): | |
dataset, encoder, index, _ = initialize() # Ambil state inisialisasi (dataset, encoder, index) | |
return search(query, dataset, encoder, index) # Mengembalikan hasil akhir sebagai string | |
# CSS Kustom untuk mempercantik tampilan | |
css = """ | |
#header { | |
text-align: center; | |
color: #FFFFFF; | |
background: linear-gradient(90deg, #FF5733, #C70039); | |
padding: 20px; | |
border-radius: 10px; | |
} | |
#input-section, #output-section { | |
margin: 10px auto; | |
max-width: 700px; | |
background-color: #F0F0F0; | |
border-radius: 10px; | |
padding: 20px; | |
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); | |
} | |
#footer { | |
text-align: center; | |
margin-top: 30px; | |
color: #888; | |
} | |
#submit-button { | |
background-color: #FF5733; | |
color: #FFF; | |
font-weight: bold; | |
padding: 10px; | |
border-radius: 10px; | |
cursor: pointer; | |
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | |
} | |
body { | |
background-color: #F8F9F9; | |
} | |
.note { | |
background-color: #ddffdd; | |
border: 1px solid #ddd; | |
padding: 10px; | |
margin: 10px 0; | |
border-radius: 5px; | |
font-family: Arial, sans-serif; | |
} | |
""" | |
# ----------------- | |
# Antarmuka Gradio | |
# ----------------- | |
with gr.Blocks(css=css, theme=ClassicMinimalTheme()) as Apps: | |
# Tambahkan banner | |
gr.HTML(""" | |
<div style='text-align: center;'> | |
<img src='https://i.ibb.co.com/x6XxZC9/banner02.jpg' alt='Banner' style='width: 100%; height: auto;'/> | |
</div> | |
""") | |
# Ganti judul | |
gr.Markdown("<h1 style='text-align: center;'>Siapa yang memiliki ide serupa dengan Anda?</br>๐ Kami bantu Anda mencarinya dengan AI.. </h1>") | |
# Input Section | |
with gr.Row(elem_id="input-section"): | |
text_input = gr.Textbox(label="Ketik ide Anda di sini:", placeholder="Money .", lines=2) | |
submit_button = gr.Button("๐ Cari kutipan!", elem_id="submit-button") | |
# Output Section | |
with gr.Row(elem_id="output-section"): | |
output = gr.Markdown() | |
# Menghubungkan tombol pencarian dengan fungsi search | |
submit_button.click(run_search, inputs=[text_input], outputs=[output]) | |
# Tambahkan footer di bagian bawah | |
gr.HTML(""" | |
<footer id="footer"> | |
Transfer Energi Semesta Digital ยฉ 2024 __drat. | ๐ฎ๐ฉ Untuk Indonesia Jaya! | |
</footer> | |
""") | |
# Meluncurkan aplikasi | |
if __name__ == "__main__": | |
Apps.queue(api_open=False).launch(show_api=False) | |