Skip to content

native: Highway is the default vector provider where the wheel ships its library - #154

Merged
tae898 merged 3 commits into
mainfrom
perf/153-highway-default
Oct 31, 2026
Merged

tae898 merged 3 commits into
mainfrom
perf/153-highway-default

Conversation

@tae898

@tae898 tae898 commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator

Closes #153

Default. The engine forces jvector's scalar provider in every native image unless ARCADEDB_VECTOR_PROVIDER says otherwise. The loader (_native/lib.py) now sets it to native (jvector's Highway kernels) when libjvector-<arch>.so sits next to the engine library, which the wheel ships on Linux x86_64 and aarch64. A value the user set wins; ARCADEDB_VECTOR_PROVIDER=default forces the scalar provider. macOS and Windows keep the scalar provider (no library shipped). No native-image change: the variable was already read by ArcadeNative.

Why (timed laptop A/B in #153, medians of per-round ratios, 100,000 vectors, 26.11.1.dev0): against the scalar provider, Highway builds indexes 2.2 to 2.5 times faster and answers queries 14 to 30 percent faster at 768 and 1536 dimensions; at 128 dimensions the build takes the same time and queries are 6 percent slower. Recall@10 is identical for all three arms. Who it serves: users of the default arcadedb (native) package with vector indexes, most embeddings being 384 to 1536 dimensions.

Docs. which-package.adoc gets a Vector search row: with Highway, native index builds take 1.28 to 1.62 times as long as on the JVM build and median queries 1.22 to 1.87 times as long, while native peak memory is 0.51 to 0.67 of the JVM build's. how-to/vectors.adoc gets a section on the distance kernels of each package and the variable. All numbers are generated from the A/B score.

Tests (tests/test_native_vector_provider.py): the helper picks Highway when the library is present, a user value wins (default, panama, native), no library keeps scalar; in a fresh process, the provider the isolate runs follows the shipped library, and default forces DefaultVectorizationProvider.

🤖 Generated with Claude Code

tae898 and others added 3 commits October 31, 2026 11:44
…its library (#153)

The engine forces jvector's scalar provider in every native image unless
ARCADEDB_VECTOR_PROVIDER says otherwise. The loader now sets it to native
(Highway) when libjvector-<arch>.so sits next to the engine library, which the
wheel ships on Linux x86-64 and aarch64; a value the user set wins, and
default forces the scalar provider. Measured in #153 (timed laptop A/B): index
builds 2.2 to 2.5 times faster and queries 14 to 30 percent faster at 768 and
1536 dimensions, the same build and 6 percent slower queries at 128, identical
recall. Docs: which-package gets a Vector search row (JVM faster to build and
query, native smaller in memory), vectors.adoc a section on the kernels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… section (#153)

Numbers generated from the vector-wheels A/B score (docs_numbers.py), numcheck clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n the JVM backend, like test_native_heap.py)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tae898
tae898 merged commit cd6f2e3 into main Oct 31, 2026
37 checks passed
@tae898
tae898 deleted the perf/153-highway-default branch October 31, 2026 03:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Native wheel vector search: the default scalar provider, Highway and the JVM wheel measured (which default to ship?)

1 participant