Spaces:
Sleeping
Sleeping
File size: 6,298 Bytes
461ddce d55a3fa 461ddce d55a3fa 28515db 461ddce 6f2a4ac f7ffbe2 5b4b168 0e620d3 5c3e8ed 0e620d3 34c95c1 5b4b168 0e620d3 d55a3fa 461ddce 20b1263 461ddce f7ffbe2 6f2a4ac 28515db 6f2a4ac e454ccf a194399 6f2a4ac e454ccf f7ffbe2 6a8ac6d a194399 8420bc3 d55a3fa a194399 d55a3fa 1ca4016 d55a3fa 20b1263 28515db 6f2a4ac 28515db d55a3fa 20b1263 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce d55a3fa 461ddce f7ffbe2 6f2a4ac f7ffbe2 6f2a4ac 461ddce f7ffbe2 28515db 20b1263 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 |
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 - BBNKB
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_id = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
# model_id = "Alibaba-NLP/gte-multilingual-base"
# model_id = "BAAI/bge-m3"
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 = []
for i,score in enumerate(scores):
if score > threshold:
request_details.append(codes[i][6:])
request_numbers.append(codes[i][: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)
return "Request code number:\n" + request_numbers + "\nRequest detail:\n" + request_details + "\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()]
return "Request code number: " + request_code[:3] + "\nRequest detail: " + request_code[6:] + "\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,
# )
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)")
# 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()
|