W W

Benchmarks

Fifteen measurements over 65 rows, every one against an external reference. What matters is not the best-case recall — it is the distance to the exact scan, and what you gain in exchange. Each table links to the notebook that produced it.

1. What was measured, and against what

Every number on this page has two references: the exact scan over the same query, and an approximate index on the same corpus. Without both, a recall figure means nothing.

External ground truth in every case. BIGANN uses the official reference; GloVe, arXiv and the domain datasets use exact cosine scan. Nothing was annotated by hand, nothing is the engine measuring itself.

2. Every number has a notebook

No figure on this page is copied from a report. Each one comes from a public notebook that installs the published packages, runs the benchmark and writes the output shown here.

NotebookWhat it measures
five-datasets-fusoesGloVe, ProtBERT, SBERT, FastText, Word2Vec — routed config
scale-v2-gt-externoprojeção aleatória vs PCA contra ground truth externa
ndcg-vs-faissMadhava contra FAISS: recall, latência, RAM
madhava-certificadoindexação contra HNSW, IVF, PQ + certificado
scale-timed100 mil a 100 milhões, com tempo medido
certificado-v2-jus-medthe four tracer domains on real corpora
glosa-benchmark-2026-11Rol da ANS: 898 guias, cobertura e falso coberto
Each notebook installs winnex-madhava, winnex-tracer and winnex-ai-normalize from PyPI and runs without an API key. The result reproduces in minutes.

3. Recall by real dataset — routed configuration

Dataset (real, raw)dRouted configRecall@10Bound viol.Bound-prunedPrefilterLatencyBuild
GloVe-Twitter25default1.0000099.9%0.0%1.65 ms0.1 s
ProtBERT-CAFA51024pca_corpus1.0000098.5%0.0%4.11 ms2.7 s
SBERT-Forum384pca_corpus0.991078.6%17.7%1.90 ms1.8 s
FastText300default0.974011.0%84.2%1.41 ms1.5 s
Word2Vec300preset word2vec*0.733300.0%80.0%0.26 ms0.1 s

Cinco datasets reais com configuração roteada — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-madhava-1913-five-datasets-fusoes

4. Random projection vs PCA — the measured effect

Dataset (real, raw)dProjectionRecall@10Bound viol.Bound-prunedPrefilterLatencyBuild
GloVe (rtatman)100random1.00000100.0%0.0%1.36 ms0.1 s
pca_corpus1.0000079.3%15.7%1.95 ms0.2 s
BIGANN (shurangwu)128random1.00000100.0%0.0%1.25 ms0.1 s
pca_corpus1.00000100.0%0.0%1.27 ms0.4 s
arXiv (tomtum/openai)1536random0.996000.4%94.6%3.44 ms1.7 s
pca_corpus1.0000080.5%15.7%3.47 ms3.8 s

Projeção aleatória vs PCA, ground truth externa — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-1913-scale-v2-gt-externo

5. Comparison with FAISS — recall, RAM and auditability

MethodRecall@10LatencyRAMBound Vio.Auditability
FAISS FlatIP (Exact)1.0000OOM~51.0 GB0.000%None
FAISS HNSW (ef=512)~0.98545.2 ms~32.0 GBN/ANone
FAISS IVF-PQ + Refine~0.99288.5 ms~28.0 GBN/ANone
Winnex Madhava Cascade1.0000*64.9 ms18.6 GB0.000%Full Proof

Madhava contra FAISS: recall, RAM, auditabilidade — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-1913-ndcg-vs-faiss

6. Indexing — Madhava against HNSW, IVF and PQ

MethodNDCG@10R@10LatBuildVio
Madhava [64,128]1.00001.0001.45ms0.10s0 / 10M
Madhava [32,64]1.00001.0001.23ms0.06s0 / 10M
HNSW ef=1281.00001.0000.17ms0.55sN/A
IVF np=501.00001.0000.11ms<1mN/A
IVF np=200.9870.9800.05ms<1mN/A
PQ m=160.4560.4010.17ms0.33sN/A

Indexação contra HNSW, IVF e PQ — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-1913-madhava-certificado

7. Scale — from 100 thousand to 100 million

ScaleBuildQueryNDCG@10R@10Mem
100K0.77s3.95ms1.00001.00000.02GB
1M4.90s36.9ms1.00001.00000.19GB
10M42.0s399ms1.00001.00001.86GB
50M203s2058ms1.00001.00009.31GB
100M24.4s*2.0s1.00001.0000~30GB RSS

Escala de 100 mil a 100 milhões — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-madhava-1913-scale-timed

8. Tracer by domain — real corpus

