Skip to main content

Crate semstore

Crate semstore 

Source
Expand description

§semstore

Local semantic search for Rust applications — store text, search by meaning. No cloud required. Embeddings run on-device via ONNX (BGE-Small, ~23 MB).

§Features

FeatureDefaultDescription
default-embedderBundles BGE-Small-EN-v1.5 via fastembed
bundled-sqliteStatically links SQLite (no system lib needed)

Disable default-embedder to bring your own model via the Embedder trait.

§Quick start

use semstore::SemanticIndex;
use serde_json::json;

let mut idx = SemanticIndex::open("./index.db")?;

idx.insert("Rust ownership prevents data races at compile time",
           json!({ "lang": "rust" }))?;
idx.insert("Python uses reference counting for memory management",
           json!({ "lang": "python" }))?;

let results = idx.search("memory safety", 3)?;
for r in &results {
    println!("[{:.2}] {}", r.score, r.content);
}

§Custom embedder

use semstore::{Embedder, Error, SemanticIndex};
use serde_json::json;

struct OpenAiEmbedder { /* your fields */ }

impl Embedder for OpenAiEmbedder {
    fn embed(&self, text: &str) -> Result<Vec<f32>, Error> {
        // call OpenAI /v1/embeddings …
        Ok(vec![0.0; 1536])
    }
    fn dimensions(&self) -> usize { 1536 }
}

let mut idx = SemanticIndex::builder()
    .embedder(OpenAiEmbedder { /* … */ })
    .path("./index.db")
    .build()?;

Structs§

BgeEmbedder
BGE-Small-EN-v1.5 — a fast, accurate 384-dimensional English embedder.
Builder
Builder for SemanticIndex.
SearchResult
A single result returned by SemanticIndex::search.
SemanticIndex
A local semantic index — store text with metadata and search by meaning.
Stats
Statistics about a SemanticIndex.

Enums§

Error
Errors that can occur when using SemanticIndex.

Traits§

Embedder
Converts text into fixed-size embedding vectors.

Type Aliases§

Result
Convenience alias for std::result::Result<T, Error>.