Spaces:
Running
Running
fix button order elem
Browse files
app.py
CHANGED
|
@@ -6,8 +6,6 @@ from dotenv import load_dotenv
|
|
| 6 |
|
| 7 |
load_dotenv()
|
| 8 |
|
| 9 |
-
# Load the model globally to ensure it's only loaded once
|
| 10 |
-
# This is crucial for performance and resource management
|
| 11 |
model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
|
| 12 |
|
| 13 |
# === Supabase ===
|
|
@@ -19,11 +17,9 @@ def get_embedding(text: str):
|
|
| 19 |
"""
|
| 20 |
Menghasilkan embedding vector dari teks menggunakan model SentenceTransformer.
|
| 21 |
"""
|
| 22 |
-
# Menghindari encoding teks kosong
|
| 23 |
if not text:
|
| 24 |
return []
|
| 25 |
|
| 26 |
-
# Mengonversi array numpy ke list Python agar bisa di-JSON-kan
|
| 27 |
embedding = model.encode(text).tolist()
|
| 28 |
return embedding
|
| 29 |
|
|
@@ -95,11 +91,6 @@ def search_kbli(text: str):
|
|
| 95 |
html += "</div>"
|
| 96 |
return html
|
| 97 |
|
| 98 |
-
# Gradio Interface
|
| 99 |
-
# `fn` adalah fungsi yang akan dieksekusi
|
| 100 |
-
# `inputs` adalah jenis input (dalam hal ini, sebuah teks)
|
| 101 |
-
# `outputs` adalah jenis output (dalam hal ini, sebuah JSON)
|
| 102 |
-
# `api_name` adalah nama endpoint API
|
| 103 |
with gr.Blocks(css="""
|
| 104 |
.title {font-size: 22px; font-weight: 700; color: #111827; margin-bottom: 4px;}
|
| 105 |
.desc {font-size: 14px; color: #6b7280; margin-bottom: 16px;}
|
|
@@ -107,33 +98,49 @@ with gr.Blocks(css="""
|
|
| 107 |
.btn-primary:hover {background-color: #11a12f;}
|
| 108 |
.btn-clear {background-color: #f3f4f6; color: #374151; border-radius: 6px;}
|
| 109 |
.btn-clear:hover {background-color: #e5e7eb;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
""") as demo:
|
| 111 |
gr.Markdown("<div class='title'>Semantic KBLI Search</div>")
|
| 112 |
gr.Markdown("<div class='desc'>Cari kode KBLI dengan semantic search (Embedding + Matching)</div>")
|
| 113 |
|
| 114 |
with gr.Tab("Embedding Only"):
|
| 115 |
-
inp1 = gr.Textbox(label="Masukkan teks")
|
| 116 |
-
out1 = gr.JSON(label="Embedding Vector")
|
| 117 |
-
inp1.submit(get_embedding, inp1, out1, api_name="get_embedding")
|
| 118 |
-
|
| 119 |
with gr.Row():
|
| 120 |
-
|
| 121 |
-
|
| 122 |
|
| 123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
btn_clear1.click(lambda: ("", None), None, [inp1, out1])
|
|
|
|
| 125 |
|
| 126 |
with gr.Tab("Search KBLI"):
|
| 127 |
inp2 = gr.Textbox(label="Masukkan teks")
|
| 128 |
-
out2 = gr.HTML(label="Hasil Pencarian KBLI")
|
| 129 |
-
inp2.submit(search_kbli, inp2, out2, api_name="search_kbli")
|
| 130 |
|
| 131 |
-
with gr.Row():
|
| 132 |
-
btn_submit2 = gr.Button("Submit", elem_classes="btn-primary")
|
| 133 |
btn_clear2 = gr.Button("Clear", elem_classes="btn-clear")
|
| 134 |
-
|
| 135 |
-
|
|
|
|
|
|
|
|
|
|
| 136 |
btn_clear2.click(lambda: ("", None), None, [inp2, out2])
|
|
|
|
| 137 |
|
| 138 |
if __name__ == "__main__":
|
| 139 |
demo.queue().launch()
|
|
|
|
| 6 |
|
| 7 |
load_dotenv()
|
| 8 |
|
|
|
|
|
|
|
| 9 |
model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
|
| 10 |
|
| 11 |
# === Supabase ===
|
|
|
|
| 17 |
"""
|
| 18 |
Menghasilkan embedding vector dari teks menggunakan model SentenceTransformer.
|
| 19 |
"""
|
|
|
|
| 20 |
if not text:
|
| 21 |
return []
|
| 22 |
|
|
|
|
| 23 |
embedding = model.encode(text).tolist()
|
| 24 |
return embedding
|
| 25 |
|
|
|
|
| 91 |
html += "</div>"
|
| 92 |
return html
|
| 93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
with gr.Blocks(css="""
|
| 95 |
.title {font-size: 22px; font-weight: 700; color: #111827; margin-bottom: 4px;}
|
| 96 |
.desc {font-size: 14px; color: #6b7280; margin-bottom: 16px;}
|
|
|
|
| 98 |
.btn-primary:hover {background-color: #11a12f;}
|
| 99 |
.btn-clear {background-color: #f3f4f6; color: #374151; border-radius: 6px;}
|
| 100 |
.btn-clear:hover {background-color: #e5e7eb;}
|
| 101 |
+
|
| 102 |
+
.btn-row {display: flex; gap: 8px;}
|
| 103 |
+
.btn-row > * {flex: 1;}
|
| 104 |
+
|
| 105 |
+
@media (max-width: 640px) {
|
| 106 |
+
.btn-row {flex-direction: column-reverse;}
|
| 107 |
+
.btn-row > button {
|
| 108 |
+
width: 100% !important;
|
| 109 |
+
flex: none;
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
""") as demo:
|
| 113 |
gr.Markdown("<div class='title'>Semantic KBLI Search</div>")
|
| 114 |
gr.Markdown("<div class='desc'>Cari kode KBLI dengan semantic search (Embedding + Matching)</div>")
|
| 115 |
|
| 116 |
with gr.Tab("Embedding Only"):
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
with gr.Row():
|
| 118 |
+
with gr.Column(scale=1):
|
| 119 |
+
inp1 = gr.Textbox(label="Masukkan teks")
|
| 120 |
|
| 121 |
+
with gr.Row(elem_classes="btn-row"):
|
| 122 |
+
btn_clear1 = gr.Button("Clear", elem_classes="btn-clear")
|
| 123 |
+
btn_submit1 = gr.Button("Submit", elem_classes="btn-primary")
|
| 124 |
+
|
| 125 |
+
with gr.Column(scale=1):
|
| 126 |
+
out1 = gr.JSON(label="Embedding Vector")
|
| 127 |
+
|
| 128 |
+
inp1.submit(get_embedding, inp1, out1, api_name="get_embedding")
|
| 129 |
btn_clear1.click(lambda: ("", None), None, [inp1, out1])
|
| 130 |
+
btn_submit1.click(get_embedding, inp1, out1, api_name="get_embedding")
|
| 131 |
|
| 132 |
with gr.Tab("Search KBLI"):
|
| 133 |
inp2 = gr.Textbox(label="Masukkan teks")
|
|
|
|
|
|
|
| 134 |
|
| 135 |
+
with gr.Row(elem_classes="btn-row"):
|
|
|
|
| 136 |
btn_clear2 = gr.Button("Clear", elem_classes="btn-clear")
|
| 137 |
+
btn_submit2 = gr.Button("Submit", elem_classes="btn-primary")
|
| 138 |
+
|
| 139 |
+
out2 = gr.HTML(label="Hasil Pencarian Semantic")
|
| 140 |
+
|
| 141 |
+
inp2.submit(search_kbli, inp2, out2, api_name="search_kbli")
|
| 142 |
btn_clear2.click(lambda: ("", None), None, [inp2, out2])
|
| 143 |
+
btn_submit2.click(search_kbli, inp2, out2, api_name="search_kbli")
|
| 144 |
|
| 145 |
if __name__ == "__main__":
|
| 146 |
demo.queue().launch()
|