Spaces:
Sleeping
Sleeping
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" | |
model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2') | |
codes_emb = model.encode(codes) | |
def respond( | |
message, | |
history: list[tuple[str, str]], | |
threshold | |
): | |
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] | |
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:] + "\n Plate 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) | |
] | |
) | |
if __name__ == "__main__": | |
demo.launch() | |