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()