Skip to main content

qql_embed/
lib.rs

1//! Shared embedding layer for QQL.
2//!
3//! - [`Embedder`] — host-agnostic dense/sparse API (batch dense by default when overridden)
4//! - [`resolve_embeddings`] — rewrite `QUERY` / `UPSERT` text into vectors on the AST
5//! - [`sparse`] — local wire-compatible BM25 sparse vectors (no network)
6//!
7//! Used by `qql` (runtime HttpEmbedder), `qql-edge` (FastEmbedder), and `qql-wasm`
8//! (fetch / JS adapters). No Qdrant I/O and no HTTP client live here.
9
10/// ASCII folding table (Lucene mapping, as Qdrant ships it).
11mod bm25_fold;
12/// BM25 processing languages (Qdrant `Language` names + aliases).
13pub mod bm25_lang;
14/// Vendored per-language stopword lists (Qdrant segment crate, Apache-2.0).
15mod bm25_stopwords;
16/// BM25 text-processing pipeline: languages, tokenizers, folding, and the
17/// `avg_len` estimator — option-compatible with Qdrant's `Bm25Config`.
18pub mod bm25_text;
19/// Host-agnostic `Embedder` trait, joint embedding output, and error helpers.
20pub mod embedder;
21/// AST rewriting: resolve `TEXT` inputs to vectors via the configured embedder.
22pub mod resolve;
23/// Query-side embedding resolution (collect → batch → apply), split from [`resolve`].
24mod resolve_query;
25/// Local wire-compatible BM25 sparse vectors (no network).
26pub mod sparse;
27/// `USING` vector-kind resolution from collection topology (dense/sparse/multi).
28pub mod topology;
29
30#[cfg(test)]
31mod bm25_text_test;
32#[cfg(test)]
33mod resolve_test;
34#[cfg(test)]
35mod sparse_test;
36#[cfg(test)]
37mod topology_test;
38
39pub use bm25_lang::Language;
40pub use bm25_text::{
41    AvgLenEstimate, Bm25Pipeline, Bm25TextConfig, Stemmer, Stopwords, Tokenizer, estimate_avg_len,
42};
43pub use embedder::{
44    Embedder, EmbedderBound, JointEmbeddingOutput, SparseEmbedder, cross_rerank_unsupported_error,
45    dense_model_unsupported_error, image_unsupported_error, multi_unsupported_error,
46    sparse_model_unsupported_error,
47};
48pub use resolve::{DENSE_VECTOR_NAME, SPARSE_VECTOR_NAME, resolve_embeddings};
49pub use sparse::{Bm25Params, SparseVector};
50pub use topology::{
51    TopologyNames, query_needs_kind_resolution, resolve_query_vector_kinds,
52    resolve_query_vector_kinds_simple,
53};