Hubris
API Reference

POST /v1/embeddings

Создать эмбеддинги — вектор фиксированной длины из текста. OpenAI-совместимый формат.

POST /v1/embeddings

Превращает текст в вектор чисел фиксированной длины — для семантического поиска, RAG, классификации, кластеризации. OpenAI-совместимый формат — без переписывания работают openai Python/TypeScript SDK, LangChain, LlamaIndex и любые клиенты под OpenAI Embeddings API.

Полный список embedding-моделей — в каталоге моделей (фильтр «embeddings»).

Стрима нет: один POST → один JSON-ответ.

Попробовать

POST/v1/embeddings
Request body (JSON)

Параметры и ответ

POST/v1/embeddings

Authorization

AuthorizationRequiredBearer <token>

API-ключ в формате sk-gw- + 32 hex. Создаётся в дашборде на /keys.

In: header

Request Body

application/jsonRequired
modelRequiredstring

ID embedding-модели — например, openai/text-embedding-3-small. Полный список: GET /v1/models, отфильтруйте по output_modalities содержащему embeddings.

Minimum length: 1
inputRequiredAny properties in string,array<string>,array<integer>,array<array<integer>>

Текст для эмбеддинга. Принимает: одну строку, массив строк (батч), массив токен-ID или массив массивов токен-ID. Максимум 2048 элементов в батче.

encoding_formatstring

float (по умолчанию) — массив чисел в embedding. base64 — base64-строка.

Value in: "float" | "base64"
dimensionsinteger

Уменьшенная размерность вектора. Поддерживается только моделями text-embedding-3-*.

Minimum: 0
userstring

Опциональный идентификатор конечного пользователя (для логов абьюза провайдера).

curl -X POST "https://api.hubris.pw/v1/embeddings" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/text-embedding-3-small",
    "input": "Привет, мир",
    "encoding_format": "float",
    "dimensions": 256,
    "user": "string"
  }'

Успешный ответ — список эмбеддингов в порядке input.

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": null
    }
  ],
  "model": "string",
  "usage": {
    "prompt_tokens": 0,
    "total_tokens": 0
  }
}

Минимальный пример

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».

Что дальше