C2MV commited on
Commit
4749da3
verified
1 Parent(s): bcaa66a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -96
app.py CHANGED
@@ -1,10 +1,11 @@
1
  import gradio as gr
2
  import torch
3
- from transformers import AutoModelForCausalLM, AutoTokenizer, MarianMTModel, MarianTokenizer
4
  import time
5
  from functools import wraps
6
  import sys
7
  import spaces # Aseg煤rate de que este m贸dulo est茅 disponible y correctamente instalado
 
8
 
9
  # Decorador para medir el tiempo de ejecuci贸n
10
  def medir_tiempo(func):
@@ -18,125 +19,99 @@ def medir_tiempo(func):
18
  return resultado
19
  return wrapper
20
 
21
- # Verificar si CUDA est谩 disponible para el modelo principal
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  device = "cuda" if torch.cuda.is_available() else "cpu"
23
  if device == "cpu":
24
  print("Advertencia: CUDA no est谩 disponible. Se usar谩 la CPU, lo que puede ser lento.")
25
 
26
- # Cargar el tokenizador y el modelo principal desde HuggingFace
27
- model_name = "dmis-lab/selfbiorag_7b"
28
-
29
  try:
30
- print("Cargando el tokenizador y el modelo desde HuggingFace...")
31
- tokenizer = AutoTokenizer.from_pretrained(model_name)
32
  except ValueError as e:
33
  print(f"Error al cargar el tokenizador: {e}")
34
  sys.exit(1)
35
 
 
36
  try:
37
- model = AutoModelForCausalLM.from_pretrained(
38
- model_name,
39
- torch_dtype=torch.float16 if device == "cuda" else torch.float32
40
- ).to(device)
41
- except Exception as e:
42
- print(f"Error al cargar el modelo: {e}")
43
- sys.exit(1)
44
-
45
- # Cargar el modelo de traducci贸n en CPU
46
- try:
47
- print("Cargando el tokenizador y el modelo de traducci贸n en CPU...")
48
- translation_model_name = "Helsinki-NLP/opus-mt-en-es"
49
- translator_tokenizer = MarianTokenizer.from_pretrained(translation_model_name)
50
- translator_model = MarianMTModel.from_pretrained(translation_model_name).to("cpu") # Forzar a CPU
51
  except Exception as e:
52
- print(f"Error al cargar el modelo de traducci贸n: {e}")
53
  sys.exit(1)
54
 
55
- @spaces.GPU(duration=120) # Decorador para asignar GPU durante 120 segundos
56
- @medir_tiempo
57
- def generar_respuesta(consulta):
58
- """
59
- Funci贸n que genera una respuesta a partir de una consulta dada.
60
- """
61
- try:
62
- if not consulta.strip():
63
- return "Por favor, ingresa una consulta v谩lida."
64
-
65
- # Tokenizar la consulta
66
- inputs = tokenizer.encode(consulta, return_tensors="pt").to(device)
67
-
68
- # Configurar los par谩metros de generaci贸n
69
- generation_kwargs = {
70
- "max_new_tokens": 100, # Ajustado a 100
71
- "do_sample": False # No usar sampling
72
- # "temperature": 0.6, # Eliminado para evitar advertencias
73
- # "top_p": 0.9 # Eliminado para evitar advertencias
74
- }
75
-
76
- # Generar la respuesta
77
- with torch.no_grad():
78
- outputs = model.generate(input_ids=inputs, **generation_kwargs)
79
-
80
- # Decodificar la respuesta
81
- respuesta = tokenizer.decode(outputs[0], skip_special_tokens=True)
82
- return respuesta
83
- except Exception as e:
84
- print(f"Error durante la generaci贸n de respuesta: {e}")
85
- return f"Error al generar la respuesta: {e}"
86
-
87
- def traducir_texto(texto):
88
- """
89
- Funci贸n que traduce un texto de ingl茅s a espa帽ol.
90
- """
91
- try:
92
- if not texto.strip():
93
- return "No hay texto para traducir."
94
-
95
- # Tokenizar el texto a traducir
96
- translated = translator_model.generate(**translator_tokenizer(texto, return_tensors="pt", padding=True))
97
-
98
- # Decodificar la traducci贸n
99
- traduccion = translator_tokenizer.decode(translated[0], skip_special_tokens=True)
100
- return traduccion
101
- except Exception as e:
102
- print(f"Error durante la traducci贸n: {e}")
103
- return f"Error al traducir el texto: {e}"
104
-
105
- def procesar_consulta(consulta, idioma):
106
- """
107
- Funci贸n que procesa la consulta y devuelve la respuesta original y/o traducida seg煤n el idioma seleccionado.
108
- """
109
- respuesta_original = generar_respuesta(consulta)
110
-
111
- if idioma == "Espa帽ol":
112
- traduccion = traducir_texto(respuesta_original)
113
- else:
114
- traduccion = ""
115
-
116
- return respuesta_original, traduccion
117
-
118
  # Definir la interfaz de Gradio
119
- titulo = "Generador de Respuestas con SelfBioRAG 7B"
120
- descripcion = "Ingresa una consulta y selecciona el idioma de salida. El modelo generar谩 una respuesta basada en el contenido proporcionado."
 
 
 
121
 
