# 馃搶 INSTALAR DEPENDENCIAS (si no est谩n en tu entorno) # pip install transformers torch gradio whisper gtts accelerate import gradio as gr import torch import random from transformers import AutoModelForCausalLM, AutoTokenizer import whisper from gtts import gTTS # 馃搶 Verificar si se tiene GPU disponible device = "cuda" if torch.cuda.is_available() else "cpu" # 馃搶 MODELO ESPA脩OL P脷BLICO (con c贸digo personalizado) modelo_id = "fbarragan/helloworld_model" # Intentar importar accelerate sin fallar try: import accelerate accelerate_installed = True except ImportError: accelerate_installed = False # Cargar el modelo de manera segura modelo = AutoModelForCausalLM.from_pretrained( modelo_id, torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, trust_remote_code=True ).to(device) # 馃搶 LISTA NEGRA DE INSULTOS palabras_prohibidas = [ "Abollado", "Arrecho(a)", "Azote de barrio", "Bolsa", "Cagao E zamuro", "Ladilla", "Moj贸n", "脩ero", "Piche", "Rata(贸n)", "Vuelto mierda" ] # 馃搶 DICCIONARIO VENEZOLANO diccionario_venezolano = { "dinero": "palo", "amigo": "pana", "genial": "ch茅vere", "problema": "culebra", "fiesta": "bonche", "hola": "隆Epa mi pana!", "adi贸s": "隆V谩yalo, chamo!", } # 馃搶 CARGAR MODELO (requiere autenticaci贸n si es privado) modelo_id = "deepseek-ai/DeepSeek-R1" tokenizer = AutoTokenizer.from_pretrained(modelo_id, trust_remote_code=True) # 馃専 Clave para modelos con c贸digo personalizado modelo = AutoModelForCausalLM.from_pretrained( modelo_id, device_map="auto", torch_dtype=torch.float16, trust_remote_code=True # 馃専 Necesario para DeepSeek-R1 ) # 馃搶 LISTA NEGRA DE INSULTOS (previamente generada) palabras_prohibidas = [ "Abollado", "Arrecho(a)", "Azote de barrio", "Bolsa", "Cagao E zamuro", "Caimanera", "Cariaquito morao", "Chimbo, todo", "Chimbo", "Chola", "Conejo", "Co帽o'e madre", "Culebra", "Flux", "Friqueado", "Furruqueado", "Guaya", "G眉evo", "Hediondo", "Ladilla", "Landro", "Mamag眉evo", "Mandinga", "Mapanare", "Marico triste", "Metra", "Moj贸n", "Mu茅rgano", "脩ero", "Oracio", "Pasoneado(a)", "Pava", "Peaje", "Pecueca", "Piche", "Rata(贸n)", "Raya'o", "Rolo", "Salado", "Tach贸n", "Taguara", "Vergajo", "Viol铆n", "Vuelto mierda" ] # 馃搶 CARGAR DICCIONARIO VENEZOLANO COMPLETO def cargar_diccionario(ruta_archivo): diccionario = { "saludo": [], "despedida": [], "afirmacion": [], "negacion": [], "colloquial": {} # Palabras venezolanas y sus equivalentes formales } with open(ruta_archivo, "r", encoding="utf-8") as f: for linea in f: linea = linea.strip() if linea and not linea.startswith("#"): partes = linea.split(".-", 1) if len(partes) >= 2: palabra = partes[0].strip() definicion = partes[1].strip().lower() # Clasificar palabras seg煤n contexto if "saludo" in definicion: diccionario["saludo"].append(palabra) elif "despedida" in definicion: diccionario["despedida"].append(palabra) elif "afirmaci贸n" in definicion or "positivo" in definicion: diccionario["afirmacion"].append(palabra) elif "negaci贸n" in definicion or "negativo" in definicion: diccionario["negacion"].append(palabra) else: # Agregar palabras coloquiales con su significado if palabra not in palabras_prohibidas: diccionario["colloquial"][palabra] = definicion return diccionario diccionario_venezolano = cargar_diccionario("Diccionario_Venezolano.txt") # 馃搶 Funci贸n para adaptar respuestas def adaptar_respuesta(respuesta): # Filtrar insultos for palabra in palabras_prohibidas: respuesta = respuesta.replace(palabra, "****") # Reemplazar t茅rminos formales por coloquiales for formal, venezolano in diccionario_venezolano.items(): respuesta = respuesta.replace(formal, venezolano) return respuesta # 馃搶 Funci贸n principal del asistente def chamo_asistente(pregunta): inputs = tokenizer(pregunta, return_tensors="pt").to(device) # Enviar a GPU si est谩 disponible inputs = tokenizer(pregunta, return_tensors="pt") output = modelo.generate(**inputs, max_new_tokens=150) respuesta = tokenizer.decode(output[0], skip_special_tokens=True) return adaptar_respuesta(respuesta) # 馃搶 Procesar audio def procesar_audio(archivo): modelo_whisper = whisper.load_model("small") # Cargar modelo una sola vez texto = modelo_whisper.transcribe(archivo)["text"] respuesta = chamo_asistente(texto) # Convertir texto a audio texto = whisper.load_model("small").transcribe(archivo)["text"] respuesta = chamo_asistente(texto) tts = gTTS(respuesta, lang="es") tts.save("respuesta.mp3") return respuesta, "respuesta.mp3" # 馃搶 Interfaz Gradio iface_texto = gr.Interface(fn=chamo_asistente, inputs="text", outputs="text") iface_voz = gr.Interface(fn=procesar_audio, inputs="microphone", outputs=["text", "audio"]) demo = gr.TabbedInterface([iface_texto, iface_voz], ["Texto", "Voz"]) demo.launch() demo.launch()