clavel's picture
Update app.py
81d43d6 verified
Raw
History Blame
5.52 kB
import gradio as gr
from huggingface_hub import InferenceClient
from transformers import pipeline
title = "Generador y clasificador de coloquialismos cubanos"
description = "Genera texto con el dialecto cubano y detecta expresiones coloquiales cubanas."
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)
# El resultado es una lista de diccionarios con 'label' y 'score'
# Ejemplo: [{'label': 'LABEL_1', 'score': 0.99}, {'label': 'LABEL_0', 'score': 0.01}]
# Obtener el resultado con mayor confianza
top_result = results[0] # Ya viene ordenado por score (mayor a menor)
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."
else: # LABEL_0
es_coloquial = False
emoji = "📚"
tipo = "**NO COLOQUIAL / ESTÁNDAR**"
descripcion = "ℹ️ Este texto usa lenguaje estándar, sin expresiones coloquiales cubanas."
# Construir la salida formateada
output = f"""
### {emoji} Resultado: {tipo}
**Confianza:** {score:.2%}
{descripcion}
---
### 📊 Detalle de clasificación:
| Etiqueta | Probabilidad |
|----------|--------------|
| 🇨🇺 Coloquial | {results[0]['score']:.2%} (LABEL_1) |
| 📚 No coloquial | {results[1]['score']:.2%} (LABEL_0) |
---
💡 **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)}"
# 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=title,
description=description
)
# 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=[
["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."],
],
article=article # ✅ article SÍ es válido para gr.Interface
)
# 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()