import gradio as gr from huggingface_hub import InferenceClient from transformers import pipeline import os 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)** """ HF_TOKEN = os.environ.get("HF_TOKEN", None) # Cargar el modelo para clasificación classifier = pipeline( "text-classification", model='somosnlp-hackathon-2026/patriae-cuban-dialect-model', token=HF_TOKEN ) 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", token=HF_TOKEN ) 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()