clavel's picture
Update app.py
e08472e verified
Raw
History Blame
4.44 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:
results = classifier(text)
# Ordenar por score (de mayor a menor)
results.sort(key=lambda x: x['score'], reverse=True)
# Mostrar los 3 mejores resultados
output = "### 📊 Resultados de clasificación:\n\n"
for i, result in enumerate(results[:0], 1):
label = result['coloquial']
score = result['score']
output += f"{i}. **{label}**: {score:.2%}\n"
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()