Eddy-VL

Eddy-VL Embedding v2

Urock-AI · urock.kr · License: Apache 2.0

Eddy-VL Embedding v2 is a multimodal embedding model light enough to run on edge devices. It keeps most of the retrieval quality of WeMM-Embedding-2B in a lighter package — built at Urock-AI Lab for real-world multimodal search over images, video, and documents.

At a glance

  • Lighter than WeMM-Embedding-2B. Three linear-attention layers are removed from the Gated DeltaNet stack. embedding() uses 2.036B parameters instead of 2.213B. On long text, compute is 12% lower. On a max-size image, it is 8.4% lower.
  • Close to WeMM-Embedding-2B on the same evaluation. Hit@1 reaches 99.7% of WeMM-Embedding-2B on SC, 97.7% on images, 98.5% on visual documents, and 97.4% on video.
  • One embedding space for images, video, and documents. The vector is the L2-normalized hidden state at the final <embedding> token.

BF16 multimodal embedding model. Three linear-attention layers are removed from the Gated DeltaNet stack of tencent/WeMM-Embedding-2B, and the remaining stack is restored by distillation from that model. Softmax attention layers are left in place. WeMM-Embedding-2B is built on Qwen/Qwen3.5-2B, and this model keeps the same hybrid backbone. embedding() returns one L2-normalized vector, taken from the last non-padding token. lm_head is not used for that vector. It stays in the checkpoint so vLLM and SGLang can load the model without a serving error.

Scores

Hit@1. Parentheses are nDCG@5, and they appear only on Image, VisDoc, and Video. Image is the 36-task macro, visual documents the 27-task macro, and video the 18-task macro. SC and ARO are single scores. Both rows come from the same in-house evaluation.

SC ARO Image VisDoc Video
WeMM-Embedding-2B, in-house 93.17 51.70 78.80 (87.34) 74.62 (78.08) 63.97 (78.74)
this model, in-house 92.92 49.00 76.99 (85.87) 73.49 (77.33) 62.28 (77.46)

Against WeMM-Embedding-2B, this model is lower by 0.25 points on SC, 2.70 on ARO, 1.81 on image Hit@1 (1.47 nDCG@5), 1.13 on VisDoc Hit@1 (0.75 nDCG@5), and 1.69 on video Hit@1 (1.28 nDCG@5).

Each ratio below is this model's score divided by the WeMM-Embedding-2B score on the same run. A ratio of 100% would match WeMM-Embedding-2B. Image, VisDoc, and Video use Hit@1. The nDCG@5 ratios are 98.3% for image, 99.0% for VisDoc, and 98.4% for video.

SC ARO Image VisDoc Video
Kept vs WeMM-Embedding-2B 99.7% 94.8% 97.7% 98.5% 97.4%
Hit@1. Gray is WeMM-Embedding-2B. Blue is this model. Hit@1 on this evaluation. Scale is 0 to 100. SC 93.17 92.92 ARO 51.70 49.00 Image 78.80 76.99 VisDoc 74.62 73.49 Video 63.97 62.28 WeMM-Embedding-2B this model nDCG@5. Gray is WeMM-Embedding-2B. Blue is this model. nDCG@5 on this evaluation. Scale is 0 to 100. Image 87.34 85.87 VisDoc 78.08 77.33 Video 78.74 77.46

MMEB-v2 tasks

Selected MMEB-v2 tasks, listed one by one rather than averaged again. Image and video scores are Hit@1. VisDoc scores are nDCG@5. All four columns come from in-house runs. WeMM-Embedding-2B and this model are from this run. Qwen3-VL-Embedding-2B and Eddy-VL 1.9B v1 are from an earlier in-house run of the same tasks.

Image (Hit@1)

Task WeMM-Embedding-2B this model Qwen3-VL-Embedding-2B Eddy-VL 1.9B v1
Visual7W-Pointing 98.60 98.60 82.40 84.00
RefCOCO 95.70 96.20 90.40 92.40
DocVQA 95.30 95.00 94.70 92.40
GQA 94.20 93.20 85.90 85.50
VOC2007 94.00 93.90 84.90 82.70
EDIS 93.30 92.10 88.30 82.00
RefCOCO-Matching 92.70 93.10 93.00 91.90
ImageNet-R 92.40 92.50 92.50 84.40
WebQA 91.70 91.00 88.60 85.60
TextVQA 91.50 90.80 88.30 85.00

Video (Hit@1)

Task WeMM-Embedding-2B this model Qwen3-VL-Embedding-2B Eddy-VL 1.9B v1
UCF101 99.30 97.20 80.10 65.00
Something-Something V2 91.30 89.30 68.10 59.50
HMDB51 88.80 84.50 71.90 60.30
ActivityNetQA 81.90 82.20 73.10 70.00
NExTQA 75.97 75.19 65.52 59.77
MSVD 72.54 71.49 68.96 66.87
QVHighlight 71.28 68.14 71.93 66.85

VisDoc (nDCG@5)

