| 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)** |
| """ |
|
|
| |
| 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 |
| """ |
| |
|
|
| 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) |
| |
| |
| |
| |
| |
| top_result = results[0] |
| label = top_result['label'] |
| score = top_result['score'] |
| |
| |
| if label == "LABEL_1": |
| es_coloquial = True |
| emoji = "🇨🇺" |
| tipo = "**COLOQUIAL CUBANO**" |
| descripcion = "✅ Este texto contiene expresiones típicas del dialecto cubano." |
| else: |
| es_coloquial = False |
| emoji = "📚" |
| tipo = "**NO COLOQUIAL / ESTÁNDAR**" |
| descripcion = "ℹ️ Este texto usa lenguaje estándar, sin expresiones coloquiales cubanas." |
| |
| |
| 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)}" |
|
|
| |
| 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 |
| ) |
|
|
| |
| 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 |
| ) |
|
|
| |
| 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() |