Model reference · open weights

GVE

Available as managed deployment Embeddings Alibaba-NLP Embeddings 2 variants 164 dl/mo

GVE is an open-weight embedding model from Alibaba-NLP. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

MakerAlibaba-NLP
TypeEmbedding models
TaskEmbeddings
Parameters (lead)3.8B
Context125k tokens
Runs withtransformers
Based onQwen/Qwen2.5-VL-3B-Instruct
Released2025-10-31
Popularity164 downloads / month
LicenceOpen weights

About

What GVE is

One Embedder for All Video Retrieval Scenarios Queries of text, image, video, or any combination modalities — GVE understands them all for representations, zero-shot, without in-domain training.

GVE is the first video embedding model that generalizes across 9 abilities, including 3 diverse retrieval tasks and 6 domains — from coarse text-to-video to fine-grained spatial/temporal queries, composed (text+image) queries, and long-context retrieval — all evaluated on our new Universal Video Retrieval Benchmark (UVRB).

Built on Qwen2.5-VL and trained only with LoRA with 13M collected and synthesized multimodal data, GVE achieves SOTA zero-shot performance than competitors.


🌟 Why GVE?

CapabilityExisting WorksGVE
Query FlexibilityOnly text✅ Text, ✅ Image, ✅ Video, ✅ Text+Image, ✅ Text+Video
Fine-grained UnderstandingWeak on spatial-temporal detailsS: 0.821, T: 0.469 (SOTA)
Training DataUses in-domain test data (e.g., MSRVTT)Synthesized data — true zero-shot
PerformanceUnite-7B (8.3B): 55.9GVE-3B (3.8B): 0.571better with half the size; GVE-7B (3.8B): 0.600

📊 Performance on UVRB

  • TXT: Textual Video Retrieval
  • CMP: Composed Video Retrieval
  • VIS: Visual Video Retrieval
  • CG: Coarse-grained Video Retrieval
  • FG: Fine-grained Video Retrieval
  • LC: Long-Context Video Retrieval
  • S: Spatial Video Retrieval
  • T: Temporal Video Retrieval
  • PR: Partially Relevant Video Retrieval

For each column: highest score is bolded, second-highest is underlined.

ModelAVGTXTCMPVISCGFGLCSTPR
CLIP4Clip0.4160.4010.1780.7140.3800.3600.4630.5590.2850.236
ViCLIP0.3750.3360.2630.6400.3800.3150.3130.4840.2890.171
VideoCLIP-XL0.5100.5500.2270.6320.5580.4930.6000.7870.3810.310
LanguageBind0.5080.5430.2310.6450.5390.4790.6100.7230.3780.336
InternVideo2-1B0.4200.4220.2480.5810.4800.4030.3830.6060.4130.189
InternVideo2-6B0.4450.4480.2200.6600.5040.4170.4230.6310.4000.220
GME-2B0.4160.5390.3450.5970.4610.4710.6850.7160.3490.347
Unite-2B0.5070.5360.2420.6540.4550.4710.6810.7250.3470.341
VLM2Vec-V20.5380.5870.2630.6130.4980.5020.7620.8090.3480.348
BGE-VL0.4800.4970.2680.6220.4480.4060.6360.6640.2920.261
UniME-7B0.5420.5610.3080.7020.5000.5180.6640.7850.3960.373
B3-7B0.5380.5700.2700.6780.4820.5050.7220.7970.3640.355
GME-7B0.5620.6040.3410.6150.5180.5070.7880.7490.3730.398
Unite-7B0.5590.6090.2540.6660.5410.5390.7460.7790.4120.425
GVE-3B0.5710.6190.3040.6470.5520.5410.7640.8160.4300.377
GVE-7B0.6000.6570.3120.6570.5870.5700.8140.8210.4690.419

🚀 Get Started

  1. Loading model
model_path = 'Alibaba-NLP/GVE-3B'
model = AutoModel.from_pretrained(model_path, trust_remote_code=True, device_map='auto', low_cpu_mem_usage=True, torch_dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True, use_fast=True)
processor.tokenizer.padding_side = 'left'
  1. Processing inputs
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": "./asset/video_example.mp4",
                "max_pixels": 200 * 28 * 28,
                "fps": 1.0,
                "max_frames": 8,
            },
            {"type": "text", "text": "Describe this video."},
        ],
    }
]
texts = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
image_inputs, video_inputs, video_kwargs = process_vision_info(messages, return_video_kwargs=True)
inputs = processor(
    text=[texts],
    images=image_inputs,
    videos=video_inputs,
    padding=True,
    truncation=True,
    max_length=1200,
    return_tensors="pt",
    **video_kwargs,
).to("cuda")
  1. Embedding
outputs = model(**inputs)
embedding = F.normalize(outputs['last_hidden_state'][:, -1, :], p=2, dim=1)

📚 Citation

@misc{guo2025gve,
  title={Towards Universal Video Retrieval: Generalizing Video Embedding via Synthesized Multimodal Pyramid Curriculum},
  author={Zhuoning Guo and Mingxin Li and Yanzhao Zhang and Dingkun Long and Pengjun Xie and Xiaowen Chu},
  year={2025},
  eprint={2510.27571},
  archivePrefix={arXiv},
  primaryClass={cs.CV},
  url={https://arxiv.org/abs/2510.27571},
}

From the published model card. Full card on the HuggingFace links in the sidebar.

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys gve for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (gve below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/embeddings \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gve","input":"text to embed"}'

Create an account — your API key is available in the console. 5M tokens/month currently included with every new account at launch.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms