Запустіть флоу й прочитайте відповідь
PHPЗапустіть флоу з його входом, клієнтом, для якого він виконується, і контекстом виклику та прочитайте кожне поле виконання, яке повернеться.
6 хв читання
Запуск називає код операції, передає флоу його вхід і, коли це потрібно, клієнта, для якого він виконується, і контекст виклику. Slen виконує флоу, прив’язаний до коду, і відповідає виконанням. Ця сторінка показує, що входить у виклик і що повертається; найкоротший шлях до першої відповіді — стаття Швидкий старт.
Надіслати запит
use Slen\Sdk\Modules\Operations\Options\ExecuteOptions;
$execution = $slen->operations()->execute(
'generate_email',
['messages' => [['role' => 'user', 'content' => 'Write a short follow-up email to Ada.']]],
new ExecuteOptions(customer: 'user_8421', context: ['plan' => 'pro'], idempotencyKey: 'order-57:email'),
);Перший аргумент — код операції. Його прив’язують до флоу в налаштуваннях флоу — як, каже стаття AI-флоу.
Другий аргумент — вхід флоу, який його вузли читають під
input. Це об’єкт, і порожній об’єкт допустимий. Флоу з вузлом AI-модель потрібен непорожнійinput.messages, коли він доходить до цього вузла. Без них виконання закінчується з кодомinvalid_flow_input.Клієнт називає вашого користувача, для якого виконується запуск, — нижче.
Ключ ідемпотентності називає одиницю роботи. Чим відповідають на повтор під ним, каже стаття Ключі ідемпотентності.
Клієнт, тип кредитів, контекст і ключ — іменовані аргументи ExecuteOptions, останнього аргументу виклику, поруч із timeout і retries — Повтори й тайм-аути.
Клієнт і контекст
Клієнт — ваш користувач, для якого виконується запуск: зовнішній ідентифікатор, із яким ви створили клієнта. SDK надсилає його як
context.user_id. Тоді виклики моделей у флоу робляться для цього клієнта: діють бюджет, заданий для клієнта, і політика з умовою на клієнта, а платить клієнт своїми кредитами, коли проєкт має ціну в кредитах для операції, — Клієнти та кредити.Тип кредитів називає рахунок клієнта, який платить. SDK надсилає його як
context.credit_type; без нього це рахунокdefault.Контекст несе все інше, що флоу має знати й не отримує у вході: тариф вашого клієнта, регіон запиту. Це плаский об’єкт до 64 значень. Значення — рядок, число, булеве значення або
null, а весь контекст — не більше 16 384 байт у JSON.Вузли флоу читають значення контексту за його шляхом,
context.<name>. Вузол Умова може розгалужуватися заcontext.plan.Slen обрізає пробіли на краях рядкового значення контексту, а рядок, що лишився порожнім, стає
null. Вхід не змінюється: він доходить до флоу таким, яким ви його надіслали.
Контекст, чий user_id називає не того клієнта, якого ви передаєте, порожній клієнт і порожній тип кредитів відхиляються до надсилання запиту, з кодом invalid_request. Запит для заблокованого клієнта відхиляється з customer_blocked, і нічого не виконується.
Прочитати відповідь
echo match (true) {
$execution->isCompleted() => $execution->output['content'],
$execution->isRejected() => "Refused: {$execution->errorCode} — {$execution->errorMessage}",
$execution->isPending() => "Not over yet: {$execution->status->value}. Read it again in {$execution->retryAfterSeconds} s.",
default => "Did not complete: {$execution->status->value}, {$execution->errorCode}",
}, PHP_EOL;Виклик повертає виконання. Його status каже, чим закінчився запит або що він ще не закінчився, — кожен статус перелічує розділ Що каже відповідь.
| Поле | Що в ньому |
|---|---|
execution_id | Ідентифікатор виконання. Його приймають читання статусу й трасування |
status | Чим закінчився запит або що він ще не закінчився |
operation | Код операції, який назвав запит |
output | Те, що повернув флоу, коли статус — completed. Інакше null |
error_code | Чому закінчилося виконання, яке не завершилося |
error_message | Та сама причина фразою для людини. Показуйте її або пишіть у лог; розгалужуйтеся за error_code |
error | error_code і error_message одним об’єктом, коли виконання має повідомлення |
cost | estimated — скільки, як очікувалося, коштуватимуть виклики моделей, разом. actual — скільки вони коштували |
cache | hit дорівнює true, коли output узято з кешу, а cached_at каже, коли цю відповідь збережено |
replayed | true, коли відповідь належить виконанню, яке почав раніший запит під тим самим ключем |
waiting_on | Чого чекає виконання зі статусом waiting |
retry_after_seconds | Скільки зачекати, перш ніж знову читати статус. Лише поки виконання не закінчилося |
trace_url | Шлях трасування виконання в API |
ExecutionDTO має ці поля як властивості в camel case: executionId, status — це ExecutionStatus, — operationCode, output, errorCode, errorMessage, error, cost, cache, replayed, waitingOn, retryAfterSeconds і traceUrl. isCompleted(), isRejected(), isPending() і isFinished() читають статус — Об’єкти відповіді.
cost.actualприходить після відповіді. Розрахунок за виклики моделей виконання йде у фоні, коли воно закінчується, тому синхронна відповідь несеnull, а пізніше читання — читання статусу, повтор ключа — несе суму.За відповідь із кешу заплатив виклик, який її отримав.
cost.actualлишаєтьсяnull, якщо флоу не викликав модель окрім цього.Після відмови
cost.estimated— не витрата. Виконання зі статусомrejectedнесе оцінку відхиленого виклику — витрату, якій відмова запобігла, — абоnull, коли відмова не назвала оцінки.
Відмова і збій
Флоу, який відмовляє, відповідає як будь-який інший: вузол Відхилити запит закінчує виконання зі статусом
rejected, із кодом і повідомленням, які дав йому автор. Виклик повертає виконання й нічого не кидає.isRejected()відрізняє таку відповідь від завершеної.Відмова платформи дорогою — бюджет, політика, кредити клієнта, заблокований клієнт — кидається як помилка, коли флоу її не спрямовує. Виконання закривається з тим самим кодом. Вузол моделі зі зв’язком на порті Відмова натомість спрямовує відмову у флоу, і флоу вирішує, що почує той, хто викликає.
Помилка, яка не є відмовою, — у вході немає
messages, провайдер упав, а флоу цього не спрямовує, — теж кидається. Виконання закривається зі статусомfailedабоuncertain, коли відповідь провайдера втрачено.
Якщо прочитати таке виконання пізніше — читанням статусу, очікуванням, повтором ключа, — воно повернеться відповіддю, зі своїм статусом і error_code, а не помилкою.
Як перехопити відмову платформи в обох її формах, показує стаття Коли витрату відхилено, а будь-яку іншу помилку SDK — стаття Обробка помилок.
Коли відповідь не остаточна
На флоу, який зупинився на вузлі, що чекає, відповідають
202і статусомwaiting. Виклик повертається без помилки, а результат читають пізніше — Асинхронні запуски й очікування.Флоу, який виконується довше за тайм-аут клієнта, не виконується двічі. SDK надсилає запит ще раз під тим самим ключем, і відповідь — виконання як є:
running, поки воно триває, і його результат, коли воно закінчилося.
Що читати далі
Ключі ідемпотентності — чим відповідають на повтор запиту.
Асинхронні запуски й очікування — запустіть флоу у фоні й дочекайтеся його результату.
Клієнти та кредити — створіть клієнта, якого називає запуск, і поповніть його кредити.
Операції — той самий запит через HTTP.