C2MV commited on
Commit
1baae24
·
verified ·
1 Parent(s): dedbdb9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -79
app.py CHANGED
@@ -1,21 +1,10 @@
1
  import gradio as gr
2
  import torch
3
- from transformers import AutoModelForCausalLM, AutoTokenizer
4
  import time
5
  from functools import wraps
6
  import sys
7
-
8
- # Intentar importar 'spaces' para usar el decorador GPU si está disponible
9
- try:
10
- import spaces
11
- except ImportError:
12
- # Si 'spaces' no está disponible, definir un decorador vacío
13
- def GPU(duration):
14
- def decorator(func):
15
- return func
16
- return decorator
17
-
18
- spaces = type('spaces', (), {'GPU': GPU})
19
 
20
  # Decorador para medir el tiempo de ejecución
21
  def medir_tiempo(func):
@@ -29,110 +18,125 @@ def medir_tiempo(func):
29
  return resultado
30
  return wrapper
31
 
32
- # Configurar el dispositivo (GPU si está disponible)
33
  device = "cuda" if torch.cuda.is_available() else "cpu"
34
  if device == "cpu":
35
  print("Advertencia: CUDA no está disponible. Se usará la CPU, lo que puede ser lento.")
36
 
37
- # Ruta local al tokenizador
38
- tokenizer_path = "tokenizer_bpe_1024"
39
 
40
- # Cargar el tokenizador desde el directorio local
41
  try:
42
- print(f"Cargando el tokenizador desde el directorio local '{tokenizer_path}'...")
43
- tokenizer = AutoTokenizer.from_pretrained(tokenizer_path)
44
  except ValueError as e:
45
  print(f"Error al cargar el tokenizador: {e}")
46
  sys.exit(1)
47
- except Exception as e:
48
- print(f"Error inesperado al cargar el tokenizador: {e}")
49
- sys.exit(1)
50
-
51
- # Ruta al modelo local
52
- model_path = "yangheng/OmniGenome"
53
 
54
- # Cargar el modelo desde el archivo local
55
  try:
56
- print(f"Cargando el modelo GenerRNA desde '{model_path}'...")
57
  model = AutoModelForCausalLM.from_pretrained(
58
- model_path,
59
  torch_dtype=torch.float16 if device == "cuda" else torch.float32
60
  ).to(device)
61
- model.eval()
62
- print("Modelo GenerRNA cargado exitosamente.")
63
- except FileNotFoundError:
64
- print(f"Error: El archivo del modelo '{model_path}' no se encontró.")
65
  sys.exit(1)
 
 
 
 
 
 
 
66
  except Exception as e:
67
- print(f"Error al cargar el modelo GenerRNA: {e}")
68
  sys.exit(1)
69
 
70
  @spaces.GPU(duration=120) # Decorador para asignar GPU durante 120 segundos
71
  @medir_tiempo
72
- def generar_rna_sequence(prompt, max_length=256):
73
  """
74
- Función que genera una secuencia de RNA a partir de una secuencia inicial dada.
75
  """
76
  try:
77
- if not prompt.strip():
78
- return "Por favor, ingresa una secuencia de inicio válida."
79
-
80
- # Tokenizar la entrada
81
- inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
82
-
83
- # Generar la secuencia
 
 
 
 
 
 
 
 
84
  with torch.no_grad():
85
- outputs = model.generate(
86
- inputs,
87
- max_length=max_length,
88
- num_return_sequences=1,
89
- no_repeat_ngram_size=2,
90
- temperature=0.7,
91
- top_k=50,
92
- top_p=0.95,
93
- do_sample=True
94
- )
95
-
96
- # Decodificar la secuencia generada
97
- generated_sequence = tokenizer.decode(outputs[0], skip_special_tokens=True)
98
- return generated_sequence
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  except Exception as e:
101
- print(f"Error durante la generación de secuencia: {e}")
102
- return f"Error al generar la secuencia: {e}"
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
  # Definir la interfaz de Gradio
105
- titulo = "GenerRNA - Generador de Secuencias de RNA"
106
- descripcion = (
107
- "GenerRNA es un modelo generativo de RNA basado en una arquitectura Transformer. "
108
- "Ingresa una secuencia inicial opcional y define la longitud máxima para generar nuevas secuencias de RNA."
109
- )
110
 
111
  iface = gr.Interface(
112
- fn=generar_rna_sequence,
113
  inputs=[
114
- gr.Textbox(
115
- lines=5,
116
- placeholder="Ingresa una secuencia de RNA inicial (opcional)...",
117
- label="Secuencia Inicial"
118
- ),
119
- gr.Slider(
120
- minimum=50,
121
- maximum=1000,
122
- step=50,
123
- value=256,
124
- label="Longitud Máxima de la Secuencia"
125
- )
126
  ],
127
- outputs=gr.Textbox(label="Secuencia de RNA Generada"),
128
  title=titulo,
129
  description=descripcion,
130
  examples=[
131
  [
132
- "AUGGCUACGUAUCGACGUA"
133
  ],
134
  [
135
- "GCUAUGCUAGCUAGCUGAC"
136
  ]
137
  ],
138
  cache_examples=False,
 
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
  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,