RAG local directamente sobre juegos en pantalla completa

Parecería, ¿a quién sorprenderá hoy con otro envoltorio sobre LLM?
🎮 El proyecto GameWikiTooltip con este flujo de usuario: juegas a Elden Ring o Helldivers 2, presionas Ctrl+Q, aparece una superposición transparente sobre el juego. Dentro hay un navegador con una wiki o un chatbot que responde preguntas sobre builds y mecánicas, basándose en una base de datos de guías de YouTube parseadas.

Vale la pena mirar el código fuente no solo por las características para gamers, sino también por las soluciones arquitectónicas:

▪️ Pipeline de búsqueda sensato. No solo un prompt ciego a la LLM. Se implementó búsqueda híbrida: FAISS para semántica + bm25s (implementación rápida en Rust) para coincidencia léxica precisa. Los resultados se fusionan mediante Reciprocal Rank Fusion (RRF), y encima se añadió un Intent Reranker personalizado para distinguir consultas sobre mecánicas de solicitudes de recomendación de builds.
▪️ Hooks profundos de Win32. En juegos en pantalla completa, los bindings estándar de las bibliotecas fallan debido a la interceptación de entrada por parte del juego (DirectInput/RawInput). Aquí se implementó una interceptación estricta de atajos globales mediante ctypes (RegisterHotKey) y filtrado de mensajes nativos de Windows directamente en el Event Loop de Qt.
▪️ Integración de PyQt6 y asyncio. El eterno dolor de los desarrolladores de escritorio: cómo hacer que el Event Loop de Qt se lleve bien con la asincronía de Python para que la UI no se congele durante las solicitudes de red a la LLM. Aquí se resuelve elegantemente con qasync.
▪️ Reconocimiento de voz offline. Para no tener que escribir durante el combate, se incorporó vosk local, que escucha el micrófono en un hilo separado y envía el texto al campo de entrada.

Un plus adicional por la arquitectura: el parseo de guías de YouTube, el chunking y los embeddings se realizan en un paso offline, y en tiempo de ejecución la aplicación solo ejecuta búsquedas ligeras sobre vectores locales y envía el contexto a Gemini Flash 2.5 Lite para la generación final de la respuesta.

Pero si no te interesa el código fuente, en los juegos puede ser útil para su propósito directo 😏

#buen_open_source