clavel commited on
Commit
4fc8d29
·
verified ·
1 Parent(s): 1e1bb6d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -32
app.py CHANGED
@@ -2,8 +2,8 @@ import gradio as gr
2
  from huggingface_hub import InferenceClient
3
  from transformers import pipeline
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
5
- import torch
6
  import os
 
7
 
8
  title = "Generador y clasificador de coloquialismos cubanos"
9
  description = "Genera texto con el dialecto cubano y detecta expresiones coloquiales cubanas."
@@ -23,38 +23,62 @@ Se utilizó el dataset somosnlp-hackathon-2026/patriae-cuba-literature-dataset p
23
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
24
 
25
  # Cargar el modelo para clasificación
 
26
  classifier = pipeline(
27
  "text-classification",
28
  model='somosnlp-hackathon-2026/patriae-cuban-dialect-model',
29
  token=HF_TOKEN
30
  )
31
 
32
- repo_id='somosnlp-hackathon-2026/patriae-cuban-dialect-model'
 
 
 
 
33
 
 
34
  try:
35
- # Cargar tokenizador y modelo para generación
36
  tokenizer_chat = AutoTokenizer.from_pretrained(repo_id, token=HF_TOKEN)
 
 
 
 
 
 
 
 
37
  model_chat = AutoModelForCausalLM.from_pretrained(
38
  repo_id,
39
  torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
40
  device_map="auto" if torch.cuda.is_available() else None,
41
- token=HF_TOKEN
 
42
  )
 
43
 
44
- # Crear pipeline de generación de texto
45
  generator = pipeline(
46
  "text-generation",
47
  model=model_chat,
48
  tokenizer=tokenizer_chat,
49
- device=0 if torch.cuda.is_available() else -1
 
 
 
 
 
50
  )
 
51
  chat_available = True
52
  print("✅ Modelo de chat cargado correctamente")
53
 
54
  except Exception as e:
 
55
  print(f"⚠️ Error cargando modelo de chat: {e}")
56
  chat_available = False
57
  generator = None
 
58
 
59
 
60
  def chat_response(message, history):
@@ -62,7 +86,7 @@ def chat_response(message, history):
62
  Función para generar respuestas en dialecto cubano usando el modelo de chat
63
  """
64
  if not chat_available:
65
- yield "⚠️ El modelo de chat no está disponible. Usa el clasificador por ahora."
66
  return
67
 
68
  if not message or message.strip() == "":
@@ -70,20 +94,19 @@ def chat_response(message, history):
70
  return
71
 
72
  try:
73
- # Construir el prompt con contexto
74
- prompt = f"""Eres un cubano conversando con un amigo. Responde con naturalidad usando el dialecto cubano.
75
-
76
- Usuario: {message}
77
- Cubano:"""
78
 
79
- # Generar respuesta
80
  result = generator(
81
  prompt,
82
- max_new_tokens=150,
83
  temperature=0.7,
84
- top_p=0.95,
85
  do_sample=True,
86
- pad_token_id=tokenizer_chat.eos_token_id
 
 
87
  )
88
 
89
  # Extraer la respuesta generada
@@ -95,6 +118,10 @@ Cubano:"""
95
  if not response:
96
  response = "¡Ay, mi hermano! No sé qué decirte, pero pa' que veas que estoy aquí escuchando."
97
 
 
 
 
 
98
  yield response
99
 
100
  except Exception as e:
@@ -112,11 +139,6 @@ def classify_text(text):
112
  # Obtener resultados del modelo
113
  results = classifier(text)
114
 
115
- # DEBUG: Imprimir para ver la estructura (puedes eliminar después)
116
- print(f"Results: {results}")
117
- print(f"Type: {type(results)}")
118
- print(f"Length: {len(results)}")
119
-
120
  # Verificar que results no esté vacío
121
  if not results or len(results) == 0:
122
  return "❌ No se obtuvieron resultados del modelo."
@@ -128,17 +150,14 @@ def classify_text(text):
128
 
129
  # Determinar si es coloquial (LABEL_1 = coloquial, LABEL_0 = no coloquial)
130
  if label == "LABEL_1":
131
- es_coloquial = True
132
  emoji = "🇨🇺"
133
  tipo = "**COLOQUIAL CUBANO**"
134
  descripcion = "✅ Este texto contiene expresiones típicas del dialecto cubano."
135
  elif label == "LABEL_0":
136
- es_coloquial = False
137
  emoji = "📚"
138
  tipo = "**NO COLOQUIAL / ESTÁNDAR**"
139
  descripcion = "ℹ️ Este texto usa lenguaje estándar, sin expresiones coloquiales cubanas."
