Spaces:
Sleeping
Sleeping
File size: 7,934 Bytes
461ddce d55a3fa 461ddce d55a3fa 28515db 461ddce 6f2a4ac f7ffbe2 5b4b168 86dae20 5b4b168 c3ffdd7 1d606ae 9980459 c3ffdd7 f897f91 c3ffdd7 34c95c1 5b4b168 0e620d3 d55a3fa 461ddce 20b1263 685778e 461ddce f7ffbe2 6f2a4ac 28515db 6f2a4ac e454ccf a194399 6f2a4ac e454ccf f7ffbe2 6a8ac6d a194399 8420bc3 d55a3fa a194399 d55a3fa 1ca4016 d55a3fa 20b1263 4242f3c 20b1263 9349c38 20b1263 4242f3c 20b1263 5000e51 20b1263 28515db 6f2a4ac 28515db 40f8ec5 d55a3fa 9349c38 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce f7ffbe2 685778e cf5e8f1 685778e f7ffbe2 6f2a4ac f7ffbe2 6f2a4ac 461ddce 093b3a1 cf5e8f1 093b3a1 685778e f7ffbe2 28515db 20b1263 685778e 28515db 461ddce |
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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
import gradio as gr
import re
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
codes = """001 - Vehicle Registration (New)
002 - Vehicle Registration Renewal
003 - Vehicle Ownership Transfer
004 - Vehicle De-registration
005 - Lost Registration Certificate Replacement
006 - Address Change Update
007 - Vehicle Data Correction
008 - Ownership Name Correction
009 - Vehicle Tax Payment
010 - Late Payment Fee Processing
011 - Vehicle Type/Specification Update
012 - BBNKB (Transfer Fee of Vehicle Ownership)
013 - STNK Issuance (Vehicle Registration Certificate)
014 - STNK Renewal
015 - Motor Vehicle Roadworthiness Inspection
016 - Plate Number Renewal
017 - Lost Plate Replacement
018 - Vehicle Export Registration
019 - Vehicle Import Registration
020 - Fleet Vehicle Registration
021 - Bulk Vehicle Registration Update
022 - Vehicle Insurance Assistance
023 - Vehicle Accident Reporting
024 - Vehicle Usage Change Declaration (e.g., personal to commercial)
025 - Legal Document Verification
026 - Ownership Transfer for Inherited Vehicle
027 - STNK Temporary Suspension
028 - Proof of Ownership Document Update
029 - Vehicle Ownership History Check
030 - Vehicle Tax Recalculation Request
031 - Tax Exemption Application (for special cases)
032 - Deceased Owner’s Vehicle Ownership Transfer""".split("\n")
undetected = "099 - Other/Undetected"
codes = """001 - Pendaftaran Kendaraan (Baru)
002 - Pembaruan Pendaftaran Kendaraan
003 - Alih Kepemilikan Kendaraan
004 - Pembatalan Pendaftaran Kendaraan
005 - Penggantian Sertifikat Pendaftaran Kendaraan yang Hilang
006 - Pembaruan Perubahan Alamat
007 - Koreksi Data Kendaraan
008 - Koreksi Nama Kepemilikan
009 - Pembayaran Pajak Kendaraan
010 - Proses Denda Keterlambatan Pembayaran
011 - Pembaruan Jenis/Spesifikasi Kendaraan
012 - Pembayaran Pajak Kendaraan Melalui E-Samsat
013 - Penerbitan STNK (Sertifikat Pendaftaran Kendaraan)
014 - Pembaruan STNK
015 - Pemeriksaan Kelayakan Jalan Kendaraan Bermotor
016 - Pembaruan Nomor Plat Kendaraan
017 - Penggantian Plat yang Hilang
018 - Pendaftaran Ekspor Kendaraan
019 - Pendaftaran Impor Kendaraan
020 - Pendaftaran Kendaraan Armada
021 - Pembaruan Pendaftaran Kendaraan Massal
022 - Bantuan Asuransi Kendaraan
023 - Pelaporan Kecelakaan Kendaraan
024 - Deklarasi Perubahan Penggunaan Kendaraan (misalnya, pribadi ke komersial)
025 - Verifikasi Dokumen Hukum
026 - Alih Kepemilikan Kendaraan Warisan
027 - Penangguhan Sementara STNK
028 - Pembaruan Dokumen Bukti Kepemilikan
029 - Pemeriksaan Riwayat Kepemilikan Kendaraan
030 - Permintaan Perhitungan Ulang Pajak Kendaraan
031 - Permohonan Pembebasan Pajak (untuk kasus khusus)
032 - Alih Kepemilikan Kendaraan Pemilik yang Meninggal""".split("\n")
undetected = "099 - Lainnya/Tidak Terdeteksi"
model_ids = [
"sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
"Alibaba-NLP/gte-multilingual-base",
"BAAI/bge-m3",
"sentence-transformers/paraphrase-multilingual-mpnet-base-v2",
"intfloat/multilingual-e5-small",
"sentence-transformers/distiluse-base-multilingual-cased-v2"
]
# model_id = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
# model_id = "Alibaba-NLP/gte-multilingual-base"
# model_id = "BAAI/bge-m3"
# model_id = "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"
# model_id = "intfloat/multilingual-e5-small"
# model_id = "sentence-transformers/distiluse-base-multilingual-cased-v2"
model_id = model_ids[-1]
model = SentenceTransformer(model_id, trust_remote_code=True)
codes_emb = model.encode([x[6:] for x in codes])
def respond(
message,
history: list[tuple[str, str]],
threshold,
is_multiple
):
global codes_emb
global undetected
undetected_code = undetected[:3]
if history and history[-1][-1][21:24] == undetected_code:
list_his = ""
for his in history[::-1]:
if his[-1][21:24] != undetected_code:
break
list_his = his[0] + "\n" + list_his
message += "\n" + list_his
# pattern = r'\b([A-Z]{1,2})\s?(\d{4})\s?([A-Z]{3})\b'
# pattern = r'\b([A-Z]{1,2})\s?(\d{4})\s?([A-Z]{1,3})\b'
pattern = r'\b([A-Za-z]{1,2})\s?(\d{4})\s?([A-Za-z]{1,3})\b'
matches = re.findall(pattern, message)
plate_numbers = ", ".join([" ".join(x) for i,x in enumerate(matches)]).upper()
text_emb = model.encode(message)
scores = cos_sim(codes_emb, text_emb)[:,0]
if is_multiple:
request_details = []
request_numbers = []
request_scores = []
for i,score in enumerate(scores):
if score > threshold:
request_details.append(codes[i][6:])
request_numbers.append(codes[i][:3])
request_scores.append(str( round(score.tolist(), 3) ) )
if not request_details:
request_details.append(undetected[6:])
request_numbers.append(undetected_code)
request_numbers = "\n".join(request_numbers)
request_details = "\n".join(request_details)
request_scores = "\n".join(request_scores)
return "Request code number:\n" + request_numbers + "\n\nRequest detail:\n" + request_details + f"\n\nConfidence score:\n{request_scores}" + "\n\nPlate numbers: " + plate_numbers
s_max = scores.argmax()
if scores[s_max] < threshold:
# request_code = "033 - Other/Undetected"
request_code = undetected
else:
request_code = codes[scores.argmax()]
# "{:.2f}".format(a)
return "Request code number: " + request_code[:3] + "\nRequest detail: " + request_code[6:] + f"\nConfidence score: {round(scores[s_max].tolist(),3)}" + "\nPlate numbers: " + plate_numbers
# for val in history:
# if val[0]:
# messages.append({"role": "user", "content": val[0]})
# if val[1]:
# messages.append({"role": "assistant", "content": val[1]})
# messages.append({"role": "user", "content": message})
# response = ""
# for message in client.chat_completion(
# messages,
# max_tokens=max_tokens,
# stream=True,
# temperature=temperature,
# top_p=top_p,
# ):
# token = message.choices[0].delta.content
# response += token
# yield response
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
# demo = gr.ChatInterface(
# respond,
# )
def reload(chosen_model_id):
global model
global model_id
global codes_emb
if chosen_model_id != model_id:
model = SentenceTransformer(chosen_model_id, trust_remote_code=True)
model_id = chosen_model_id
codes_emb = model.encode([x[6:] for x in codes])
return f"Model {chosen_model_id} has been succesfully loaded!"
return f"Model {chosen_model_id} is ready!"
with gr.Blocks() as demo:
# Add header title and description
gr.Markdown("# List of Request Numbers")
gr.Markdown("<br>".join(codes) + "<br>" + undetected)
gr.Markdown("# Valid License Plate Number Criteria:")
gr.Markdown("(1-2 letters) (4 numbers) (1-3 letters)")
reload_model = gr.Interface(
fn=reload,
inputs=[gr.Dropdown(choices=model_ids, value=model_id)],
outputs="text",
# gr.HighlightedText(
# label="status",
# combine_adjacent=True,
# show_legend=True,
# color_map={"+": "red", "-": "green"}
# ),
)
# Add chat interface
chat_interface = gr.ChatInterface(
respond,
additional_inputs=[
gr.Number(0.5, label="confidence threshold", show_label=True, minimum=0., maximum=1.0, step=0.1),
gr.Checkbox(label="multiple", info="Allow multiple request code numbers"),
]
)
if __name__ == "__main__":
demo.launch()
|