Download app.py from guille03/emails: direct link, hf CLI and curl.
- Browser
- Download file 4.61 kB
-
https://huggingface.co/spaces/guille03/emails/resolve/main/app.py
- Command line
-
hf download hf://spaces/guille03/emails/app.py
-
curl -L -o app.py https://huggingface.co/spaces/guille03/emails/resolve/main/app.py
4.61 kB
| # -*- coding: utf-8 -*- | |
| """app.ipynb | |
| Automatically generated by Colab. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1h7xVhh5VQkN4vxWTZpjv6-PvNSTDngRs | |
| """ | |
| # La librería gradio es la que permite hacer la interfaz web para usar el modelo | |
| import gradio as gr | |
| # groq es el servicio de API para usar modelos LLM | |
| from groq import Groq | |
| # Api key for Groq | |
| API_KEY = "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" # Reemplazar con la API Key generada | |
| # Configure Groq client | |
| client = Groq(api_key=API_KEY) | |
| # Clase para generar emails usando Groq, para solo acceder directamente con el nombre | |
| # de la funcion que se quiere usar | |
| class GeneradorEmailsGroq: | |
| # Esta funcion es solo para seleccionar el modelo que se quiere usar | |
| def __init__(self, api_key: str): | |
| self.client = Groq(api_key=api_key) | |
| self.modelos = { | |
| "rapido": "llama-3.3-8b-instant", | |
| "balanceado": "llama-3.3-70b-versatile", | |
| "mejor": "llama-3.3-70b-versatile" | |
| } | |
| # Esta es la funcion que concina el correo | |
| def generar_email( | |
| self, | |
| tipo: str, | |
| categoria: str = "phishing", | |
| calidad: str = "balanceado" | |
| ) -> str: | |
| if categoria == "phishing": | |
| #Le dice al modelo en que se tiene que basar para hacer las respuestas | |
| system = "Eres experto en ciberseguridad generando ejemplos realistas de phishing para entrenamiento." | |
| #Aqui esta el prompot que se hace, cambialo si quioeres que haga algo extra op si queres que omita alguna parte | |
| prompt = f"""Actúa como un experto en ciberseguridad creando un | |
| ejemplo realista de phishing. | |
| Genera un email de phishing simulando ser {tipo} que sea tan convincente que | |
| parezca completamente real. | |
| El email debe: | |
| - Tener un asunto que haga que alguien quiera abrirlo inmediatamente | |
| - Explicar un problema urgente con {tipo}, ya sea una cuenta comprometida, un | |
| pago fallido, o una actualización necesaria | |
| - Incluir números de caso, fechas, y referencias que suenen oficiales | |
| - Si incluyes algun plan o que involucre dinero, utiliza montos o | |
| suscripciones que maneja {tipo} | |
| - No incluyas datos como 12345, utiliza numeros que sean creibles y utiliza | |
| fechas que sean cercanas a octubre del 2025 | |
| - Decir exactamente qué deben hacer (verificar, actualizar, etc.) | |
| - Usar https://home-stats-pi.vercel.app/ donde normalmente irían los links | |
| maliciosos | |
| - Terminar con una firma profesional de {tipo} con teléfono de soporte si | |
| tiene contacto de soporte, caso contrario. no incluir la linea de numero de | |
| contacto de soporte | |
| El tono debe ser: profesional, urgente sin ser alarmista, y completamente | |
| creíble. | |
| Genera el email completo sin explicaciones adicionales.""" | |
| else: | |
| system = "Genera emails legítimos y naturales." | |
| prompt = f"Genera un email legítimo de tipo {tipo}. Solo el email." | |
| try: | |
| response = self.client.chat.completions.create( | |
| model=self.modelos[calidad], | |
| messages=[ | |
| {"role": "system", "content": system}, | |
| {"role": "user", "content": prompt} | |
| ], | |
| # Esto le indica que tan creativo tendria que ser con las respuestas que de | |
| temperature=0.85, | |
| # Aqui le indica cuantas palabras tiene que generar, con 1000 | |
| # son aproximadamente 750 palabras | |
| max_tokens=1000 | |
| ) | |
| # retorna el texto que genero el modelo desde la api | |
| return response.choices[0].message.content | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| return None | |
| if __name__ == "__main__": | |
| generador = GeneradorEmailsGroq(api_key=API_KEY) | |
| # Aqui poder cambiar el parametro que dice netflix para que pruebe con otras empresas | |
| email = generador.generar_email("Netflix", "phishing", "mejor") | |
| # Si genero un correo lo mostrara | |
| if email: | |
| print("\n") | |
| print(email) | |
| # Esta es la interfaz que se hace en gradio | |
| def generar_email_gradio(nombre_empresa, categoria, calidad): | |
| generador = GeneradorEmailsGroq(api_key=API_KEY) | |
| email = generador.generar_email(nombre_empresa, categoria, calidad) | |
| return email | |
| iface = gr.Interface( | |
| fn=generar_email_gradio, | |
| inputs=[ | |
| gr.Textbox(label="Nombre de la empresa"), | |
| gr.Radio(["phishing", "legitimo"], label="Categoría del email"), | |
| gr.Dropdown(["rapido", "balanceado", "mejor"], label="Calidad del modelo") | |
| ], | |
| outputs=gr.Textbox(label="Email Generado", elem_id="email_output", | |
| lines=10) | |
| ) | |
| # Aqui se lanza la interfaz web | |
| iface.launch() | |