TOKENGOLF EN GitHub ↗

LANGUAGE TOKENS BENCHMARK

Token Golf

El mismo programa, escrito en cinco lenguajes por el mismo agente de IA.

Motor de workflows

mediana de 6 ejecuciones

Evaluador de expresiones

1 ejecución

JSON Patch

1 ejecución

Tokens de salida por sesión, de menos a más. Pasa el ratón o toca un lenguaje para verlo en todas las columnas.

Rust es el que más tokens gasta en el motor de workflows y el que menos en el evaluador de expresiones. Python gana en JSON Patch y queda último en expresiones. Ningún lenguaje mantiene su puesto en las tres tareas.

01 Mismo prompt, mismo modelo, ejecuciones muy distintas

El motor de workflows se ejecutó seis veces por lenguaje. La ejecución más barata de Python usó 78,4k tokens de salida y la más cara 154,2k. La diferencia entre ejecuciones de un mismo lenguaje es mayor que la diferencia entre los tres primeros lenguajes.

95,0k mediana · 2,3× de dispersión
96,1k mediana · 2,0× de dispersión
102,1k mediana · 2,4× de dispersión
120,0k mediana · 1,4× de dispersión
128,9k mediana · 1,3× de dispersión
60k90k120k150k180k

Cada punto es una ejecución. La marca ámbar es la mediana.

Seis ejecuciones por lenguaje no bastan para decir qué lenguaje es el más barato.

02 Qué incluye el recuento de tokens

El 97% de todos los tokens procesados fue contexto en caché: el agente releyendo conversación que ya había visto. Por sesión osciló entre el 92% y el 98%. Cuanto más dura una sesión, más relee, así que los tokens totales reflejan sobre todo cuánto tiempo siguió trabajando el agente. Por eso la clasificación cuenta tokens de salida.

03 El recorrido

  1. Una especificación. Un programa de línea de comandos totalmente especificado: JSON de entrada, JSON de salida, determinista y con un conjunto cerrado de códigos de error.
  2. Cinco jugadores. Python, JavaScript, Go, Rust y C. Cada uno tiene su propia sesión de agente, con herramientas, una shell y margen para probarse a sí mismo.
  3. Un árbitro. Una batería de conformidad independiente del lenguaje que solo habla con el binario a través de su CLI. Si no la pasas, tu puntuación no cuenta.
  4. La puntuación. Tokens de salida de la sesión: todo lo que escribió el agente, incluidos el razonamiento, las llamadas a herramientas y las reescrituras.
Motor de workflowsejecución de DAG, $ref, condiciones, reintentos, más de 40 operaciones
Evaluador de expresionestokenizador, parser con precedencia, aritmética i64, posiciones de error exactas
JSON Patchpunteros RFC 6901, seis operaciones, atomicidad, taxonomía de errores

Modelo: DeepSeek-V4.1-Flash-1017, thinking=high, una sesión autónoma por ejecución. Todas las ejecuciones contadas aquí pasan su batería de tests puntuada.

04 La letra pequeña

Pasar ≠ ser correcto

Todas las entregas pasan los tests puntuados, pero una batería finita no demuestra que el programa sea del todo correcto. Una revisión encontró dos errores en el evaluador, que se corrigieron y se volvió a puntuar. Ningún resultado de aprobado o suspenso cambió.

No es una evaluación cerrada

Algunas especificaciones, tests y oráculos se corrigieron después de examinar las entregas. El historial de Git recoge cada cambio, pero no fue una evaluación prerregistrada.

Confianza, verificada en parte

Los registros completos de las sesiones no se publican, así que ni los totales de uso ni el cumplimiento de las reglas de no copiar se pueden auditar desde el repositorio. El lanzador no es un sandbox del sistema operativo.

05 Contribuir

Todas las entregas y la batería completa de tests están en el repositorio, así que puedes comprobar estas cifras sin ejecutar ningún modelo.

Vuelve a puntuar los resultados

Recompila todas las entregas del repositorio y vuelve a pasar los tests. No hace falta clave de API.

git clone https://github.com/GodGMN/language-tokens-benchmark
python3 benchmark/rescore.py

