---
name: yourstack-route
description: Выбирает, какую чат-модель Yourstack звать для задачи: доступную, среднюю или сильную, и затем получает ответ. Use when a task should be routed to a cheaper or stronger chat model before answering.
---

# Выбор модели

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

Навык вызывает JEV — бесплатную модель Yourstack, которая выбирает из вариантов. Она не пишет текст. На каждый вопрос возвращает долю только тех вариантов, которые перечислены ниже.

## Ключ

Возьми ключ из переменной окружения `YOURSTACK_API_KEY`. Если её нет, один раз спроси ключ у пользователя. Не записывай ключ в файлы проекта и не повторяй его в ответе.

Адрес API: `https://yourstack.ru`

## Предел

Вызовы `POST /v1/decisions` бесплатны, лимита на их число нет. Если модель перегружена и вернула 429, подожди несколько секунд и повтори тот же вызов. Вход длиннее 32000 токенов сервис отклонит, обрезать его он не будет.

## Вопросы

Задавай их по порядку, каждый отдельным вызовом. Формулировки и варианты не меняй. Свой вариант не добавляй.

### Какую модель звать

Ключ вопроса: `model`

Вопрос, дословно: Какой модели отдать эту задачу?

Варианты, дословно:

- id `easy`: Короткая задача: посчитать, перефразировать, ответить в одно-два предложения. Хватит доступной модели.
- id `normal`: Обычный текст: письмо, план, объяснение, список. Нужна средняя модель.
- id `hard`: Сложная задача: проектирование, много условий, оценка рисков, большой разбор. Нужна сильная модель.

## Вызов

`POST https://yourstack.ru/v1/decisions`

Заголовки: `Authorization: Bearer <ключ>`, `Content-Type: application/json`.

Тело:

```json
{
  "state": "<текст одного обращения или одной задачи>",
  "question": "<вопрос дословно>",
  "options": [
    {"id": "<id>", "description": "<описание дословно>"}
  ]
}
```

В ответе `choice` — id ближайшего варианта. У каждого варианта в `options` есть `probability` от 0 до 1.

Доля — это не уверенность модели и не обещание, что выбор верный. Если у ближайшего варианта probability ниже 0,6, пометь вопрос как «неясно» и не принимай решение автоматически.

## Что сделать после выбора

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

Соответствие:

- `easy` → модель чата `deepseek-v4-flash`
- `normal` → модель чата `glm-5.3-flash`
- `hard` → модель чата `claude-sonnet-5`

Если ближайшая доля ниже порога, возьми `glm-5.3-flash`, а не самый большой вариант.

Чат: `POST /v1/chat/completions` с тем же ключом.

```json
{
  "model": "<id модели из соответствия>",
  "messages": [{"role": "user", "content": "<исходная задача>"}]
}
```

Текст задачи уходит поставщику выбранной модели. Обработка может быть трансграничной. Списание за чат приходит в заголовках `X-Yourstack-Cost-Rub` и `X-Yourstack-Balance-Rub`.


## Что ответить пользователю

Не подменяй ответ модели своей догадкой. Если вызов не удался, так и скажи. В конце укажи, сколько было вызовов JEV. Они бесплатны. Если навык вызывал чат, назови сумму из заголовка `X-Yourstack-Cost-Rub`.
