import gradio as gr import torch from transformers import AutoTokenizer import time from functools import wraps import sys import spaces # Asegúrate de que este módulo esté disponible y correctamente instalado from model import GenerRNA # Importa tu modelo personalizado # Decorador para medir el tiempo de ejecución def medir_tiempo(func): @wraps(func) def wrapper(*args, **kwargs): inicio = time.time() resultado = func(*args, **kwargs) fin = time.time() tiempo_transcurrido = fin - inicio print(f"Tiempo de ejecución de '{func.__name__}': {tiempo_transcurrido:.2f} segundos") return resultado return wrapper # Decorador para asignar GPU durante la ejecución de la función # Nota: Asegúrate de que el decorador @spaces.GPU esté disponible en tu entorno @spaces.GPU(duration=120) # Asigna GPU durante 120 segundos @medir_tiempo def generar_rna_sequence(prompt, max_length=256): """ Función que genera una secuencia de RNA a partir de una secuencia inicial dada. """ try: if not prompt.strip(): return "Por favor, ingresa una secuencia de inicio válida." # Tokenizar la entrada inputs = tokenizer.encode(prompt, return_tensors="pt").to(device) # Generar la secuencia with torch.no_grad(): outputs = model.generate( inputs, max_length=max_length, num_return_sequences=1, no_repeat_ngram_size=2, temperature=0.7, top_k=50, top_p=0.95, do_sample=True ) # Decodificar la secuencia generada generated_sequence = tokenizer.decode(outputs[0], skip_special_tokens=True) return generated_sequence except Exception as e: print(f"Error durante la generación de secuencia: {e}") return f"Error al generar la secuencia: {e}" # Configurar el dispositivo (GPU si está disponible) device = "cuda" if torch.cuda.is_available() else "cpu" if device == "cpu": print("Advertencia: CUDA no está disponible. Se usará la CPU, lo que puede ser lento.") # Cargar el tokenizador try: print("Cargando el tokenizador...") tokenizer = AutoTokenizer.from_pretrained("tokenizer_bpe_1024") except ValueError as e: print(f"Error al cargar el tokenizador: {e}") sys.exit(1) # Cargar el modelo GenerRNA try: print("Cargando el modelo GenerRNA...") model = GenerRNA() # Instancia tu modelo personalizado model.load_state_dict(torch.load("model.pt.recombined", map_location=device)) model.to(device) model.eval() print("Modelo GenerRNA cargado exitosamente.") except Exception as e: print(f"Error al cargar el modelo GenerRNA: {e}") sys.exit(1) # Definir la interfaz de Gradio titulo = "GenerRNA - Generador de Secuencias de RNA" descripcion = ( "GenerRNA es un modelo generativo de RNA basado en una arquitectura Transformer. " "Ingresa una secuencia inicial opcional y define la longitud máxima para generar nuevas secuencias de RNA." ) iface = gr.Interface( fn=generar_rna_sequence, inputs=[ gr.Textbox( lines=5, placeholder="Ingresa una secuencia de RNA inicial (opcional)...", label="Secuencia Inicial" ), gr.Slider( minimum=50, maximum=1000, step=50, value=256, label="Longitud Máxima de la Secuencia" ) ], outputs=gr.Textbox(label="Secuencia de RNA Generada"), title=titulo, description=descripcion, examples=[ [ "AUGGCUACGUAUCGACGUA" ], [ "GCUAUGCUAGCUAGCUGAC" ] ], cache_examples=False, allow_flagging="never" ) # Ejecutar la interfaz if __name__ == "__main__": iface.launch()