File size: 4,566 Bytes
35f4d2f 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf e4fc2bb 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f e4fc2bb 5fa6aaf e4fc2bb 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf 35f4d2f 5fa6aaf e4fc2bb 35f4d2f 5fa6aaf e4fc2bb 5fa6aaf e4fc2bb 5fa6aaf e4fc2bb 5fa6aaf 35f4d2f 5fa6aaf e4fc2bb 5fa6aaf e4fc2bb 5fa6aaf 35f4d2f 5fa6aaf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | 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[:3], 1):
label = result['label']
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}")
gr.Markdown(description)
with gr.Tab("🔍 Clasificador"):
classifier_interface.render()
with gr.Tab("💬 Chat (Beta)"):
gr.Markdown("""
⚠️ **Función de chat en desarrollo**
""")
chat_interface.render()
gr.Markdown(article)
if __name__ == "__main__":
demo.launch() |