ProductDataset (real)Corpusrecall@10Bound viol.Bound pairsms/query
Tracer-GOVAG News (384d)2,0001.00000200,0000.14
Tracer-JUSIndian Supreme Court (512d)2,0001.00000100,0000.23
Tracer-MEDMTSamples (BlueBERT 768d)2,0001.00000100,0000.20
Tracer-GAPSEC 10-K (512d)1871.000009,3500.08

Tracer por domínio em corpus real — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-1913-certificado-v2-jus-med

9. Aggregated metrics

MetricMadhavaHNSWIVF
NDCG@101.000*1.0000.987
Recall@101.000*1.0000.980
Bound violations0 in 20M+ verifiedCannot measureCannot measure
Build (1M)2.57s~40s<1 min
Deterministic?YesNo (random)Yes
Audit trail?Per-documentNoneNone

Métricas agregadas com certificado — notebook no Kaggle ↗

Notebook: https://www.kaggle.com/code/kleniopadilha/winnex-1913-madhava-certificado

10. What these numbers do not say

An honest benchmark declares where it loses.

  • Latency is the axis where we lose. Indexing is far faster than HNSW (2.57 s against 40 s at 1M), but the query costs more — the bound is work an approximate search does not do.
  • Word2Vec shows the limit of the method. Recall 0.7333 with 0% bound-pruned: on a weak manifold PCA degrades. That is why the router sends this dataset to a random projection.
  • A random projection empties the proof. In the projection table, random reaches 100% recall with 0.4% provable exclusion on arXiv. The answer is right and the proof is empty.
  • 100M uses mmap streaming. The 24.4 s build at that scale is with a memory map, not a corpus in RAM — the FAISS comparison on that row is not apples to apples.

Every benchmark runs from the packages published on PyPI. The notebooks are on Kaggle and reproduce line by line.

11. Raw real datasets — no routing

Before the router existed, the engine ran on raw datasets with the default configuration. These are the numbers without tuning.

Dataset (raw, real)R@10Bound-prunedLatencyBuildVio
GloVe-Twitter d=25 (preset default)1.000099.9%1.65 ms0.1 s0
ProtBERT-CAFA5 d=1024 (pca_corpus)1.000098.5%4.11 ms2.7 s0
SBERT-Forum d=384 (pca_corpus)0.99178.6%1.90 ms1.8 s0
FastText d=300 (preset default)0.97411.0%1.41 ms1.5 s0
Word2Vec d=300 (quality gate → preset word2vec)0.73330.0%0.26 ms0.1 s0

12. Build speed — Madhava against HNSW

Where the engine wins decisively is index construction. The bound is computed once at build; the approximate index has to insert every vector into a graph.

ScaleMadhavaHNSWSpeedup
50K0.086s0.61s7.1×
100K0.213s1.54s7.2×
1M2.57s41.3s16.1×

13. Engine routing inside Maestro

The ERP runs three different workloads, and each gets a different engine configuration. The choice is per workload, not per product.

Módulo MaestroMotorConfiguraçãoJustificativa
WorkRAI (compliance)Bound 5%/1%int8, postfilter99.6% recall, 0 violations, mathematical proof. HNSW loses 2.4% with no explanation.
DevAI (batch RAG)Speed GPU batchAccumulates 50+ queries3.1ms/query, build 1.5s, R=1.0. Determinístico.
Alertas (streaming)Bound 5%/1%Rebuild a cada 1-60sBuild 2s para 1M, 14s para 10M. HNSW leva 159s/3209s.
Sala Mensagens (search)Speed GPU exactSingle-query6.1ms, aceitável para chat. Build 1.5s.
Fallback sem GPUBound 5%/1% ou Scan exatoCPUIf GPU unavailable, bound at 46 ms or exact scan at ~50 ms.

14. Prompt-injection bound check — cost

winnex-madhava-sec uses the same bound to detect injected tool calls. This is what the check costs per query.

StepResult
Build 500 attack vectors0.53 ms
check_bounds (query)0.16 ms
Bound violations — layer 4D0
Bound violations — layer 16D (refine)79 (candidates for exact refinement)

15. Red ocean vs blue ocean

This is positioning, not a benchmark — but it belongs here, because every number above only matters in the column on the right.

DimensionRed Ocean (80%)Blue Ocean (20%)
Primary needSpeed (sub-ms)Proof and audit trail
CustomersStartups, e-commerceBanks, healthcare, gov, legal
CompetitorsFAISS (free), PineconeNone (unique)
PricingExtreme commodityLow (compliance premium)
Contract value$1K-$50K/yr$500K-$5M/yr
Regulatory needNoneEU AI Act, LGPD, HIPAA
Winnex positionNot competitiveCategory creator
The left column is a commodity. 35,000-star projects compete there on latency, and a new entrant cannot win. The right column has no competitor selling the same thing, because the thing is a proof, not an index.