Sietch

Vector + columnar RAG store con TurboQuant

Sietch es la memoria vectorial y columnar del ecosistema Dune. HNSW puro Rust con TurboQuant (ICLR 2026, Google Research) para compresión 8x de vectores. Indexa embeddings de documentos clínicos, protocolos y datos del HIS/ERP, y sirve consultas RAG para Prescient. Cada INSERT indexa automáticamente en el grafo HNSW y comprime con TurboQuant — sin rebuild, sin cron, sin configuración extra.

TurboQuant

TurboQuant es un algoritmo de cuantización vectorial de Google Research (ICLR 2026). Sietch es la primera implementación en producción. No es Scalar Quantization ni Product Quantization — es un enfoque en dos etapas:

  • PolarQuant: rotación ortogonal random que hace las coordenadas predecibles (distribución Beta). Permite cuantizar cada dimensión con un codebook óptimo precomputado (Max-Lloyd), sin calibración sobre tus datos (data-oblivious)
  • QJL (Quantized Johnson-Lindenstrauss): comprime el error residual a 1 bit/dim usando proyección random + signo. Corrige el error de cuantización con overhead mínimo
CONFIGURACIÓNBITS/DIMBYTES/VECTOR (768D)COMPRESIÓN VS F32
f32 original32 bits3,072 bytes1x
TurboQuant 3-bit (default)3+1 = 4 bits~384 bytes8x
TurboQuant 4-bit4+1 = 5 bits~480 bytes6.4x
TurboQuant 2-bit2 bits (sin QJL)~192 bytes16x

Datos reales en producción: 6,172 vectores x 768 dims = 18.9 MB en f32 → 2.4 MB con TurboQuant 3-bit. A 3 bits/dim la calidad es equivalente o superior a int8 (Scalar Quantization). El paper demuestra neutralidad absoluta a 3.5 bits vs f32.

Indexación automática HNSW

Al crear un índice HNSW con TurboQuant, cada INSERT posterior indexa automáticamente: almacena el row, parsea el vector, lo inserta en el grafo HNSW, lo comprime con TurboQuant y actualiza el ID mapping. Sin rebuild manual, sin procesos batch.

sql
-- Crear índice HNSW + TurboQuant (una sola vez)
CREATE INDEX idx_docs ON document_chunks
  USING HNSW (embedding) WITH (
    m=16,
    ef_construction=200,
    quantization='turboquant'    -- 8x compresión, 3 bits/dim
  );

-- Cada INSERT indexa automáticamente en HNSW + comprime con TurboQuant
INSERT INTO document_chunks (id, chunk_text, embedding)
  VALUES (1, 'Protocolo QT mama HER2+...', '[0.12, 0.45, ...]');
-- → almacena row → parsea vector → inserta en HNSW
-- → comprime con TurboQuant → actualiza ID mapping

Búsqueda vectorial (RAG)

sql
-- vector_search() usa HNSW internamente — no escanea toda la tabla
SELECT d.chunk_text, v.similarity as score
  FROM vector_search('idx_docs', '[0.1, 0.2, ...]', 10) v
  JOIN document_chunks d ON d.id = v.id;

-- CHUNK_TEXT                              SCORE
-- Protocolo QT mama HER2+: esquema...    0.94
-- Guía clínica cáncer mama §7.1...       0.91
-- Ficha técnica trastuzumab §2...        0.87
--
-- 53ms vs 358ms brute-force (6.7x más rápido)

Flujo de ingesta RAG

  • Documentos y datos entran por Harvester (extracción, limpieza, chunking)
  • Modelo de embeddings externo (Claude / OpenAI / Ollama local) genera vectores
  • INSERT con el vector → Sietch indexa en HNSW + comprime con TurboQuant automáticamente
  • También almacena el contexto columnar: datos estructurados alrededor del documento
  • Prescient consulta Sietch vía vector_search() para recuperar contexto RAG

Configuración

toml
# /etc/dune/sietch.toml

[vector]
algorithm = "hnsw"
dimensions = 768         # modelo de embeddings
ef_construction = 200
max_connections = 16
quantization = "turboquant"
turboquant_bits = 3      # 3-bit default (8x compresión)

[columnar]
format = "parquet"
compression = "zstd"

[retention]
vectors = "forever"      # documentos clínicos no expiran
metrics = "365d"         # métricas operativas: 1 año

[storage]
data_dir = "/var/lib/dune/sietch"
max_disk = "50GB"

✦ Nota:Implementación propia desde el paper de Google Research — no es un wrapper sobre FAISS o Annoy. Google no ha liberado código oficial. Corre en CPU, sin GPU. Rust puro, cross-compilable a Linux musl.