140
  else:
141
- # Si la etiqueta no es LABEL_0 ni LABEL_1, mostrar la etiqueta original
142
  emoji = "🔍"
143
  tipo = f"**{label}**"
144
  descripcion = f"Etiqueta desconocida: {label}"
@@ -153,8 +172,9 @@ def classify_text(text):
153
 
154
  """
155
  return output
 
156
  except Exception as e:
157
- return f"❌ Error en clasificación: {str(e)}\n\nDetalles técnicos: El modelo devolvió: {results if 'results' in locals() else 'No hay resultados'}"
158
 
159
 
160
  # Interfaz de Chat
@@ -163,11 +183,9 @@ chat_interface = gr.ChatInterface(
163
  title="💬 Chat en Dialecto Cubano",
164
  description="Conversa con un modelo entrenado en dialecto cubano.",
165
  examples=[
166
- "¿Qué bolá? ¿Cómo andas?",
167
  "Cuéntame qué hiciste hoy.",
168
- "¿Cómo se dice 'amigo' en español cubano?",
169
- "Dime un refrán cubano.",
170
- "¿Qué opinas de la comida cubana?"
171
  ]
172
  )
173
 
@@ -176,7 +194,7 @@ classifier_interface = gr.Interface(
176
  fn=classify_text,
177
  inputs=gr.Textbox(
178
  label="Texto a clasificar",
179
- placeholder="Escribe una frase en cubano...",
180
  lines=5
181
  ),
182
  outputs=gr.Markdown(label="Resultado"),
@@ -188,7 +206,6 @@ classifier_interface = gr.Interface(
188
  ["Los pueblos que no se conocen han de darse prisa para conocerse, como quienes van a pelear juntos."],
189
  ["El cielo está despejado y hace buen tiempo."],
190
  ["¿Qué bolá? ¿Cómo andas? ¡Tremenda jodedera!"],
191
-
192
  ]
193
  )
194
 
@@ -201,7 +218,15 @@ with gr.Blocks(title=title) as demo:
201
  classifier_interface.render()
202
 
203
  with gr.Tab("💬 Chat"):
204
- chat_interface.render()
 
 
 
 
 
 
 
 
205
 
206
  gr.Markdown(article)
207
 
 
2
  from huggingface_hub import InferenceClient
3
  from transformers import pipeline
4
  from transformers import AutoTokenizer, AutoModelForCausalLM
 
5
  import os
6
+ import torch
7
 
8
  title = "Generador y clasificador de coloquialismos cubanos"
9
  description = "Genera texto con el dialecto cubano y detecta expresiones coloquiales cubanas."
 
23
  HF_TOKEN = os.environ.get("HF_TOKEN", None)
24
 
25
  # Cargar el modelo para clasificación
26
+ print("📊 Cargando clasificador...")
27
  classifier = pipeline(
28
  "text-classification",
29
  model='somosnlp-hackathon-2026/patriae-cuban-dialect-model',
30
  token=HF_TOKEN
31
  )
32
 
33
+ repo_id = 'somosnlp-hackathon-2026/patriae-cuban-dialect-model'
34
+ chat_available = False
35
+ generator = None
36
+ tokenizer_chat = None
37
+ error_message = ""
38
 
39
+ print("💬 Intentando cargar modelo de chat...")
40
  try:
41
+ # Cargar tokenizador
42
  tokenizer_chat = AutoTokenizer.from_pretrained(repo_id, token=HF_TOKEN)
43
+ print("✅ Tokenizador cargado")
44
+
45
+ # Configurar token de padding
46
+ if tokenizer_chat.pad_token is None:
47
+ tokenizer_chat.pad_token = tokenizer_chat.eos_token
48
+ print("✅ Token de padding configurado")
49
+
50
+ # Cargar modelo para generación
51
  model_chat = AutoModelForCausalLM.from_pretrained(
52
  repo_id,
53
  torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
54
  device_map="auto" if torch.cuda.is_available() else None,
55
+ token=HF_TOKEN,
56
+ low_cpu_mem_usage=True
57
  )
58
+ print("✅ Modelo cargado")
59
 
60
+ # Crear pipeline de generación de texto con parámetros optimizados
61
  generator = pipeline(
62
  "text-generation",
63
  model=model_chat,
64
  tokenizer=tokenizer_chat,
65
+ device=0 if torch.cuda.is_available() else -1,
66
+ max_new_tokens=100, # Reducido para velocidad
67
+ temperature=0.7,
68
+ top_p=0.95,
69
+ do_sample=True,
70
+ repetition_penalty=1.1 # Evita repeticiones
71
  )
72
+
73
  chat_available = True
74
  print("✅ Modelo de chat cargado correctamente")
75
 
76
  except Exception as e:
77
+ error_message = str(e)
78
  print(f"⚠️ Error cargando modelo de chat: {e}")
79
  chat_available = False
80
  generator = None
81
+ tokenizer_chat = None
82
 
83
 
84
  def chat_response(message, history):
 
86
  Función para generar respuestas en dialecto cubano usando el modelo de chat
87
  """
