import gradio as gr import pandas as pd import plotly.express as px headers = [ "Modelo", "Promedio", "Español Mexicano", "Español España", "Español Argentino", "Español Cubano", "Español Colombiano", "Español Chileno" ] data = [ ["Gemini 3 Pro Preview", 72.50, 75.00, 75.00, 53.33, 81.67, 80.00, 70.00], ["Claude Opus 4.5", 61.67, 58.33, 70.00, 46.67, 58.33, 66.67, 70.00], ["Gemini 2.5 Flash", 55.56, 53.33, 65.00, 40.00, 46.67, 66.67, 61.67], ["Grok 4.1 Fast", 52.50, 48.33, 66.67, 41.67, 43.33, 56.67, 58.33], ["Gemini 2.5 Flash Lite", 51.94, 43.33, 61.67, 41.67, 41.67, 70.00, 53.33], ["Claude Sonnet 4.5", 51.94, 46.67, 51.67, 48.33, 45.00, 58.33, 61.67], ["Kimi K2 Thinking", 49.44, 51.67, 51.67, 35.00, 38.33, 61.67, 58.33], ["GPT-5.2", 49.17, 40.00, 51.67, 35.00, 45.00, 63.33, 60.00], ["DeepSeek V3.2", 48.61, 43.33, 60.00, 38.33, 46.67, 51.67, 51.67], ["Kimi K2 Instruct 0905", 47.22, 43.33, 53.33, 41.67, 45.00, 50.00, 50.00], ["DeepSeek V3.1 Terminus", 46.94, 43.33, 50.00, 38.33, 41.67, 56.67, 51.67], ["Llama 4 Maverick", 43.89, 40.00, 43.33, 38.33, 36.67, 58.33, 46.67], ["GPT-5 Mini", 41.11, 33.33, 45.00, 31.67, 40.00, 45.00, 51.67], ["Qwen 3 Next 80b", 40.00, 35.00, 38.33, 36.67, 35.00, 53.33, 41.67], ["Qwen 3 235b A22b", 39.72, 36.67, 48.33, 30.00, 35.00, 48.33, 40.00], ["GPT OSS 120b", 38.89, 30.00, 35.00, 28.33, 31.67, 55.00, 53.33], ["Qwen 3 32b", 36.67, 30.00, 35.00, 35.00, 40.00, 41.67, 38.33], ["Llama 3.1 8b", 26.67, 25.00, 26.67, 30.00, 28.33, 23.33, 26.67] ] df_results = pd.DataFrame(data, columns=headers) intro_md = """ # BBS 3: Barcenas Benchmark Spanish ### Evaluación de LLMs en Diferentes Variantes del Español """ info_text = """ ### 📚 Acerca de BBS 3 Bienvenido a la tercera edición del **Barcenas Benchmark Spanish (BBS 3)**. #### 🎯 Objetivo El propósito de este benchmark es evaluar y comparar el rendimiento de Modelos de Lenguaje de Gran Tamaño (LLMs) específicamente en su capacidad para entender y generar diversas **variantes dialectales del idioma español**. En esta versión, se ha incorporado además la evaluación de conocimiento cultural, necesitará identificar que tweet corresponde a cierta variante del español. #### 🔬 Metodología * **Modelos Evaluados:** Se utilizaron APIs de Cerebras, Nvidia, OpenRouter y Google (Gemini) para ejecutar las pruebas. * **Protocolo de Prueba:** Se presentó a cada LLM una serie de 60 preguntas por cada variante del español. Las preguntas son de opción múltiple (tipo test: A, B, C, D) y consisten en identificar qué tweet o frase corresponde mejor a un dialecto específico (mexicano, español peninsular, argentino, etc.). * **Configuración:** Se utilizó una temperatura de `0.3` y un Top-p de `1.0` para garantizar consistencia. * **Métrica:** Se calculó el promedio de precisión sobre todas las variantes evaluadas. #### 📊 Interpretación de Resultados Preliminares * **Dominio de Gemini:** Los modelos de la familia Gemini muestran un rendimiento superior consistente en la detección de matices dialectales del español, superando notablemente a sus competidores en esta fase. * **Desempeño de Qwen y Modelos Abiertos:** A pesar de su buen rendimiento general en otros benchmarks, los modelos Qwen y el modelo open source GPT OSS 120b muestran dificultades con las sutilezas regionales del español. En el caso del modelo OSS, esto podría deberse a una alta dependencia de datos sintéticos en su entrenamiento, que a menudo carecen de riqueza cultural. #### 🚀 Próximos Pasos * Revisar dataset del Benchmark y sacar una versión más pulida. --- **Agradecimientos:** * A **Ismael Medina Muñoz** (Solutions Architect en Databricks) por la idea de investigar el rendimiento en español en los LLMs. * A los autores del paper *"Es igual pero no es lo mismo: ¿Distinguen los LLMs las variedades del español?"*, cuyo trabajo sirvió de inspiración para segmentos de BBS 3. * A Luis Cosío por la donación de computo dada para evaluar ciertos LLMs SOTA. **Hecho con ❤️ por Danielbrdz** """ def create_plot(df): fig = px.bar( df, x="Promedio", y="Modelo", orientation='h', title="Rendimiento Promedio por Modelo", text="Promedio", color="Promedio", color_continuous_scale="Viridis" ) fig.update_layout(yaxis={'categoryorder':'total ascending'}) fig.update_traces(texttemplate='%{text:.2f}', textposition='outside') return fig custom_css = """ h1 { text-align: center; display: block; } h3 { text-align: center; display: block; } .gradio-container { font-family: 'Helvetica Neue', Arial, sans-serif; } """ theme = gr.themes.Soft( primary_hue="orange", secondary_hue="slate", ) with gr.Blocks(theme=theme, css=custom_css) as demo: gr.Markdown(intro_md) with gr.Tabs(): with gr.Tab("🏆 Resultados (Leaderboard)"): with gr.Row(): plot = gr.Plot(value=create_plot(df_results), label="Comparativa Visual") with gr.Row(): gr.Markdown("### 📋 Tabla Detallada") with gr.Row(): gr.DataFrame( value=df_results, headers=headers, datatype=["str"] + ["number"] * 7, interactive=False, wrap=True, column_widths=["200px"] ) with gr.Tab("ℹ️ Metodología e Info"): with gr.Column(variant="panel"): gr.Markdown(info_text) demo.launch()