Recern Vector · Documentation

Getting started

Install

pip install recern-vector           # Python 3.11+
cargo add recern-vector             # Rust library
cargo install recern-vector-cli     # the recern-vector command

Python wheels are published for Linux (x86_64, aarch64), macOS (Intel, Apple silicon) and Windows (x86_64). On other platforms pip builds from source, which needs a Rust toolchain.

Python

import numpy as np
import recern_vector as rv

with rv.Database.open_or_create("docs.rvec") as db:      # saved on a clean exit
    docs = db.create_collection("docs", dim=384, metric="cosine")

    # ids, a float32 array of shape (n, 384), and one metadata dict per record
    docs.upsert_many(ids, embeddings, metadatas)

    hits = docs.search(query, k=5, filter={"lang": "en"})
    for hit in hits:
        print(hit.id, hit.distance, hit.metadata)

    print(docs.explain(query, k=5))      # strategy, nodes visited, time

create_collection fails if the collection already exists. When reopening a file, use db["docs"] (or db.collection("docs")), or check first with "docs" in db.

Embeddings can come from any model. With sentence-transformers:

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
embeddings = model.encode(texts, normalize_embeddings=True)   # float32, (n, 384)
query = model.encode("how do I make my queries faster?", normalize_embeddings=True)

See examples/python/semantic_search.py and examples/python/rag_retrieval.py for complete programs.

Rust

use recern_vector::{CollectionConfig, Database, Filter, Metric, SearchOptions};
use serde_json::json;

let mut db = Database::open_or_create("docs.rvec")?;
let docs = db.create_collection("docs", CollectionConfig::new(384, Metric::Cosine))?;
docs.upsert("doc-1", &embedding, Some(json!({"lang": "en"})))?;
docs.upsert_many(records)?;   // iterator of (id, vector, Option<metadata>)

let options = SearchOptions::default().filter(Filter::eq("lang", "en"));
let hits = docs.search(&query, 5, &options)?;
db.save()?;

A complete program: quickstart.rs (cargo run --release --example quickstart).

Node.js

Native builds for Linux x64, macOS arm64 and Windows x64 are attached to the 0.3.0 release. The package is not yet on npm. See Node.js for download links, setup and an asynchronous search example.

Command line

recern-vector init docs.rvec
recern-vector create-collection docs.rvec docs --dim 384 --metric cosine
recern-vector insert docs.rvec docs records.jsonl
recern-vector query docs.rvec docs --like doc-42 -k 5 --explain
recern-vector inspect docs.rvec

records.jsonl has one record per line: {"id": "doc-1", "vector": [0.1, ...], "metadata": {"lang": "en"}}. See Command line and examples/cli/quickstart.sh.

Next

Edit this page on GitHub