Task WeMM-Embedding-2B this model Qwen3-VL-Embedding-2B Eddy-VL 1.9B v1
ViDoRe · Synthetic DocQA (Healthcare) 98.89 98.52 95.28 93.93
VisRAG · SlideVQA 96.72 96.01 93.00 91.47
ViDoRe · Synthetic DocQA (AI) 96.32 95.95 96.72 94.62
ViDoRe · TabFQuAD 95.70 94.89 95.11 90.02
ViDoRe · Synthetic DocQA (Gov. reports) 95.47 93.48 96.45 93.81
ViDoRe · Synthetic DocQA (Energy) 93.91 93.89 90.28 89.94
VisRAG · InfoVQA 93.73 93.19 90.25 86.61
ViDoRe · InfoVQA 91.28 90.92 87.04 82.37
VisRAG · ChartQA 86.77 88.82 84.26 81.01
ViDoSeek · doc 83.60 83.48 84.79 82.21

Qwen3-VL-Embedding-2B and Eddy-VL 1.9B v1

Those two models come from a different family. Eddy-VL 1.9B v1 is distilled from Qwen3-VL-Embedding-2B. This model is distilled from WeMM-Embedding-2B, which keeps the Qwen3.5 hybrid backbone. Their scores in the tables above are from that earlier run.

The bars below count parameters used to produce an embedding. Eddy v1 is 1.93B and Qwen3-VL-Embedding-2B is 2.128B. In those two models, the token embedding and lm_head are one shared matrix, so the published size already counts that matrix once. WeMM is 2.213B and this model is 2.036B. Their lm_head is a separate matrix and is left out of the bar.

Eddy v1, WeMM, Qwen3-VL-Embedding, and this model. Weights used for an embedding. Same scale. Eddy v1 1.93B WeMM 2.213B Qwen3-VL-Embedding 2.128B this model 2.036B Same scale. Each bar counts weights used to produce an embedding.

Size and compute

In the Gated DeltaNet stack, three linear-attention layers are removed. Softmax attention layers are not removed.

WeMM-Embedding-2B and this model. Orange is the three removed linear layers. Parameters used by embedding(). lm_head excluded. Bars share one scale. WeMM 2.213B This model 2.036B vision 331M embed 508M text stack kept removed 176.4M Embedding forward, lm_head excluded. Each pair has its own scale. Text 8,192 WeMM 2B 24,341 GFLOPs this model, 21,418 GFLOPs, 12.0% less Max image WeMM 2B 4,114 GFLOPs this model, 3,770 GFLOPs, 8.4% less Gray is WeMM-Embedding-2B. Blue is this model.

The embedding path does not use lm_head. Removing the three linear-attention layers reduces compute by 12% on long text and by 8.4% on a max-size image. Softmax attention and the vision tower are unchanged.

What is in this repo

File Role
model.safetensors BF16 weights, about 4.74 GiB, including lm_head
config.json WeMMEmbedding, trust_remote_code via auto_map
eddy_vl_embedding_v2.py Last non-pad token, then L2 normalization
eddy_vl_embedding_v2_st.py Sentence-Transformers wrapper
embedding_chat_template.jinja Appends the <embedding> token
tokenizer.json Original WeMM tokenizer. It does not truncate at 8192. model_max_length is 262144

Not included: optimizer state.

Use

from huggingface_hub import hf_hub_download
from transformers import AutoModel, AutoProcessor

repo = "Urock-AI/eddy-vl_embedding_v2"
model = AutoModel.from_pretrained(repo, trust_remote_code=True, torch_dtype="auto").eval()
processor = AutoProcessor.from_pretrained(repo)
template = open(hf_hub_download(repo, "embedding_chat_template.jinja"), encoding="utf-8").read()
messages = [[
    {"role": "system", "content": [{"type": "text", "text": "Represent this input for retrieval."}]},
    {"role": "user", "content": [{"type": "text", "text": "a red apple on a table"}]},
]]
text = processor.apply_chat_template(
    messages, chat_template=template, add_generation_prompt=False, tokenize=False,
)
batch = processor(text=text, return_tensors="pt", padding=True)
print(model.embedding(**batch).shape)  # (1, 2048)

The processor is the original Qwen3VLProcessor. For a video, embedding_chat_template.jinja emits one <|video_pad|> from the frame list. Do not also put <|video_pad|> at the start of the question string.

For SGLang 0.5.9, follow the Serving section of WeMM-Embedding-2B. Run patch_sglang_video.py from that repository, then start the server with --is-embedding and --enable-precise-embedding-interpolation. That patch file is not in this repo. --model-path is this model, Urock-AI/eddy-vl_embedding_v2.

Citation

This model is a derivative of WeMM-Embedding-2B. The weights and code in this repository are released under Apache 2.0. Cite this model, and cite WeMM-Embedding as the base model.

@misc{eddy_vl_embedding_v2,
  title        = {Eddy-VL Embedding v2},
  author       = {Urock-AI Lab},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/Urock-AI/eddy-vl_embedding_v2}}
}

@article{wemm-embedding,
  title         = {WeMM-Embedding: WeChat Multi-Modal Embedding Technical Report},
  author        = {Junjie Zhou and Ke Mei and Lei Li and Tianyi Wang and Fengyun Rao and Jing Lyu},
  year          = {2026}
}
Downloads last month
13
Safetensors
Model size
3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Urock-AI/eddy-vl_embedding_v2

Finetuned
Qwen/Qwen3.5-2B
Finetuned
(5)
this model

Collection including Urock-AI/eddy-vl_embedding_v2