import chainlit as cl import httpx import time from groq import Groq import re from uuid import uuid4 import json from openai import OpenAI import os # from huggingface_hub import login from chainlit.input_widget import TextInput, Slider import fitz import tempfile from dotenv import load_dotenv load_dotenv() import os from huggingface_hub import login login(token=os.environ.get("HF_TOKEN")) from gliner2 import GLiNER2 model = GLiNER2.from_pretrained("Imed14205/neura-guard-pii-v0") labels =[ #"person", "first_name", "last_name", "organization", "phone number", "religion", "marital status", "address", "passport number", "email", "credit card number", "date of birth", "date", "time", "mobile phone number", "bank account number", "medication", "cpf", "driver's license number", "tax identification number", "medical condition", "blood type", "dose", "drug", "identity card number", "national id number", "ip address", "email address", "iban", "bic", "credit card expiration date", "username", "healthcare number", "registration number", "flight number", "cvv", "digital signature", "social media handle", "license plate number", "cnpj", "postal code", "passport_number", "serial number", "vehicle registration number", "credit card brand", "fax number", "visa number", "insurance company", "identity document number", "transaction number", "cvc", "passport expiration date", "social_security_number", "postal code", "country", "money", "numerical", "title", "occupation", "city", "mac address", "ip address", "password", ] @cl.action_callback("update_pii") async def on_update_pii(action: cl.Action): pii_map = cl.user_session.get("pii_map", {}) reverse_map = cl.user_session.get("reverse_pii_map", {}) key = action.payload["key"] value = action.payload["value"] pii_map[value]['locked'] = not pii_map[value]['locked'] reverse_map[key]['locked'] = not reverse_map[key]['locked'] cl.user_session.set("pii_map", pii_map) cl.user_session.set("reverse_pii_map", reverse_map) print(pii_map) print(reverse_map) # element = cl.CustomElement(name="PII", props={"dic": reverse_map}) # await cl.ElementSidebar.set_elements([]) # await cl.ElementSidebar.set_elements([element]) @cl.set_starters async def set_starters(): return [ cl.Starter( label="Example en Français", message="""Jean-Marc Durand, né le 14 avril 1987 à Lyon (69003), de nationalité française, est un ingénieur informatique marié à Sophie Martin depuis le 22 juin 2013. Il réside actuellement au 27 avenue des Lilas, appartement 42, 75019 Paris, France. Son numéro de téléphone personnel est le +33 6 48 72 19 05, son numéro de téléphone fixe est le 01 44 62 98 31, et son adresse e-mail principale est jeanmarc.durand1987@gmail.com. Il utilise également l’adresse professionnelle j.durand@techsoluce.fr. Reformule ce texte""", ), cl.Starter( label="Example en Anglais", message="""Michael Andrew Thompson, born on September 18, 1985, in Boston, Massachusetts (02118), USA, is a U.S. citizen currently living at 742 Evergreen Terrace, Apartment 5B, Brooklyn, New York, NY 11221. His mobile phone number is +1 (917) 555-3849, his home phone is +1 (718) 555-9021, and his primary email address is michael.thompson1985@gmail.com , while his work email is m.thompson@fintechcore.com. His Social Security Number is 123-45-6789, and his passport number is XK4598721, issued on March 12, 2018, expiring on March 11, 2028. etabli une mise en demeure pour la personne concerné dans ce texte. """, ), cl.Starter( label="Example en Italien", message="""Marco Alessandro Bianchi, nato il 12 febbraio 1989 a Milano (MI), Italia, è un cittadino italiano residente in Via Giuseppe Verdi 18, interno 7, 00198 Roma. Il suo numero di telefono cellulare è +39 347 582 9146, il telefono fisso è 06 8392 4751, e il suo indirizzo email personale è marco.bianchi1989@gmail.com , mentre quello professionale è m.bianchi@italtechsolutions.it . Il suo codice fiscale è BNCMRC89B12F205X e il numero di passaporto è YA3487291, rilasciato il 5 maggio 2019 con scadenza il 4 maggio 2029. Extrait les information sous forme de tableau""", ), cl.Starter( label="Example en Espagnol", message="""Carlos Javier Hernández López, nacido el 7 de julio de 1986 en Madrid (28015), España, es ciudadano español y reside en Calle Alcalá 233, piso 4ºB, 28028 Madrid. Su número de teléfono móvil es +34 612 845 739, el teléfono fijo es 91 458 2391, y su correo electrónico personal es carlos.hernandez1986@gmail.com , mientras que el correo corporativo es c.hernandez@iberdata.es . Su DNI es 48739215-M, y su número de pasaporte es PA7349821, expedido el 15 de abril de 2019 y válido hasta el 14 de abril de 2029. Quelle est la personne concerné dans ce texte""", ), cl.Starter( label="Example en Allemand", message="""Thomas Michael Schneider, geboren am 3. November 1984 in Hamburg (22085), Deutschland, ist deutscher Staatsbürger und wohnhaft in der Musterstraße 47, Wohnung 12, 80336 München. Seine Mobiltelefonnummer lautet +49 176 8345 2197, die Festnetznummer ist 089 4578 9321, und seine private E-Mail-Adresse ist thomas.schneider1984@gmail.com , während er beruflich unter t.schneider@datafusion.de erreichbar ist. Seine Steuer-Identifikationsnummer lautet 12 345 678 901, und seine Reisepassnummer ist C4X982731, ausgestellt am 22. August 2018, gültig bis 21. August 2028. Resume moi le texte""", ) ] def replace_pii(text, pii_map): for k, v in pii_map: escaped_k = re.escape(k) # Pattern : k uniquement s'il n'est pas entre [...] pattern = rf'(?