Embeddings
The /v1/embeddings endpoint converts text into dense vector representations.
Endpoint
POST /v1/embeddings
Request
| Field | Type | Required | Description |
|---|---|---|---|
model |
string | Yes | Embedding model name (e.g. bge-m3) |
input |
string or array | Yes | Text or list of texts to embed |
Example: Single String
The platform authenticates with the session cookie set at sign-in (see Authentication). The cURL example below sends that cookie. The Python snippet illustrates the OpenAI-compatible request shape that the endpoint accepts.
cURL:
curl https://api.xinference.co/v1/embeddings \
--cookie "session=<your-session-cookie>" \
-H "Content-Type: application/json" \
-d '{
"model": "bge-m3",
"input": "What is Xinference?"
}'
Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.xinference.co/v1",
api_key="...", # platform auth uses the session cookie
)
response = client.embeddings.create(
model="bge-m3",
input="What is Xinference?",
)
vector = response.data[0].embedding
print(f"Dimension: {len(vector)}") # 1024 for bge-m3
Example: Batch Embedding
texts = [
"Xinference is a cloud AI inference platform.",
"BGE-M3 is a multilingual embedding model.",
"Vector databases store embedding vectors.",
]
response = client.embeddings.create(
model="bge-m3",
input=texts,
)
for i, item in enumerate(response.data):
print(f"Text {i}: {len(item.embedding)}-dim vector")
Semantic Similarity
import numpy as np
def cosine_similarity(a: list, b: list) -> float:
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
response = client.embeddings.create(
model="bge-m3",
input=["cat", "kitten", "automobile"],
)
vectors = [item.embedding for item in response.data]
print(cosine_similarity(vectors[0], vectors[1])) # high (cat ≈ kitten)
print(cosine_similarity(vectors[0], vectors[2])) # low (cat ≠ automobile)
RAG Pipeline Example
# Index documents
docs = ["Doc A: ...", "Doc B: ...", "Doc C: ..."]
doc_response = client.embeddings.create(model="bge-m3", input=docs)
doc_vectors = [item.embedding for item in doc_response.data]
# Query
query = "Tell me about Xinference"
query_response = client.embeddings.create(model="bge-m3", input=query)
query_vector = query_response.data[0].embedding
# Rank by cosine similarity
scores = [cosine_similarity(query_vector, dv) for dv in doc_vectors]
best = sorted(enumerate(scores), key=lambda x: -x[1])
print("Most relevant:", docs[best[0][0]])
Tips
- Embed your query and documents with the same model for consistent vector spaces.
- BGE models expect the query to be prefixed with
"Represent this sentence for searching relevant passages: "in some configurations. Check the model card. - For best performance in production, batch your inputs rather than making one request per text.