Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Code owners for Fieldnote-Echo/ordvec
# Code owners for Project-Navi/ordvec
#
# Listed owners are automatically requested for review on pull requests that
# touch matching paths. For GitHub to honour an entry the owner must have write
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Questions & research discussion
url: https://github.com/Fieldnote-Echo/ordvec/discussions
url: https://github.com/Project-Navi/ordvec/discussions
about: For usage questions, methodology, and paper-related discussion.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ What are you trying to do that ordvec doesn't support today?
What you'd like to see.

**Alternatives considered**
(See [docs/ALTERNATIVES_CONSIDERED.md](https://github.com/Fieldnote-Echo/ordvec/blob/main/docs/ALTERNATIVES_CONSIDERED.md) —
(See [docs/ALTERNATIVES_CONSIDERED.md](https://github.com/Project-Navi/ordvec/blob/main/docs/ALTERNATIVES_CONSIDERED.md) —
some directions were already trialled and dropped.)

**Scope**
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/setup-intel-sde/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ runs:
archive_cache_dir="${HOME}/.cache/ordvec-intel-sde"
cached_archive="${archive_cache_dir}/${version}-${sha256}.tar.xz"
download_url="${url_base}/${version}.tar.xz"
curl_user_agent="ordvec-ci-intel-sde/${version} (https://github.com/Fieldnote-Echo/ordvec)"
curl_user_agent="ordvec-ci-intel-sde/${version} (https://github.com/Project-Navi/ordvec)"
archive_ready=false

mark_unavailable() {
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ jobs:
--max-time 60 \
--retry 3 \
--retry-all-errors \
--user-agent "ordvec-ci/${core_version} (https://github.com/Fieldnote-Echo/ordvec)" \
--user-agent "ordvec-ci/${core_version} (https://github.com/Project-Navi/ordvec)" \
--output /dev/null \
--write-out "%{http_code}" \
"https://crates.io/api/v1/crates/ordvec/${core_version}" || true)"
Expand Down
20 changes: 11 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,14 @@
# ONE-TIME SETUP before the first tag on this workflow (each fails CLOSED until
# done, so landing this first is safe):
# * crates.io: ordvec and ordvec-manifest > Settings > Trusted Publishing >
# edit each GitHub publisher -> workflow = `release.yml` (env stays
# `crates-io`).
# * PyPI: ordvec > publishing > edit the GitHub publisher -> workflow =
# `release.yml` (env stays `pypi`).
# edit each GitHub publisher -> owner = `Project-Navi`, repository =
# `ordvec`, workflow = `release.yml` (env stays `crates-io`).
# * PyPI: ordvec > publishing > edit the GitHub publisher -> owner =
# `Project-Navi`, repository = `ordvec`, workflow = `release.yml`
# (env stays `pypi`).
# * PyPI: ordvec-manifest > publishing > add or edit the GitHub publisher
# -> workflow = `release.yml` (env stays `pypi`).
# -> owner = `Project-Navi`, repository = `ordvec`, workflow =
# `release.yml` (env stays `pypi`).
# * GitHub Environments `crates-io` AND `pypi`:
# - keep "Required reviewers" (the human publish gate);
# - set "Deployment branches and tags" to **Selected branches and tags**
Expand Down Expand Up @@ -1090,7 +1092,7 @@ jobs:
METADATA_URL="https://crates.io/api/v1/crates/ordvec/${VERSION}"
API_URL="https://crates.io/api/v1/crates/ordvec/${VERSION}/download"
STATIC_URL="https://static.crates.io/crates/ordvec/ordvec-${VERSION}.crate"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Fieldnote-Echo/ordvec)"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Project-Navi/ordvec)"
EXISTING="${RUNNER_TEMP}/existing-ordvec.crate"
METADATA="${RUNNER_TEMP}/existing-ordvec-metadata.json"
METADATA_STATUS_FILE="${RUNNER_TEMP}/existing-ordvec-metadata-status.txt"
Expand Down Expand Up @@ -1223,7 +1225,7 @@ jobs:
# CDN propagation can take a few seconds after publish — retry briefly.
API_URL="https://crates.io/api/v1/crates/ordvec/${VERSION}/download"
STATIC_URL="https://static.crates.io/crates/ordvec/ordvec-${VERSION}.crate"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Fieldnote-Echo/ordvec)"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Project-Navi/ordvec)"
PUBLISHED="${RUNNER_TEMP}/published.crate"
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
rm -f "$PUBLISHED"
Expand Down Expand Up @@ -1467,7 +1469,7 @@ jobs:
METADATA_URL="https://crates.io/api/v1/crates/ordvec-manifest/${VERSION}"
API_URL="https://crates.io/api/v1/crates/ordvec-manifest/${VERSION}/download"
STATIC_URL="https://static.crates.io/crates/ordvec-manifest/ordvec-manifest-${VERSION}.crate"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Fieldnote-Echo/ordvec)"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Project-Navi/ordvec)"
EXISTING="${RUNNER_TEMP}/existing-ordvec-manifest.crate"
METADATA="${RUNNER_TEMP}/existing-ordvec-manifest-metadata.json"
METADATA_STATUS_FILE="${RUNNER_TEMP}/existing-ordvec-manifest-metadata-status.txt"
Expand Down Expand Up @@ -1585,7 +1587,7 @@ jobs:
A_SHA=$(sha256sum "$ATTESTED" | cut -d' ' -f1)
API_URL="https://crates.io/api/v1/crates/ordvec-manifest/${VERSION}/download"
STATIC_URL="https://static.crates.io/crates/ordvec-manifest/ordvec-manifest-${VERSION}.crate"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Fieldnote-Echo/ordvec)"
CRATES_IO_USER_AGENT="ordvec-release-verify/${VERSION} (https://github.com/Project-Navi/ordvec)"
PUBLISHED="${RUNNER_TEMP}/published.crate"
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
rm -f "$PUBLISHED"
Expand Down
19 changes: 13 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
tooling** (introduced with the benchmark harness; none reach the published
`ordvec` crate or the `ordvec` PyPI wheel). The `benchmarks/beir/requirements.txt`
deps were unpinned, so OSV flagged each against its full historical CVE list;
they are now lower-bound-pinned at the first patched release (`requests>=2.32.4`,
they are now lower-bound-pinned at the first patched release (`requests>=2.33.0`,
`hnswlib>=0.8.0`, `numpy>=1.26`, plus safe floors for the rest). `bincode` 1.x
(RUSTSEC-2025-0141, *unmaintained* — not a vulnerability) enters only
transitively via `hnsw_rs` in `benchmarks/beir-bench` and is absent from
Expand All @@ -37,8 +37,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **`RankQuantFastscan` is now a stable, public API** (previously re-exported
`#[doc(hidden)]`), with `.ovfs` / `OVFS` persistence via
`RankQuantFastscan::{write,load}` and a ninth `load_fastscan` cargo-fuzz
target. Metadata-probe support (`probe_index_metadata`) for `.ovfs` is
deferred to 0.8.0 (#233, #232).
target. Metadata-probe support (`probe_index_metadata`) and
`ordvec-manifest` v1 support for `.ovfs` are deferred to 0.8.0 (#233, #232);
bind `.ovfs` artifacts with caller-owned checksums or attestations when they
cross a trust boundary.

### Performance

Expand All @@ -64,6 +66,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- **Clarified BEIR benchmark release claims.** The committed README figures use
the default method set and do not yet include the newer
`sign-rq2-threaded` probe row; the docs and plot generator now distinguish
4096-byte HNSW float-vector storage from implementation-owned graph side
storage instead of treating the graph as zero.
- **On-disk format magics renamed to `OV*`** (`OVR1` / `OVRQ` / `OVBM` /
`OVSB`). The loaders still accept the legacy `TV*` magics, so every
previously-written `.tvr` / `.tvrq` / `.tvbm` / `.tvsb` file continues to load
Expand Down Expand Up @@ -321,6 +328,6 @@ system dependencies** — no BLAS, no `ndarray`, no `faer`.
AVX-512 intrinsics this crate relies on were stabilized.
- Dual-licensed under **MIT OR Apache-2.0**.

[0.4.0]: https://github.com/Fieldnote-Echo/ordvec/compare/v0.3.0...v0.4.0
[0.2.0]: https://github.com/Fieldnote-Echo/ordvec/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/Fieldnote-Echo/ordvec/releases/tag/v0.1.0
[0.4.0]: https://github.com/Project-Navi/ordvec/compare/v0.3.0...v0.4.0
[0.2.0]: https://github.com/Project-Navi/ordvec/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/Project-Navi/ordvec/releases/tag/v0.1.0
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ edition = "2021"
rust-version = "1.89" # AVX-512 intrinsics stabilized in 1.89.0; also clears the 1.87 floor from u64::is_multiple_of
description = "Training-free ordinal & sign quantization for vector retrieval"
license = "MIT OR Apache-2.0"
repository = "https://github.com/Fieldnote-Echo/ordvec"
homepage = "https://github.com/Fieldnote-Echo/ordvec"
repository = "https://github.com/Project-Navi/ordvec"
homepage = "https://github.com/Project-Navi/ordvec"
documentation = "https://docs.rs/ordvec"
readme = "README.md"
keywords = ["vector-search", "quantization", "nearest-neighbor", "ann", "simd"]
Expand Down
2 changes: 1 addition & 1 deletion GOVERNANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ describes how it is run.
- **Maintainer.** ordvec is currently maintained by Nelson Spence
([@Fieldnote-Echo](https://github.com/Fieldnote-Echo)), the project lead and
final decision-maker on technical direction, releases, and scope.
- **Code owners.** Listed in [`.github/CODEOWNERS`](https://github.com/Fieldnote-Echo/ordvec/blob/main/.github/CODEOWNERS); they
- **Code owners.** Listed in [`.github/CODEOWNERS`](https://github.com/Project-Navi/ordvec/blob/main/.github/CODEOWNERS); they
review and approve changes.

## Decision-making
Expand Down
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,13 @@ SCALE_SIZES := 1000 3000 10000 30000 100000 170000

# ── methods (all measured in the single Rust process) ─────────────────────────
# flat exact inner product (== FAISS IndexFlatIP math), 4096 B/vec
# hnsw pure-Rust HNSW M=32 (Malkov–Yashunin), 4096 B/vec
# hnsw pure-Rust HNSW M=32 (Malkov–Yashunin), 4096 B/vec + graph
# rq2/rq4 ordvec RankQuant b=2 / b=4 (256 / 512 B/vec)
# bitmap-rq2 ordvec Bitmap → RankQuant b=2 (two-stage)
# sign-rq2 ordvec SignBitmap → RankQuant b=2 (two-stage)
# The committed README figures use this default set; they intentionally do not
# include the newer sign-rq2-threaded probe row until the public artifacts are
# regenerated and reviewed together.
BENCH_METHODS := flat,hnsw,rq2,rq4,bitmap-rq2,sign-rq2

# ── encoder (canonical: GGUF Q8_0 via llama-cpp-python / CUDA) ────────────────
Expand Down
Loading
Loading