clavel's picture
Update app.py
f55fff3 verified
Raw
History Blame
6.37 kB
import gradio as gr
from huggingface_hub import InferenceClient
from transformers import pipeline
title = "Generador y clasificador de coloquialismos cubanos"
article = """
## Modelo:
Se usa el somosnlp-hackathon-2026/patriae-cuban-dialect-model.
## Fine-tuning:
Se utilizó el dataset somosnlp-hackathon-2026/patriae-cuba-literature-dataset para hacer fine-tuning del modelo gia-uh/cecilia-2b-instruct-v1.
## Participantes del equipo Patriae en SomosNLP 2026:
* **Carlos Luis Barnés Infante (https://huggingface.co/blacknoize404)**
* **Yisel Clavel Quintero (https://huggingface.co/clavel)**
* **Dionis Lopez (https://huggingface.co/inoid)**
"""
# Cargar el modelo para clasificación
classifier = pipeline(
"text-classification",
model='somosnlp-hackathon-2026/patriae-cuban-dialect-model'
)
def respond(message, history, system_message, max_tokens, temperature, top_p):
"""
Función para generar respuestas usando el modelo de chat
"""
# Usar el mismo modelo para generación (si es compatible)
client = InferenceClient(
model="somosnlp-hackathon-2026/patriae-cuban-dialect-model"
)
messages = [{"role": "system", "content": system_message}]
messages.extend(history)
messages.append({"role": "user", "content": message})
response = ""
try:
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
if message.choices and message.choices[0].delta.content:
token = message.choices[0].delta.content
response += token
yield response
except Exception as e:
yield f"Error: {str(e)}"
def classify_text(text):
"""
Función para clasificar texto y detectar coloquialismos cubanos
"""
if not text or text.strip() == "":
return "⚠️ Por favor, ingresa un texto para clasificar."
try:
# Obtener resultados del modelo
results = classifier(text)
# DEBUG: Imprimir para ver la estructura (puedes eliminar después)
print(f"Results: {results}")
print(f"Type: {type(results)}")
print(f"Length: {len(results)}")
# Verificar que results no esté vacío
if not results or len(results) == 0:
return "❌ No se obtuvieron resultados del modelo."
# Obtener el resultado con mayor confianza
top_result = results[0]
label = top_result['label']
score = top_result['score']
# Determinar si es coloquial (LABEL_1 = coloquial, LABEL_0 = no coloquial)
if label == "LABEL_1":
es_coloquial = True
emoji = "🇨🇺"
tipo = "**COLOQUIAL CUBANO**"
descripcion = "✅ Este texto contiene expresiones típicas del dialecto cubano."
elif label == "LABEL_0":
es_coloquial = False
emoji = "📚"
tipo = "**NO COLOQUIAL / ESTÁNDAR**"
descripcion = "ℹ️ Este texto usa lenguaje estándar, sin expresiones coloquiales cubanas."
else:
# Si la etiqueta no es LABEL_0 ni LABEL_1, mostrar la etiqueta original
emoji = "🔍"
tipo = f"**{label}**"
descripcion = f"Etiqueta desconocida: {label}"
# Construir la salida formateada
output = f"""
### {emoji} Resultado: {tipo}
**Confianza:** {score:.2%}
{descripcion}
---
### 📊 Detalle de clasificación:
| Etiqueta | Probabilidad |
|----------|--------------|
"""
# Mostrar todos los resultados disponibles
for i, result in enumerate(results):
if result['label'] == "LABEL_1":
label_name = "🇨🇺 Coloquial"
elif result['label'] == "LABEL_0":
label_name = "📚 No coloquial"
else:
label_name = result['label']
output += f"| {label_name} | {result['score']:.2%} |\n"
output += """
---
💡 **Nota:** El modelo analiza si el texto contiene expresiones típicas del dialecto cubano.
"""
return output
except Exception as e:
return f"❌ Error en clasificación: {str(e)}\n\nDetalles técnicos: El modelo devolvió: {results if 'results' in locals() else 'No hay resultados'}"
# Interfaz de Chat
chat_interface = gr.ChatInterface(
respond,
additional_inputs=[
gr.Textbox(
value="Eres un chatbot cubano que ayuda a entender y usar el dialecto cubano.",
label="System message"
),
gr.Slider(minimum=1, maximum=1024, value=150, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
title="Chatbot con dialecto cubano." ,
description="Genera texto con el dialecto cubano.",
examples=[
["¡Qué bolá, asere!"],
["¿Cómo se dice 'amigo' en español cubano?"],
]
)
# Interfaz de Clasificación
classifier_interface = gr.Interface(
fn=classify_text,
inputs=gr.Textbox(
label="Texto a clasificar",
placeholder="Escribe una frase en cubano...",
lines=5
),
outputs=gr.Markdown(label="Resultado"),
title="🔍 Clasificador de coloquialismos cubanos",
description="Detecta si un texto contiene expresiones coloquiales cubanas.",
examples=[
["¡Qué bolá, asere!"],
["Nos marchábamos sin ti, creyendo que se te habían pegado las sábanas."],
["De Varadero venía para acá porque en su casa las broncas con el padre eran de ampanga."],
["Los pueblos que no se conocen han de darse prisa para conocerse, como quienes van a pelear juntos."],
]
)
# Combinar ambas interfaces en una sola app
with gr.Blocks(title=title) as demo:
gr.Markdown(f"# {title}")
with gr.Tab("🔍 Clasificador"):
classifier_interface.render()
with gr.Tab("💬 Chat"):
chat_interface.render()
gr.Markdown(article)
if __name__ == "__main__":
demo.launch()