Проверка бюджета
Узел, который спрашивает, укладывается ли предстоящий вызов модели в политики, бюджеты и, если вы её задали, собственную аллокацию узла, — и ветвит выполнение до того, как зарезервированы какие-либо деньги.
5 мин чтения
Проверка бюджета спрашивает, был бы разрешён предстоящий вызов модели, до того как зарезервированы какие-либо деньги. Если ответ — да, выполнение идёт к вызову. Если нет, выполнение уходит на ветку Отказ, и флоу решает, что услышит вызывающий.
- Узел
- Проверка бюджета
- Тип
budget_check- Категория
- Деньги
- Порты
- Разрешить
defaultподключение обязательно - Отказ
denyподключение необязательно
- Разрешить
- Завершает путь
- Нет
Что делает узел
Узел оценивает вызов узла AI-модель, к которому ведёт его цепочка, так же, как будет оцениваться холд этого вызова. Затем он проверяет вызов одним из двух способов — его задаёт Какой бюджет проверять.
Глобальная политика — так проверяет новый узел. Узел применяет политики и читает денежные бюджеты, под которые попадает вызов: организации, проекта, операции и вашего клиента. Если холд поместился бы, выполнение выходит через Разрешить. Если отказывает политика или в бюджете нет места для холда, оно выходит через Отказ с
policy_deniedилиbudget_exceeded.Аллокация узла. Узел сначала проверяет, как описано выше, и отказ этой проверки главнее. Затем он проверяет вызов по собственному лимиту для модели, к которой ведёт цепочка: то, во что обошлись вызовы после этого узла, считая по их оценкам, вместе с холдом этого вызова должно укладываться в лимит. Модель без своей строки получает лимит по умолчанию, а без лимита по умолчанию проходит без лимита узла. Отказ аллокации уходит на Отказ с
budget_exceeded.
Узел только читает и ничего не резервирует. Три ограничения оставлены вызову модели — он проверяет их, когда берёт холд: бюджет На операцию, Одновременные резервы бюджета и кредиты вашего клиента. Поэтому у AI-модель есть свой порт Отказ. Под нагрузкой узел может ещё и пропустить вызов, холд которого потом будет отклонён.
Когда вызов оценить нельзя, узел пропускает выполнение, и решает вызов модели.
Когда использовать
Чтобы отказать до того, как зарезервированы деньги, и выбрать, что будет дальше: модель подешевле через Запасной путь, ответ из кеша, отказ со своим кодом через Отклонить запрос.
Чтобы дать одному флоу долю денег на каждую модель отдельно от бюджетов проекта: задайте аллокацию узла.
Отказ этого узла не отправляет событий вебхуков. operation.denied отправляется, когда сам вызов модели отклонён политикой или бюджетом.
Выполнение, которое закончилось как rejected после отказа узла, хранит в cost.estimated оценку отклонённого вызова: деньги, которые отказ сберёг, а не потраченные. Ветка Отказ, которая отвечает без вызова модели, заканчивается как completed с той же оценкой и без фактической стоимости.
Настройки
| Настройка | Для чего она |
|---|---|
mode | Что проверяет узел — policy, политики и бюджеты, под которые попадает вызов, или node, то же самое и затем аллокацию узла. Новый узел проверяет policy. |
window | Период, в котором считается аллокация, — daily, monthly или total. Читается только при аллокации. Без него — monthly. |
allocations | Строки аллокации, по одной на модель, — код модели и лимит, десятичное число, записанное текстом, например 25.00. Модель встречается не больше чем в одной строке. Читается только при аллокации. |
default_limit | Лимит модели, у которой нет своей строки, — десятичное число, записанное текстом. Необязателен. Без него такая модель проходит без лимита узла. Читается только при аллокации. |
В конструкторе Какой бюджет проверять выбирает между вариантом Глобальная политика и аллокацией узла. Когда выбрана аллокация, Окно задаёт период, в котором считается лимит, а Добавить аллокацию добавляет строку: модель и её лимит. Панель отмечает действующую строку — строку модели, к которой ведёт узел. Лимит по умолчанию для модели без строки необязателен.
То, что считает аллокация, относится к этому узлу этого флоу и к одной модели и окну. Лимит — десятичное число с точкой и без знака валюты, например 25.00.
Порты
| Порт | Выполнение выходит через него, когда |
|---|---|
| Разрешить | Вызов был бы разрешён. Обязательный |
| Отказ | Вызов отклонён. Необязательный |
Когда у Отказ нет связи, отказ становится ответом на запрос: вызывающий получает budget_exceeded или policy_denied, а выполнение заканчивается как rejected. Проверка при публикации предупреждает о таком узле — Порты и ветвление.
Выход
Когда вызов был бы разрешён, узел оставляет то, что прочитал:
{
"allowed": true,
"available": "24.50000000",
"would_reserve": "0.00057600",
"node_budget": "within_limit",
"node_budget_limit": "25.00000000",
"node_budget_spent": "3.12000000"
}would_reserve— холд, который взял бы вызов, аavailable— то, что осталось в самом тесном из бюджетов, под которые попадает вызов.availableнет, когда под вызов не попадает ни один бюджет.Три поля
node_budgetесть только при аллокации.node_budgetговорит, как прочитана аллокация: здесь — в пределах лимита, а иначе — что у модели нет строки или что вызов не удалось оценить.
Когда узел отказывает, denied_by говорит, кто отказал, — политики и бюджеты или аллокация узла:
{ "allowed": false, "error_code": "budget_exceeded", "denied_by": "policy" }{ "allowed": false, "error_code": "node_budget_exceeded", "denied_by": "node_allocation" }Узел Условие на ветке Отказ читает их по пути nodes.<key>.output.denied_by, где <key> — ключ этого узла во флоу. Код, который вызывающий получает за отклонённую аллокацию, — budget_exceeded; node_budget_exceeded остаётся в выходе и в трассировке.
Ошибки
Настройки узла проверяются при проверке флоу и при его публикации.
В API запись issues называет такую проверку в params.detail; её code — invalid_node_config.
| Проверка | Сообщение в конструкторе |
|---|---|
budget_check_unsupported_mode | «{node}» использует несуществующий режим бюджета. |
budget_check_unsupported_window | «{node}» использует несуществующее окно бюджета. |
budget_check_invalid_default_limit | Лимит по умолчанию «{node}» — недопустимая сумма. |
budget_check_allocations_not_list | Аллокации «{node}» должны быть списком. |
budget_check_needs_allocation | Узлу «{node}» нужна хотя бы одна аллокация или лимит по умолчанию. |
budget_check_allocation_not_object | У «{node}» есть аллокация, которая не является объектом. |
budget_check_allocation_without_model | У «{node}» есть аллокация без выбранной модели. |
budget_check_duplicate_model | «{node}» выделяет бюджет на {model} дважды. |
budget_check_invalid_limit | Лимит для {model} на «{node}» — недопустимая сумма. |
budget_check_unknown_model | Модели {model} нет в каталоге. |
Проверяется и место узла: он ведёт ровно к одному AI-модель — Финансовая цепочка.
Пример
- Запрос — По умолчанию → Проверка бюджета
- Проверка бюджета — Разрешить → AI-модель
- AI-модель — Успех → Вернуть ответ
- Проверка бюджета — Отказ → Отклонить запрос
Проверка бюджета спрашивает, укладывается ли вызов. Если да, AI-модель резервирует деньги и вызывает модель. Если нет, Отклонить запрос завершает запрос с кодом, который выбрал его автор, и никаких денег не было зарезервировано.
См. также
Финансовая цепочка — узлы вокруг вызова модели и порядок, в котором они стоят.
Бюджеты — бюджеты, которые читает узел.
Политики — правила, которые могут отклонить вызов.
Когда трата отклонена — что получает ваше приложение за отклонённый запрос.
Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d