Queryn — Embedding Translation

Move a corpus between embedding models without re-embedding it. Given a text chunk's embedding in Model A's space, a Queryn adapter returns the equivalent vector in Model B's space — so a vector index built with one model can be served against another after a lightweight transform instead of a full, expensive backfill.

What's in this org

The Queryn Embedding Adapters collection — one small ONNX model per directed model pair (queryn-adapter-<source>_to_<target>). Each repo contains:

Every adapter L2-normalizes its input and output internally, so you feed raw embeddings straight in and get unit vectors back.

Using an adapter

import numpy as np, onnxruntime as ort
from huggingface_hub import hf_hub_download

repo = "QuerynAi/queryn-adapter-ada-002_to_bge-m3"
sess = ort.InferenceSession(hf_hub_download(repo, "model.onnx"),
                            providers=["CPUExecutionProvider"])

src = np.random.rand(8, 1536).astype(np.float32)          # your ada-002 embeddings
tgt = sess.run(["target_embedding"], {"source_embedding": src})[0]
#  tgt: (8, 1024) unit vectors in bge-m3 space

How the adapters are built

Model coverage

Model Dim Role in v1
ada-002 1536 source only (deprecated as a target)
te3-small 1536 source + target
qwen3-emb-8b 4096 source + target
bge-m3 1024 source + target
me5-large 1024 source + target
pplx-embed-1 1024 source + target
nemotron-1b-free 2048 source + target
fastembed-bge-small 384 source + target

49 directed pairs in the current (v1) generation.

Links

License

Adapter models: MIT. The Queryn codebase: Apache-2.0. Training data keeps each source corpus's own license — see the dataset's LICENSE manifest.

Status

An independent research project on practical embedding-space alignment. Issues and findings welcome via the repo; the adapters are provided as-is.