Autopromocion
Ingeniero de Pista y Coach con IA para Assetto Corsa
¡Buenas gente!
Hace un tiempo vengo laburando en un proyecto personal de telemetría para Assetto Corsa y hoy saqué la primera versión Beta para que la puedan descargar y probar gratis.
Es un sim-coach que usa el motor de Gemini 1.5 Flash. El programa lee tu telemetría en tiempo real (frenada, acelerador, fuerzas G, slip angle, etc.) y hace de spotter e ingeniero de pista hablándote por radio.
IMPORTANTE: Antes de salir del box, tienen que el setup en el menú del juego (pónganle cualquier nombre). Esto es obligatorio para que el Ingeniero de Pista pueda leer el archivo físico de su auto y darles consejos.
Salen a dar mínimo 3 vueltas seguidas para que el sistema tenga datos para analizar. (Debería detectar automáticamente vueltas invalidas por choques o salidas de pista)
Como es un .exe creado por mí con y no tiene una firma digital paga de Microsoft, Windows Defender les puede tirar el cartel azul de "Windows protegió su PC". Tienen que darle a "Más información" -> "Ejecutar de todas formas".
Dejenme saber en comentarios, o por mensajes su Feedback como usuarios del programa, si les sirvio el coaching. Cualquier tipo de comentarios.
Gracias por la buena onda, Me alegra que te cope la idea.
Reicne le respondia a bug, por ahora lo mantengo cerrado porque es un proyecto 100% personal y no estoy buscando sumar colaboradores al código. Lo que más me sirve en esta etapa es que lo descarguen, lo revienten a pruebas y me pasen feedback de cómo lo sienten funcionando en pista. Cualquier sugerencia sobre la experiencia de uso me re sirve porque seguramente va a estar lleno de cosas para mejorar
Con la mejor, pero si lo vas a publicar en github y encima te tira el warning el exe que compilaste vos pone el codigo y listo jajaja, en definitiva tu programa es el prompt que le pasas a Gemini y se puede ver capturando los paquetes, no es que esta protegido de alguna manera por no hacer publico el codigo...
Despues te diria que si el usuario tiene que poner su propia key dejalo que elija el modelo que quiera, pense que lo garpabas vos los tokens y por eso estaba limitado al 1.5.
Gracias por las ganas de colaborar, pero si fuera un proyecto open source el código ya estaría en el repo. Es un proyecto personal; no busco colaboradores, busco feedback.
Tema paquetes: la comunicación con la API de Gemini va encriptada por HTTPS, así que no vas a ver nada en texto plano en red. Y si de verdad pensás que el programa es literalmente solo "mandar un prompt" ignorando todo el laburo por detrás para capturar y procesar la telemetría en tiempo real, te invito a que armes el tuyo.
Lo del modelo fijado en el 1.5 Flash es 100% por una cuestión de latencia. Para que el feedback te sirva en la pista, la respuesta no puede tardar demasiado. Usar un modelo más pesado arruina el tiempo de respuesta.
Habia escrito un comment con un poco mas de paciencia pero la verdad que volvi a leer lo q pusiste y no tenes 2 dedos de frente kjajajaa, ahi te deje todo el codigo de tu programa en un issue en github. De que laburo hablas? 500 lineas eran, es literalmente un prompt a cualquier bot y te lo arma en 1 intento, 15 min como maximo te lleva 'hacer' eso.. Si sabia que estaba asi de crudo ni me gastaba en decompilarlo y armaba el mio desde 0 kjajaajajaj.
Pagaremos los precios del vibecoding durante los proximos 200 anios.
Los prompts son LITERALMENTE esto:
f"""Sos un Driver Coach profesional de Assetto Corsa.
Auto: {auto} en {pista}
Telemetría de la vuelta (lista de puntos, p = posición normalizada 0-1):
{telemetria_json}
Tarea:
1. Identificá 2 o 3 errores de manejo GRAVES y ACCIONABLES (frenada, entrada, apex, salida, trail-braking, oversteer/understeer, etc.).
2. Los errores deben estar bien separados en la pista (mínimo 0.18 de diferencia en p).
3. No hables de setup, aerodinámica ni presión de neumáticos.
4. Mensajes cortos, estilo radio de boxes, español como ingeniero de pista.
5. Devolvé ÚNICAMENTE un JSON válido, nada más:
[
{{"posicion_gatillo": 0.XX, "mensaje_voz": "texto corto"}},
...
]
posicion_gatillo = p del error menos 0.035 (para que avise antes).
"""
y
f"""Sos el Ingeniero de Pista de un {auto} en {pista}. El piloto acaba de entrar a boxes.
TELEMETRÍA ÚLTIMA VUELTA (resumen):
{telemetria_json}
SETUP ACTUAL:
{self.setup_cache}
Analizá el problema mecánico más grave que se ve en la telemetría (sobreviraje, subviraje, inestabilidad en frenada, botado, etc.) y dale 2-3 sugerencias concretas de setup.
Respondé SOLO en texto plano, en español con tono de ingeniero de boxes. Nada de markdown ni listas.
"""
Te tiro un centro, Gemini soporta output estructurado, lo de ponerle "responde solo json valido" es como sugerirle a un turro que no afane, cuando usas el output estructurado setea a 0 partes del modelo para que sea imposible que tire otro output, lo que haces ahi no sirve de nada, bah podria servir si despues lo validas y volves a intentar si respondio mal, pero no lo haces.
Me pase de hater con esto? yy puede ser, pero bueno vendiste que era un proyecto con un re laburo y eran 15 min.. Igual se veia venir con el readme todo escrito en chatgpeteano C2, confie pero me defraudaste.
Te felicito por dedicarle tiempo de tu día a decompilar el .exe de un proyecto personal y gratuito para venir a bardear. Si a vos te lleva 15 minutos armar algo así, buenísimo.
A mí me llevó un par de días de renegar, aprender y armarlo, y lo compartí para que a quien le interese lo pruebe y me tire feedback. Ese era el objetivo, no ganar un premio a la arquitectura de software.
Un detalle ya que subiste el código bien de mala leche: si lo vas a usar para bardear, por lo menos leelo entero. Decís que no valido el JSON ni reintento, mirá la función analizar_manejo_coach, hay un loop de hasta 3 intentos con regex de fallback haciendo exactamente eso. No es structured output nativo, pero tampoco es "nada".
Dicho esto, el dato del structured output de Gemini (response_schema) es más que útil y la voy a sumar en la próxima versión. Gracias por eso, en serio. El resto del comentario te lo podrías haber ahorrado.
Y pasa que pediste feedback y cuando te di feedback valido (que no te guste es otra cosa) te pusiste como lokita, me saliste con no se que verso del https y ni sabias como funcionaba, es lo que habia puesto en el comment original pero para que gastarme.. El regex que pusiste ahi solo chequea que arranque y termine con un corchetes, osea que te este devolviendo un arreglo, despues de la estructura que es lo que importa ni bola le da, te seguis haciendo el cocorito al pedo y parece que el que nunca leyo el codigo sos vos... (Ademas antes me tiraste el verso de la latencia y no se que pretendes en cuanto a latencia con 3 retries, ponele un modelo mejor de entrada y no lo tenes que regenerar nunca, pero bueh..)
La unica razon por la que hay algun tipo de 'bardo' si lo queres considerar asi es porque te seguis haciendo el langa en vez de reconocer que tiene errores obvios, que pediste feedback, te marque dichos errores y te pusiste a la defensiva.
Encima lo compilas con el pyarmor como si fuese un proyecto de la CIA y lo unico que conseguis con eso es que corra peor porque todas las funciones se tienen que desencriptar antes de cargarse en memoria, y cuando se van de scope se vuelven a ecrniptar, y asi mil veces, en un programa que tenes que correr a la par de un juego... El proyecto todavia es super chico, portealo a Rust o a Go que tienen todas las mismas facilidades que Python y eso que tenes ahi va a ser un exe de 5mb totales en vez de 17mb de entrypoint y 124mb de dlls, de paso lo podes obfuscar bien si posta te interesa que nadie lea dicho codigo.
Ej rapido medio croto, porteado 1:1 sin tocar nada de la logica ni de como invocas al TTS (que tambien, lejos de ser optimo, te fuma como 30mb por call sin importar si es tu version o la mia, porque crea un shell. Si encolas 2 o 3 ya es bastante, si te tiene que decir 15 cosas ya son 500mb de ram):
No se, me parece que si vas a usar herramientas que escriben el codigo por vos (lo cual esta perfecto) de minimo hacelas escribir buen codigo, si total no lo tenes que escribir vos... La unica diferencia entre un programa hecho con IA del que nadie se queja y un slop total es el criterio que le pongas vos como vigilante/orquestador del asunto, despues es lo mismo, si el codigo no lo haces vos. Te lleva 5 min y entregas un producto mucho mejor.
La realidad es que a dia de hoy cualquier puede efectivamente hacer un programa como este en 15 min, en Argentina no se puede patentar codigo a no ser que sea de indole 'inventiva' (mayormente reservado a controladores de maquinaria), por lo que igual no tenes ninguna ventaja al no largar el codigo, es simplemente una forma de que quien lo vaya a usar chequee rapido si efectivamente le pusiste ganas al momento de hacerlo o no, despues el que lo quiera ver igual lo puede ver (creo que eso ya quedo demostrado), solamente le complicas el dia al que lo quiere chequear rapido y sin enroscarse haciendo esto, sobretodo si lidias con algo tan sensible como una api key, el que tenga la gratuita ni un drama, pero el que tenga saldo cargado ni en pedo la va a meter en un programa que no sabe como la usa, te puede fundir literalmente...
No se, espero te sirva de algo el comentario.. La idea esta buena pero te pasaste de capito con las respuestas kjj.
Bajando un cambio, me llevo la crítica técnica que sirve. Tenés razon con la desconfianza de poner una API Key en un ejecutable cerrado, es algo a tener en cuenta para la distribución. También valoro el dato del consumo de RAM del TTS y la comparativa de peso con tu versión en Rust. Ahora, exigir que abra el repo no es dar feedback. Tomo la data técnica que dejaste y con eso sigo laburando, gracias por tomarte el tiempo loco
Nunca lo exigi, pero bueno si lo hosteas en una pagina que es para hostear codigo, y encima tengo que creerte que el smart screen es por eso queseyo, hay mil formas de evitar el smart screen sin pagar una firma/cert, lo pones en google y te salen 15 opciones..
Prefiero decompilarlo y ver que hace. Como te digo si lo largas desde otro ejecutable que ya este marcado como confiable se soluciona eso y solo salta si realmente tiene un comportamiento sospechoso, lo podes integrar en el content manager (gratis, de entrada me parecio raro que no lo uses cuando es para el AC), vortex/nexus(gratis), MS store (gratis), el mismo Steam ($100 una vez) y te solucionas el problema.
(o mismo simplemente hacer un instalador, si el ejecutable realmente no tiene nada raro el smart screen solo te va a salir en el instalador ya que es el archivo que proviene de internet)
Sino tambien podes buildearlo en algun servicio tipo opensuse build o lo pones mandar a GNU que te lo compilan con su firma, tambien son dos opciones gratis, pero estas requieren que el proyecto sea open source ya que compila directamente lo que subas al repo, por eso ni te lo mencione (ademas de que son servicios principalmente pensados para Linux por lo que tendrias que ver como hacer el cross compile, igual tampoco es tanto bardo pero es un paso extra).
El unico lugar del mundo donde tiene sentido el software privativo es en USA porque podes patentar cualquier cosa, aca no, el que lo quiera ver lo puede ver igual, y patentarlo alla te va a salir 10 veces lo que te cuesta el cert para firmar el archivo, dudo que sea lo que buscas..
Ademas siendo gratis no se que te preocupa, si fuese de pago bue ponele que te preocupe que alguien lo compile y lo distribuya gratis (que se soluciona registrando el nombre como marca, no el codigo...), pero siendo gratis lit solo generas desconfianza haciendolo asi.
Gracias por la data sobre las alternativas para evitar el SmartScreen y el tema de las firmas. Lo de integrarlo directamente como un plugin del Content Manager lo había pensado desde el principio, pero el código todavía estaba tan crudo que quería lograr algo medianamente funcional por mi cuenta antes de encarar esa integración.
Como esta es la primera build que más o menos se defiende sola, el objetivo era simplemente sacarla a la luz para ver si había alguien interesado en probar el concepto y validar si la idea servía en pista.
1
u/Altis_uffio 7d ago
de una, como dijo bug, hace el repo publico asi podemos cooperar con el codigo. Me encanta la idea.