Spaces:
Runtime error
Runtime error
| # 📌 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() | |