Añade un caso de prueba

Un archivo JSON por comportamiento. Tiene que derivarse de la especificación y pasar contra la implementación de referencia.

benchmark/holdout/<category>/your_case.json
python3 benchmark/runner.py --language oracle

Añade un modelo o un lenguaje

Una ronda nueva para otro modelo, o un adaptador para Kotlin, Swift, Zig, etc. Usa un id de ronda nuevo y sube también las ejecuciones fallidas.

benchmark/rounds/<round>/round.json
benchmark/adapters/<lang>.json

Guía para contribuir ↗ Metodología ↗ Conclusiones completas ↗

La documentación del repositorio está en inglés.

06 Todas las muestras

Las 45 sesiones, sin filtrar. Descarga dataset.csv o dataset.json.

Mostrar las 45 filas
RondaTareaLenguajeTestsSalidaTotalTurnosCoste
round-8-exprexpr v1C56/5671.3781.887.13429$0,103
round-8-exprexpr v1Go56/5660.1301.408.63430$0,086
round-8-exprexpr v1JavaScript56/5660.0221.241.69822$0,084
round-8-exprexpr v1Python56/5673.9832.524.50038$0,112
round-8-exprexpr v1Rust56/5659.4631.067.22423$0,080
round-9-patchpatch v1C38/3877.1862.355.51541$0,112
round-9-patchpatch v1Go38/3842.905709.94121$0,059
round-9-patchpatch v1JavaScript38/3866.7181.562.15029$0,095
round-9-patchpatch v1Python38/3837.514700.54320$0,054
round-9-patchpatch v1Rust38/3844.765925.32728$0,065
round-1workflow v1C106/106121.9985.224.05755$0,191
round-1workflow v1Go106/106113.3063.365.41540$0,162
round-1workflow v1JavaScript106/10690.7362.959.54840$0,134
round-1workflow v1Python106/106125.0316.222.74565$0,200
round-1workflow v1Rust106/106156.0639.405.16185$0,255
round-2workflow v2C112/112118.8856.107.26760$0,192
round-3workflow v2C112/112142.2256.068.70257$0,215
round-4workflow v2C112/112117.3656.633.40666$0,198
round-5workflow v2C112/112121.1156.223.05157$0,205
round-6workflow v2C112/112108.5813.997.43845$0,163
round-7workflow v2C112/112154.77812.365.11094$0,287
round-2workflow v2Go112/112110.4063.455.92937$0,163
round-3workflow v2Go112/11269.8351.891.86434$0,101
round-4workflow v2Go112/112170.1196.404.92358$0,251
round-5workflow v2Go112/112101.8242.538.89532$0,143
round-6workflow v2Go112/112102.3884.517.85460$0,159
round-7workflow v2Go112/11278.5374.149.14161$0,128
round-2workflow v2JavaScript112/112119.3924.913.75653$0,180
round-3workflow v2JavaScript112/11267.7141.351.23623$0,095
round-4workflow v2JavaScript112/112157.6029.721.33280$0,260
round-5workflow v2JavaScript112/11293.4052.785.93839$0,137
round-6workflow v2JavaScript112/11296.6394.513.01055$0,153
round-7workflow v2JavaScript112/11287.8203.007.45741$0,132
round-2workflow v2Python112/11282.1233.323.52349$0,128
round-3workflow v2Python112/112106.1685.585.81164$0,171
round-4workflow v2Python112/11278.3853.121.62545$0,121
round-5workflow v2Python112/112154.25011.614.289103$0,266
round-6workflow v2Python112/11286.0963.667.69046$0,135
round-7workflow v2Python112/112123.8746.737.22569$0,200
round-2workflow v2Rust112/112104.4084.194.69454$0,158
round-3workflow v2Rust112/112112.0314.635.08558$0,172
round-4workflow v2Rust112/112125.8868.193.63285$0,211
round-5workflow v2Rust112/112140.8466.020.67956$0,218
round-6workflow v2Rust112/112135.2798.987.97185$0,230
round-7workflow v2Rust112/112131.8247.532.33787$0,215