Embeddings¶
POST /embeddings
Generate dense vector representations of text. Use embeddings for semantic search, clustering, classification, and RAG (retrieval-augmented generation).
Request¶
{
"model": "qwen3-vl-embedding-8b",
"input": "The transformer architecture uses self-attention mechanisms."
}
Batch inputs (list of strings):
{
"model": "qwen3-vl-embedding-8b",
"input": [
"Self-supervised learning reduces labelling requirements.",
"Contrastive learning pulls similar examples together in embedding space."
]
}
Response¶
{
"object": "list",
"data": [{
"object": "embedding",
"index": 0,
"embedding": [0.0012, -0.0034, ...]
}],
"model": "qwen3-vl-embedding-8b",
"usage": {"prompt_tokens": 12, "total_tokens": 12}
}
Python example¶
import numpy as np
from openai import OpenAI
import os
client = OpenAI(
base_url=os.environ["PAIS_API_BASE"],
api_key=os.environ["PAIS_API_KEY"],
)
def embed(texts: list[str]) -> np.ndarray:
response = client.embeddings.create(
model="qwen3-vl-embedding-8b",
input=texts,
)
return np.array([d.embedding for d in response.data])
# Semantic similarity
abstracts = [
"We present a novel method for protein structure prediction...",
"A deep learning approach to climate modelling...",
"Contrastive learning for biomedical text...",
]
query = "machine learning for biology"
vecs = embed(abstracts + [query])
doc_vecs, q_vec = vecs[:-1], vecs[-1]
# Cosine similarity
similarities = doc_vecs @ q_vec / (
np.linalg.norm(doc_vecs, axis=1) * np.linalg.norm(q_vec)
)
ranked = sorted(zip(similarities, abstracts), reverse=True)
for score, text in ranked:
print(f"{score:.3f} {text[:60]}...")
Embedding model details¶
| Property | Value |
|---|---|
| Model | Qwen3-VL-Embedding-8B (ColQwen3) |
| Serving | vLLM, pooler endpoint /pooling |
| Vector dimension | Check with len(response.data[0].embedding) |
| Max input tokens | ~8192 tokens |
| Suitable for | Dense retrieval, semantic search, clustering |
Batch efficiently
Embedding is GPU-bound. Batching multiple texts in a single request is significantly more efficient than one request per text. Aim for batches of 16–64 strings.
Downstream usage¶
See RAG over Research Papers for a complete worked example using embeddings with a vector store.