POST /v1/embeddings
Создать эмбеддинги — вектор фиксированной длины из текста. OpenAI-совместимый формат.
POST /v1/embeddings
Превращает текст в вектор чисел фиксированной длины — для семантического поиска, RAG, классификации, кластеризации. OpenAI-совместимый формат — без переписывания работают openai Python/TypeScript SDK, LangChain, LlamaIndex и любые клиенты под OpenAI Embeddings API.
Полный список embedding-моделей — в каталоге моделей (фильтр «embeddings»).
Стрима нет: один POST → один JSON-ответ.
Попробовать
/v1/embeddingsПараметры и ответ
/v1/embeddingsAuthorization
AuthorizationRequiredBearer <token>API-ключ в формате sk-gw- + 32 hex. Создаётся в дашборде на /keys.
In: header
Request Body
application/jsonRequiredmodelRequiredstringID embedding-модели — например, openai/text-embedding-3-small. Полный список: GET /v1/models, отфильтруйте по output_modalities содержащему embeddings.
1inputRequiredAny properties in string,array<string>,array<integer>,array<array<integer>>Текст для эмбеддинга. Принимает: одну строку, массив строк (батч), массив токен-ID или массив массивов токен-ID. Максимум 2048 элементов в батче.
encoding_formatstringfloat (по умолчанию) — массив чисел в embedding. base64 — base64-строка.
"float" | "base64"dimensionsintegerУменьшенная размерность вектора. Поддерживается только моделями text-embedding-3-*.
0userstringОпциональный идентификатор конечного пользователя (для логов абьюза провайдера).
Успешный ответ — список эмбеддингов в порядке input.
Минимальный пример
curl -s https://api.hubris.pw/v1/embeddings \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": "Привет, мир"
}'
from openai import OpenAI
client = OpenAI(api_key="sk-gw-...", base_url="https://api.hubris.pw/v1")
r = client.embeddings.create(
model="openai/text-embedding-3-small",
input="Привет, мир",
)
print(len(r.data[0].embedding)) # 1536
import OpenAI from "openai";
const client = new OpenAI({ apiKey: "sk-gw-...", baseURL: "https://api.hubris.pw/v1" });
const r = await client.embeddings.create({
model: "openai/text-embedding-3-small",
input: "Привет, мир",
});
console.log(r.data[0].embedding.length); // 1536
Батч
input принимает массив строк — за один запрос можно посчитать до 2048 эмбеддингов. Это значительно быстрее и дешевле, чем 2048 одиночных запросов.
curl -s https://api.hubris.pw/v1/embeddings \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": ["первый текст", "второй текст", "третий текст"]
}'
В ответе data — массив с тем же порядком, что и input. Поле index указывает позицию.
Уменьшенная размерность
Параметр dimensions поддерживается моделями openai/text-embedding-3-small (по умолчанию 1536) и openai/text-embedding-3-large (по умолчанию 3072). Меньшая размерность = меньше места в vector store и быстрее cosine similarity, но падает качество поиска.
curl -s https://api.hubris.pw/v1/embeddings \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": "Привет",
"dimensions": 256
}'
Base64-encoding
encoding_format: "base64" возвращает вектор как base64-строку вместо массива чисел — экономит ~30% трафика. Многие SDK сами декодируют обратно в float-массив.
curl -s https://api.hubris.pw/v1/embeddings \
-H "Authorization: Bearer sk-gw-..." \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": "Привет",
"encoding_format": "base64"
}'
Биллинг
Embeddings тарифицируются только по входным токенам — completion-токенов нет. Точная формула — на странице Цены. Цены в ₽ за 1 миллион токенов и весь список embedding-моделей — в каталоге моделей с фильтром по выходной модальности «embeddings».