hubris

POST /v1/rerank

Отсортировать документы по запросу — реранкеры Cohere, Voyage, Qwen. Номера документов и оценка близости.

Реранкер получает запрос и список документов и возвращает их в порядке, в каком они отвечают на запрос: лучшие первыми, у каждого оценка relevance_score. Обычно его ставят после поиска: векторный или полнотекстовый поиск находит 50–100 кандидатов, реранкер выбирает из них несколько самых подходящих, и только они уходят в модель. Так ответ точнее, а запрос к модели короче.

Стрима нет: один POST → один JSON-ответ. Список реранкеров — в каталоге или запросом GET /v1/models?output_modalities=rerank.

Эндпоинт

POSThttps://api.hubris.pw/v1/rerank

Заголовки:

HeaderЗначение
AuthorizationBearer sk-gw-... (обязательно)
Content-Typeapplication/json (обязательно)

Тело запроса

ПолеТипПо умолчаниюОписание
modelstring—ID реранкера, например cohere/rerank-v3.5.
querystring—Запрос, по которому сортируются документы.
documentsarray—От 1 до 1000 документов: строки или объекты { "text": "…" }. Мультимодальные реранкеры принимают и { "image": "<URL или data URI>" }.
top_ninteger > 0всеСколько самых подходящих документов вернуть.
userstring—Идентификатор конечного пользователя для трекинга абьюза на стороне провайдера.

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

В OpenAI SDK метода для реранкинга нет — это обычный HTTP-запрос.

curl -s https://api.hubris.pw/v1/rerank \-H "Authorization: Bearer sk-gw-..." \-H "Content-Type: application/json" \-d '{  "model": "cohere/rerank-v3.5",  "query": "Как вернуть деньги за заказ?",  "documents": [    "Возврат оформляется в личном кабинете в разделе «Заказы».",    "Доставка по Москве занимает один день.",    "Деньги приходят на карту в течение 10 дней после возврата."  ],  "top_n": 2}'
import requestsres = requests.post(  "https://api.hubris.pw/v1/rerank",  headers={"Authorization": "Bearer sk-gw-..."},  json={      "model": "cohere/rerank-v3.5",      "query": "Как вернуть деньги за заказ?",      "documents": [          "Возврат оформляется в личном кабинете в разделе «Заказы».",          "Доставка по Москве занимает один день.",          "Деньги приходят на карту в течение 10 дней после возврата.",      ],      "top_n": 2,  },)for r in res.json()["results"]:  print(r["index"], round(r["relevance_score"], 3))
const res = await fetch("https://api.hubris.pw/v1/rerank", {method: "POST",headers: {  Authorization: `Bearer ${process.env.HUBRIS_API_KEY}`,  "Content-Type": "application/json",},body: JSON.stringify({  model: "cohere/rerank-v3.5",  query: "Как вернуть деньги за заказ?",  documents: [    "Возврат оформляется в личном кабинете в разделе «Заказы».",    "Доставка по Москве занимает один день.",    "Деньги приходят на карту в течение 10 дней после возврата.",  ],  top_n: 2,}),});const { results } = await res.json();console.log(results.map((r) => r.index)); // [0, 2]

Ответ

Ответ на пример выше (запрос 13.10.2026):

{
  "id": "gen-rerank-1791920607-d5ZkoUBZ7glBVswTgA2R",
  "model": "cohere/rerank-v3.5",
  "results": [
    {
      "index": 0,
      "relevance_score": 0.56690645,
      "document": { "text": "Возврат оформляется в личном кабинете в разделе «Заказы»." }
    },
    {
      "index": 2,
      "relevance_score": 0.2046759,
      "document": { "text": "Деньги приходят на карту в течение 10 дней после возврата." }
    }
  ],
  "usage": {
    "search_units": 1,
    "cost": 13
  }
}

Поля ответа

ПолеТипОписание
modelstringМодель, которая обработала запрос.
results[]arrayДокументы по убыванию близости к запросу, не больше top_n.
results[].indexintegerНомер документа во входном documents (с нуля).
results[].relevance_scorenumberОценка близости: чем больше, тем лучше. Шкала у моделей разная — сравнивайте оценки только внутри одного ответа.
results[].documentobjectСам документ, как он пришёл в запросе.
usage.search_unitsintegerПоисковые единицы — у моделей с оплатой за поиск.
usage.total_tokensintegerТокены входа — у моделей с оплатой за токены.
usage.costintegerСтоимость в копейках. Расширение Hubris.

HTTP-коды

КодКогда
200Успешный ответ.
400Тело запроса не соответствует схеме (нет query, пустой documents, больше 1000 документов).
401Ключ отсутствует, отозван или невалиден.
402Недостаточно средств на балансе.
404Модели нет в каталоге, она снята или это не реранкер — что именно, сказано в сообщении.
429Превышен лимит расхода ключа или дневной лимит бесплатных моделей.
502 / 503 / 504Сбой у провайдера, курса ЦБ или таймаут. Списания нет.

Формат тела ошибки и стратегия повторов — Ошибки.

Биллинг

Единица оплаты зависит от модели и указана на её карточке в каталоге:

  • за поиск — модели Cohere. Один поиск — запрос, в котором до 100 документов; 150 документов — уже два поиска;
  • за токены входа — остальные реранкеры: считаются запрос и все документы.

Списание — после успешного ответа, по фактической стоимости запроса; сумма попадает в usage.cost и в журнал запросов. За отклонённые запросы и сбои провайдера не списывается ничего. Бесплатные реранкеры работают и при нулевом балансе, в пределах дневного лимита.

Что дальше

Обновлено: