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.