Эмбеддинги через API

Один POST тем же ключом, что и чат: текст на вход, вектор чисел на выход. Здесь собраны параметры, пакетный режим, примеры на трёх языках и правила списания.

Эндпоинт и авторизация

Эмбеддинги живут на OpenAI-совместимом входе и работают тем же ключом, что и чат: меняется только путь.

МетодПутьНазначение
POSThttps://api.tokenator.top/v1/embeddingsВектор для строки или пакета строк.

Ключ передаётся заголовком Authorization: Bearer sk-your-tokenator-key. Отдельного ключа для эмбеддингов нет.

Первый запрос

Вектор для одной строки
curl https://api.tokenator.top/v1/embeddings \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-embedding-2",
    "input": "как подключить свой домен"
  }'
Ответ
{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [0.0023, -0.0147, 0.0091]
    }
  ],
  "model": "gemini-embedding-2",
  "usage": { "prompt_tokens": 6, "total_tokens": 6 }
}

Ответ всегда этой формы: data в том же порядке, что и входные строки, имя модели Tokenator и usage с числом токенов. Всё, что апстрим добавил от себя, до клиента не доходит.

Какие модели считают векторы

МодельAPI IDКонтекстМножитель
Gemini Embedding 2gemini-embedding-28.2K токенов1.4×
Text Embedding 3 Largetext-embedding-3-large8.2K токенов1.2×
Text Embedding 3 Smalltext-embedding-3-small8.2K токенов
Gemini Embedding 001gemini-embedding-00120K токенов1.35×

Параметры запроса

ПолеТипЧто делает
modelstring, обязательноеAPI ID модели из каталога. Модель, у которой не включены эмбеддинги, отклоняется с кодом 400 — запрос до провайдера не доходит.
inputstring или массив строкТекст, для которого нужен вектор. Массив считается пакетом: на каждую строку приходит свой вектор в том же порядке.
encoding_formatstringfloat или base64 — форма, в которой провайдер вернёт числа. Поле проходит на апстрим как есть.
dimensionsintegerТребуемая длина вектора, если модель умеет её укорачивать. Поддержка зависит от модели.

Пакет строк за один запрос

Поле input принимает массив. Это один запрос, один ответ и один проход по сети — для индексации базы так заметно быстрее, чем по строке за раз. Порядок векторов совпадает с порядком строк, а поле index у каждого элемента подтверждает соответствие.

Пакет из трёх строк
curl https://api.tokenator.top/v1/embeddings \
  -H "Authorization: Bearer sk-your-tokenator-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-embedding-2",
    "input": ["первый абзац", "второй абзац", "третий абзац"]
  }'

SDK и готовые примеры

Эндпоинт совместим с OpenAI SDK: меняются только базовый адрес и ключ.

Python — openai
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-tokenator-key",
    base_url="https://api.tokenator.top/v1",
)

result = client.embeddings.create(
    model="gemini-embedding-2",
    input=["первый абзац", "второй абзац"],
)

print(len(result.data[0].embedding))
Node.js — openai
import OpenAI from "openai"

const client = new OpenAI({
  apiKey: "sk-your-tokenator-key",
  baseURL: "https://api.tokenator.top/v1",
})

const result = await client.embeddings.create({
  model: "gemini-embedding-2",
  input: "как подключить свой домен",
})

console.log(result.data[0].embedding.length)

Базовый адрес и ключ те же, что и для чата, поэтому в одном клиенте можно держать и чат, и эмбеддинги.

Как списываются эмбеддинги

Так же, как обычные токены. Считается prompt_tokens из ответа провайдера, умножается на множитель модели и списывается с лимита ключа — отдельного пакета для эмбеддингов не существует. Вывода у запроса нет, поэтому платите вы только за входной текст.

Расход виден в дашборде ключа вместе с чатом, а остаток — в /v1/tokens.

Коды ошибок

КодКогда приходитЧто делать
400 model requiredВ теле нет поля model или тело не JSON.Проверьте Content-Type: application/json и непустой model.
400 is not an embedding modelМодель есть в каталоге, но она не помечена как модель эмбеддингов.Возьмите модель из таблицы выше. Обычные чат-модели работают на /v1/chat/completions.
401Ключ не передан, просрочен или отозван.Проверьте заголовок Authorization: Bearer и срок ключа в личном кабинете.
502 Request errorОшибка на стороне провайдера. Её текст клиенту не пересылается.Повторите запрос — Tokenator сам переключается на следующего провайдера. Если ошибка стабильна, напишите в поддержку.
503 Model temporarily unavailableНи один провайдер модели не ответил.Повторите позже или возьмите другую модель из таблицы.

Частые вопросы

Чем модель эмбеддингов отличается от чат-модели?

Она не пишет текст, а возвращает вектор чисел, по которому тексты сравнивают между собой: поиск по смыслу, дедупликация, кластеризация, RAG. Поэтому у неё нет ни streaming, ни tools, ни максимального output — только контекст, то есть сколько текста помещается в один запрос.

Почему модель отвечает 400 на /v1/embeddings?

Эндпоинт обслуживает только модели, отмеченные как модели эмбеддингов. Список — в таблице выше и в каталоге под фильтром «Эмбеддинги». Запрос с обычной чат-моделью отклоняется до обращения к провайдеру, поэтому такая ошибка ничего не стоит.

Можно ли обратиться к модели эмбеддингов из чата?

Нет. На /v1/chat/completions, /v1/responses и /v1/messages такая модель отвечает 400 с указанием нужного пути — это защищает от запроса, который всё равно вернул бы мусор.

Сколько строк можно отправить за раз?

Ограничение одно — контекст модели: суммарная длина всех строк пакета должна в него помещаться. Он написан в таблице выше и на странице модели.

Хранит ли Tokenator текст, который я отправил?

Тело запроса попадает в технический лог ключа, как и у остальных эндпоинтов. Что именно хранится и сколько — написано в разделе о безопасности.