Sobre el proyecto

turbovec es un índice vectorial implementado en Rust y expuesto a Python mediante enlaces. Está construido alrededor del algoritmo TurboQuant de Google Research, un enfoque de cuantización independiente de los datos que utiliza normalización, una rotación aleatoria fija, cuantización escalar de Lloyd-Max basada en distribución, empaquetado de bits y puntuación de producto interno con renormalización de longitud. El proyecto está orientado a búsqueda vectorial local de baja latencia y memoria limitada, sin requerir un servicio gestionado. El índice principal TurboQuantIndex se crea con una dimensión y un ancho de bits, documentándose indexación de 2 y 4 bits. Los vectores se añaden incrementalmente sin una fase separada de entrenamiento, ajuste de parámetros o reconstrucción del índice. Las entradas en Python usan arreglos NumPy de float32; otros tipos de datos se rechazan en lugar de convertirse silenciosamente. La API ofrece operaciones de añadir, buscar, escribir, cargar y sincronizar. La búsqueda devuelve puntuaciones e índices para los k resultados más cercanos solicitados. IdMapIndex añade IDs externos estables de uint64, add_with_ids y eliminación O(1) por ID según la documentación. Soporta el mismo flujo de escritura/carga de archivo completo y persistencia incremental por sincronización. El método sync se describe como persistir solo los cambios desde la última sincronización, usando un fsync por llamada y permitiendo pequeñas adiciones o eliminaciones sin reescribir todo el índice. write y load siguen disponibles para instantáneas completas. La recuperación filtrada o híbrida se soporta mediante una lista blanca de IDs o una máscara de bits de ranuras pasada a la búsqueda. La lista blanca puede provenir de un sistema externo como SQL, BM25, lógica de control de acceso o un filtro temporal. El README indica que el filtrado se aplica dentro del núcleo de búsqueda SIMD, se omiten bloques sin vectores permitidos y el recuento de resultados es min(k, número de vectores permitidos distintos). La búsqueda usa núcleos SIMD escritos a mano con selección de características en tiempo de ejecución. Los objetivos documentados incluyen ARM NEON SDOT/SMMLA, x86 AVX-512 VNNI y vpermb, además de AVX2 y respaldos escalares. La compilación de Rust usa una línea base x86-64-v2 mientras habilita núcleos más nuevos en hardware compatible. El multihilo se proporciona mediante Rayon en la configuración de referencia descrita. Un paso opcional de calibración TQ+ puede ajustar valores de desplazamiento y escala por coordenada a partir de una muestra representativa antes de indexar. El README describe que esto mejora el recall en configuraciones de dimensión finita o bits bajos, especialmente con incrustaciones estilo GloVe, y sigue siendo reutilizable para adiciones posteriores. Un índice sin calibrar usa TurboQuant simple. La instalación en Python está disponible mediante pip, y en Rust mediante cargo add turbovec. El proyecto documenta integraciones opcionales para LangChain, LlamaIndex, Haystack y Agno, posicionadas como reemplazos directos de sus almacenes vectoriales en memoria o de referencia. Estas integraciones se instalan mediante extras opcionales del paquete. El repositorio incluye benchmarks ejecutados por el proyecto comparando turbovec con configuraciones de FAISS IndexPQFastScan e IndexPQ. El README reporta menor uso de memoria, búsqueda medida más rápida en sus configuraciones ARM y x86 probadas, mediciones de latencia de inserción y eliminación, gráficos de recall, resultados de compresión y tiempos de guardado/carga. Estos son resultados de referencia proporcionados, no mediciones independientes de terceros. En el directorio de benchmarks se incluyen scripts para descargar conjuntos de datos de incrustaciones GloVe y OpenAI, ejecutar suites de recall/velocidad/compresión, guardar resultados JSON y regenerar gráficos.