88
  if not chat_available:
89
+ yield f"⚠️ El modelo de chat no está disponible.\n\n**Error:** {error_message}\n\nUsa el clasificador por ahora."
90
  return
91
 
92
  if not message or message.strip() == "":
 
94
  return
95
 
96
  try:
97
+ # Construir el prompt con contexto más corto para velocidad
98
+ prompt = f"""Eres un cubano conversando con un amigo. Responde con naturalidad usando el dialecto cubano:\nUsuario: {message}\nCubano:"""
 
 
 
99
 
100
+ # Generar respuesta con parámetros optimizados
101
  result = generator(
102
  prompt,
103
+ max_new_tokens=80, # Límite de tokens para respuesta más rápida
104
  temperature=0.7,
105
+ top_p=0.9,
106
  do_sample=True,
107
+ repetition_penalty=1.15,
108
+ pad_token_id=tokenizer_chat.eos_token_id if tokenizer_chat else None,
109
+ eos_token_id=tokenizer_chat.eos_token_id if tokenizer_chat else None
110
  )
111
 
112
  # Extraer la respuesta generada
 
118
  if not response:
119
  response = "¡Ay, mi hermano! No sé qué decirte, pero pa' que veas que estoy aquí escuchando."
120
 
121
+ # Limitar respuesta a 200 caracteres para velocidad
122
+ if len(response) > 200:
123
+ response = response[:200] + "..."
124
+
125
  yield response
126
 
127
  except Exception as e:
 
139
  # Obtener resultados del modelo
140
  results = classifier(text)
141
 
 
 
 
 
 
142
  # Verificar que results no esté vacío
143
  if not results or len(results) == 0:
144
  return "❌ No se obtuvieron resultados del modelo."
 
150
 
151
  # Determinar si es coloquial (LABEL_1 = coloquial, LABEL_0 = no coloquial)
152
  if label == "LABEL_1":
 
153
  emoji = "🇨🇺"
154
  tipo = "**COLOQUIAL CUBANO**"
155
  descripcion = "✅ Este texto contiene expresiones típicas del dialecto cubano."
156
  elif label == "LABEL_0":
 
157
  emoji = "📚"
158
  tipo = "**NO COLOQUIAL / ESTÁNDAR**"
159
  descripcion = "ℹ️ Este texto usa lenguaje estándar, sin expresiones coloquiales cubanas."
160
  else:
 
161
  emoji = "🔍"
162
  tipo = f"**{label}**"
163
  descripcion = f"Etiqueta desconocida: {label}"
 
172
 
173
  """
174
  return output
175
+
176
  except Exception as e:
177
+ return f"❌ Error en clasificación: {str(e)}"
178
 
179
 
180
  # Interfaz de Chat
 
183
  title="💬 Chat en Dialecto Cubano",
184
  description="Conversa con un modelo entrenado en dialecto cubano.",
185
  examples=[
186
+ "¿Qué bolá?",
187
  "Cuéntame qué hiciste hoy.",
188
+ "Dime un refrán cubano."
 
 
189
  ]
190
  )
191
 
 
194
  fn=classify_text,
195
  inputs=gr.Textbox(
196
  label="Texto a clasificar",
197
+ placeholder="Escribe una frase en español cubano...",
198
  lines=5
199
  ),
200
  outputs=gr.Markdown(label="Resultado"),
 
206
  ["Los pueblos que no se conocen han de darse prisa para conocerse, como quienes van a pelear juntos."],
207
  ["El cielo está despejado y hace buen tiempo."],
208
  ["¿Qué bolá? ¿Cómo andas? ¡Tremenda jodedera!"],
 
209
  ]
210
  )
211
 
 
218
  classifier_interface.render()
219
 
220
  with gr.Tab("💬 Chat"):
221
+ if chat_available:
222
+ chat_interface.render()
223
+ else:
224
+ gr.Markdown(f"""
225
+ ## ⚠️ Modelo de chat no disponible
226
+
227
+ **Error:** `{error_message}`
228
+
229
+ """)
230
 
231
  gr.Markdown(article)
232