Эмбеддинги через API
Один POST тем же ключом, что и чат: текст на вход, вектор чисел на выход. Здесь собраны параметры, пакетный режим, примеры на трёх языках и правила списания.
Эндпоинт и авторизация
Эмбеддинги живут на OpenAI-совместимом входе и работают тем же ключом, что и чат: меняется только путь.
| Метод | Путь | Назначение |
|---|---|---|
| POST | https://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 2 | gemini-embedding-2 | 8.2K токенов | 1.4× |
| Text Embedding 3 Large | text-embedding-3-large | 8.2K токенов | 1.2× |
| Text Embedding 3 Small | text-embedding-3-small | 8.2K токенов | 1× |
| Gemini Embedding 001 | gemini-embedding-001 | 20K токенов | 1.35× |
Параметры запроса
| Поле | Тип | Что делает |
|---|---|---|
model | string, обязательное | API ID модели из каталога. Модель, у которой не включены эмбеддинги, отклоняется с кодом 400 — запрос до провайдера не доходит. |
input | string или массив строк | Текст, для которого нужен вектор. Массив считается пакетом: на каждую строку приходит свой вектор в том же порядке. |
encoding_format | string | float или base64 — форма, в которой провайдер вернёт числа. Поле проходит на апстрим как есть. |
dimensions | integer | Требуемая длина вектора, если модель умеет её укорачивать. Поддержка зависит от модели. |
Пакет строк за один запрос
Поле 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: меняются только базовый адрес и ключ.
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))
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 текст, который я отправил?
Тело запроса попадает в технический лог ключа, как и у остальных эндпоинтов. Что именно хранится и сколько — написано в разделе о безопасности.