Перевірка бюджету

Вузол, який питає, чи вкладається майбутній виклик моделі в політики, бюджети і, якщо ви її задали, власну алокацію вузла, — і розгалужує виконання до того, як зарезервовано будь-які гроші.

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. Перевірка під час публікації попереджає про такий вузол — Порти й розгалуження.

Вихід

Коли виклик було б дозволено, вузол залишає те, що прочитав:

JSON
{
  "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 каже, хто відмовив, — політики й бюджети чи алокація вузла:

JSON
{ "allowed": false, "error_code": "budget_exceeded", "denied_by": "policy" }
JSON
{ "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