Decider от Perplexity
Модель решений от Perplexity: не пишет текст, а отвечает на вопросы о ваших данных числами — вероятность, выбранный вариант, оценка по шкале. Читает текст, JSON и картинки. 2,44 ₽ за 1M входных токенов, выходные бесплатно.
Запрос: POST /openrouter/api/alpha/decisions
Decider не чат-модель, поэтому эндпоинт свой — путь Decisions API OpenRouter с префиксом
/openrouter, без /v1. Ключ тот же, что для остальных моделей,
отдельный ключ OpenRouter или Perplexity не нужен. Запрос к /v1/chat/completions с этой
моделью не работает.
https://api.tokendock.cloud/openrouter/api/alpha/decisions | Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| model | string | да | Идентификатор модели — perplexity/pplx-decider-v1.2. |
| state | string · object · array | да | Данные, о которых задаются вопросы: текст, JSON или массив из текста и картинок. |
| questions | object | да | Вопросы по именам, от 1 до 128. Имя вопроса — ключ, под ним же придёт ответ. |
Формат тот же, что у Jev от TypeSafe, — вопросы можно переносить между моделями без изменений. Полное описание полей — в справочнике Decisions API OpenRouter.
Вопросы
Каждый вопрос в questions — объект из трёх полей.
| Поле | Описание |
|---|---|
| type | Тип вопроса — noul, choice или score. |
| instructions | Сам вопрос — текст или JSON. Обязателен для всех типов. |
| criteria | Для choice — объект вариантов от 1 до 255, описание варианта может быть null. Для score — массив уровней от худшего к лучшему, от 2 до 10. Для noul — необязательный объект с описанием true и false. |
| Тип | Что приходит в ответе | Пример вопроса |
|---|---|---|
| noul | noul — вероятность «да» от 0 до 1 | Сообщает ли клиент об ошибке в продукте |
| choice | choice — выбранный вариант, probabilities — вероятность каждого, confidence | Какой команде отдать обращение — оплата, доставка, аккаунт |
| score | score — ожидаемая позиция на шкале от 0, probabilities по уровням, legend, confidence | Насколько срочное обращение — от «подождёт» до «горит» |
Примеры
Три вопроса разных типов об одном обращении в поддержку.
curl https://api.tokendock.cloud/openrouter/api/alpha/decisions \
-H "Authorization: Bearer $TOKENDOCK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "perplexity/pplx-decider-v1.2",
"state": { "ticket": "После нажатия «Оплатить» страница становится белой. Пробовал два браузера." },
"questions": {
"is_bug": {
"type": "noul",
"instructions": "Is the customer in `ticket` reporting a software defect?"
},
"team": {
"type": "choice",
"instructions": "Which team should own this ticket?",
"criteria": {
"payments": "Checkout, billing or payment processing issues",
"delivery": "Shipping and delivery issues",
"account": "Login, permissions or profile issues"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this ticket?",
"criteria": ["Can wait for the next release", "Should be fixed this week", "Blocking revenue right now"]
}
}
}' Тот же запрос из Python — обычный HTTP, SDK не нужен.
import os
import requests
response = requests.post(
"https://api.tokendock.cloud/openrouter/api/alpha/decisions",
headers={"Authorization": f"Bearer {os.environ['TOKENDOCK_API_KEY']}"},
json={
"model": "perplexity/pplx-decider-v1.2",
"state": {"ticket": "После нажатия «Оплатить» страница становится белой."},
"questions": {
"is_bug": {"type": "noul", "instructions": "Is the customer in `ticket` reporting a defect?"},
},
},
timeout=90,
)
response.raise_for_status()
print(response.json()["answers"]["is_bug"]["noul"]) Картинки
Картинку передают элементом массива state рядом с текстом — в формате
image_url, как в Chat Completions. Подходит только base64 data URL с типом
image/png, image/jpeg или image/webp: ссылки
http(s) модель не загружает. Картинка считается входными токенами — около 1 000 токенов на мегапиксель.
{
"model": "perplexity/pplx-decider-v1.2",
"state": [
"Объявление: красная квадратная наклейка",
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." } }
],
"questions": {
"matches_title": { "type": "noul", "instructions": "The photo shows the item from the listing title." },
"color": {
"type": "choice",
"instructions": "What color is the item?",
"criteria": { "red": null, "green": null, "blue": null }
}
}
} Ответ
Настоящий ответ на запрос из примера, числа округлены.
{
"answers": {
"is_bug": { "type": "noul", "noul": 0.9972 },
"team": {
"type": "choice",
"choice": "payments",
"confidence": 0.9965,
"probabilities": { "account": 0.0006, "delivery": 0.0017, "payments": 0.9977 }
},
"urgency": {
"type": "score",
"score": 1.9585,
"confidence": 0.9585,
"legend": {
"0": "Can wait for the next release",
"1": "Should be fixed this week",
"2": "Blocking revenue right now"
},
"probabilities": { "0": 0.0031, "1": 0.0353, "2": 0.9616 }
}
},
"id": "gen-dec-...",
"model": "perplexity/pplx-decider-v1.2-20261016",
"provider": "Perplexity",
"usage": { "input_tokens": 207, "output_tokens": 3 }
} -
answers— ответы под именами вопросов, у каждого полеtype. -
У
scoreпозиция считается от нуля:1.9956на шкале из трёх уровней — почти верхний уровень.legendповторяет уровни из запроса. -
usage.input_tokens— то, за что списываются деньги.output_tokensв ответе есть, но не оплачивается.
Ошибки приходят в формате OpenRouter, например на вопрос неизвестного типа:
{ "error": { "code": 400, "message": "Each question must have type noul, choice or score" } } Тарификация
Decider стоит 2,44 ₽ за 1M входных токенов, выходные бесплатны — так же считает
OpenRouter. В токены входят state, все вопросы и картинки. Цена в рублях следует за
курсом, как у остальных моделей каталога.
- Запрос из примера — 207 токенов, около 0,0005 ₽.
- На время запроса с баланса резервируется стоимость 262 144 токенов — около 0,64 ₽. После ответа списываются только фактические входные токены.
- Отклонённый запрос не тарифицируется.
-
В журнале запросов
prompt_tokensравен 0, объём запроса — в деталях записи,input_tokens.
Ограничения
-
До 262 144 токенов на запрос вместе с
state, вопросами и картинками. - Streaming нет — ответ приходит целиком. Большой запрос около предела контекста считается до 20–30 секунд.
-
Порядок полей в объекте
stateне сохраняется — шлюз передаёт их по алфавиту. Если порядок важен, передавайтеstateмассивом. - Perplexity не указывает, на каких языках обучена модель. Русские данные проверяйте на своих примерах, а инструкции и варианты ответа надёжнее писать на английском.
Числа удобно сравнивать с порогом прямо в коде: например, отправлять обращение человеку, когда
noul ниже 0,8 или confidence у choice
ниже 0,9.