122
  iface = gr.Interface(
123
- fn=procesar_consulta,
124
  inputs=[
125
- gr.Textbox(lines=5, placeholder="Escribe tu consulta aqu铆...", label="Consulta"),
126
- gr.Dropdown(choices=["Ingl茅s", "Espa帽ol"], value="Espa帽ol", label="Idioma de Salida")
127
- ],
128
- outputs=[
129
- gr.Textbox(label="Respuesta Original (Ingl茅s)"),
130
- gr.Textbox(label="Traducci贸n al Espa帽ol")
 
 
 
 
 
 
131
  ],
 
132
  title=titulo,
133
  description=descripcion,
134
  examples=[
135
  [
136
- "Clasifica el siguiente informe de radiolog铆a seg煤n la parte del cuerpo a la que se refiere (por ejemplo, pecho, abdomen, cerebro, etc.): Los discos intervertebrales en L4-L5 y L5-S1 muestran signos de degeneraci贸n con leve abultamiento que comprime la ra铆z nerviosa adyacente."
137
  ],
138
  [
139
- "Resume los puntos clave sobre el papel de las mutaciones en los genes BRCA1 y BRCA2 en el aumento del riesgo de c谩ncer de mama."
140
  ]
141
  ],
142
  cache_examples=False,
 
1
  import gradio as gr
2
  import torch
3
+ from transformers import AutoTokenizer
4
  import time
5
  from functools import wraps
6
  import sys
7
  import spaces # Aseg煤rate de que este m贸dulo est茅 disponible y correctamente instalado
8
+ from model import GenerRNA # Importa tu modelo personalizado
9
 
10
  # Decorador para medir el tiempo de ejecuci贸n
11
  def medir_tiempo(func):
 
19
  return resultado
20
  return wrapper
21
 
22
+ # Decorador para asignar GPU durante la ejecuci贸n de la funci贸n
23
+ # Nota: Aseg煤rate de que el decorador @spaces.GPU est茅 disponible en tu entorno
24
+ @spaces.GPU(duration=120) # Asigna GPU durante 120 segundos
25
+ @medir_tiempo
26
+ def generar_rna_sequence(prompt, max_length=256):
27
+ """
28
+ Funci贸n que genera una secuencia de RNA a partir de una secuencia inicial dada.
29
+ """
30
+ try:
31
+ if not prompt.strip():
32
+ return "Por favor, ingresa una secuencia de inicio v谩lida."
33
+
34
+ # Tokenizar la entrada
35
+ inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
36
+
37
+ # Generar la secuencia
38
+ with torch.no_grad():
39
+ outputs = model.generate(
40
+ inputs,
41
+ max_length=max_length,
42
+ num_return_sequences=1,
43
+ no_repeat_ngram_size=2,
44
+ temperature=0.7,
45
+ top_k=50,
46
+ top_p=0.95,
47
+ do_sample=True
48
+ )
49
+
50
+ # Decodificar la secuencia generada
51
+ generated_sequence = tokenizer.decode(outputs[0], skip_special_tokens=True)
52
+ return generated_sequence
53
+
54
+ except Exception as e:
55
+ print(f"Error durante la generaci贸n de secuencia: {e}")
56
+ return f"Error al generar la secuencia: {e}"
57
+
58
+ # Configurar el dispositivo (GPU si est谩 disponible)
59
  device = "cuda" if torch.cuda.is_available() else "cpu"
60
  if device == "cpu":
61
  print("Advertencia: CUDA no est谩 disponible. Se usar谩 la CPU, lo que puede ser lento.")
62
 
63
+ # Cargar el tokenizador
 
 
64
  try:
65
+ print("Cargando el tokenizador...")
66
+ tokenizer = AutoTokenizer.from_pretrained("tokenizer_bpe_1024")
67
  except ValueError as e:
68
  print(f"Error al cargar el tokenizador: {e}")
69
  sys.exit(1)
70
 
71
+ # Cargar el modelo GenerRNA
72
  try:
73
+ print("Cargando el modelo GenerRNA...")
74
+ model = GenerRNA() # Instancia tu modelo personalizado
75
+ model.load_state_dict(torch.load("model.pt.recombined", map_location=device))
76
+ model.to(device)
77
+ model.eval()
78
+ print("Modelo GenerRNA cargado exitosamente.")
 
 
 
 
 
 
 
 
79
  except Exception as e:
80
+ print(f"Error al cargar el modelo GenerRNA: {e}")
81
  sys.exit(1)
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  # Definir la interfaz de Gradio
84
+ titulo = "GenerRNA - Generador de Secuencias de RNA"
85
+ descripcion = (
86
+ "GenerRNA es un modelo generativo de RNA basado en una arquitectura Transformer. "
87
+ "Ingresa una secuencia inicial opcional y define la longitud m谩xima para generar nuevas secuencias de RNA."
88
+ )
89
 
90
  iface = gr.Interface(
91
+ fn=generar_rna_sequence,
92
  inputs=[
93
+ gr.Textbox(
94
+ lines=5,
95
+ placeholder="Ingresa una secuencia de RNA inicial (opcional)...",
96
+ label="Secuencia Inicial"
97
+ ),
98
+ gr.Slider(
99
+ minimum=50,
100
+ maximum=1000,
101
+ step=50,
102
+ value=256,
103
+ label="Longitud M谩xima de la Secuencia"
104
+ )
105
  ],
106
+ outputs=gr.Textbox(label="Secuencia de RNA Generada"),
107
  title=titulo,
108
  description=descripcion,
109
  examples=[
110
  [
111
+ "AUGGCUACGUAUCGACGUA"
112
  ],
113
  [
114
+ "GCUAUGCUAGCUAGCUGAC"
115
  ]
116
  ],
117
  cache_examples=False,