Виклик моделі з невідомим результатом
PHPЯк SDK повідомляє, що провайдера викликали, а його відповідь втрачено, що Slen робить із грошима і як повторити запуск, не заплативши двічі.
3 хв читання
Іноді провайдера викликано, а його відповідь так і не повертається: провайдер не відповів вчасно або взяв виклик на виконання у фоні, і запитати про нього більше не можна. Ніхто не знає, чи було зроблено виклик, тому за нього могли заплатити. SDK повідомляє про це власним типом, а виконання — статусом uncertain. Ця сторінка каже, де трапляється такий результат і що з ним робити.
Де він трапляється
Запуск.
operations.execute()кидаєOperationUncertainErrorу Node.js іOperationUncertainExceptionу PHP, із кодомoperation_uncertain. Виконання закривається зі статусомuncertainі тим самим кодом.Читання пізніше. Виконання, прочитане через
executions.wait(), читанням статусу або повтором запуску під його ключем, повертається відповіддю зі статусомuncertain, а не помилкою. Так само закінчується запуск, надісланий в асинхронному режимі, якщо провайдер виконував виклик моделі у фоні й запитати про нього більше не можна.
ProviderError і ProviderException із кодом, який каже, що виклик не вдався цілком, — provider_error, provider_unavailable, provider_rate_limit, provider_timeout, provider_not_configured, pool_exhausted — повернули гроші виклику. Той самий тип із будь-яким іншим кодом або без коду не каже, як далеко зайшов виклик: вважайте це теж невідомим результатом — Обробка помилок.
Що робить Slen
Slen не робить виклик ще раз, а SDK сам не надсилає запуск ще раз:
504він не повторює ніколи.Гроші, зарезервовані під виклик, не повертаються одразу, бо провайдерові могли заплатити. Вони лишаються в резерві, поки холд не мине, — коли, каже стаття Як працює резервування бюджету, — і доти враховуються в бюджетах.
Slen нічого не списує за виклик: він не дізнався, що виклик витратив.
cost.actualвиконання цей виклик не враховує.Вебхук-подія
operation.uncertainповідомляє про виклик — Вебхуки.
Повторити запуск під його ключем
Збережіть ключ ідемпотентності запуску, результат якого невідомий. Під новим ключем той самий запуск стає новим, і за виклик моделі можуть заплатити вдруге.
use Slen\Sdk\Exceptions\OperationUncertainException;
use Slen\Sdk\Modules\Operations\Options\ExecuteOptions;
$input = ['messages' => [['role' => 'user', 'content' => 'Write a short follow-up email.']]];
$key = 'order-42:email';
try {
$execution = $slen->operations()->execute('generate_email', $input, new ExecuteOptions(idempotencyKey: $key));
echo $execution->status->value, PHP_EOL;
} catch (OperationUncertainException $error) {
// A provider was called and its answer was lost: the call may have been paid for.
// Keep the key. Under a new one the same request may pay for the call a second time.
echo 'outcome unknown: ', $error->errorCode, PHP_EOL;
}Запуск, надісланий ще раз під тим самим ключем, нічого не виконує: відповіддю на нього буде виконання, яке відкрив перший запит, у його теперішньому стані.
use Slen\Sdk\Modules\Operations\Enums\ExecutionStatus;
// The same request under the same key runs nothing: it reads the execution the first one opened.
$again = $slen->operations()->execute('generate_email', $input, new ExecuteOptions(idempotencyKey: $key));
if ($again->status === ExecutionStatus::Uncertain) {
echo $again->status->value, ': ', $again->errorCode, PHP_EOL;
}Чи виконувати роботу знову під новим ключем — вирішувати вам: тоді за потрібну вам відповідь, можливо, заплатять двічі.
Дізнатися, що сталося
У трасуванні виконання є подія
uncertainна вузлі AI-модель, який зробив виклик: її читаєexecutions.trace().Виклики моделей проєкту зберігають свої спроби в провайдерів: яке підключення, яка модель, скільки чекали. Виведіть операції проєкту зі статусом
uncertain, щоб знайти кожен такий виклик, — Операції.Власний кабінет провайдера каже, чи виставив він рахунок за виклик.
Що читати далі
Обробка помилок — які помилки кажуть, що запуск міг коштувати грошей.
Ключі ідемпотентності — чим відповідають на повтор під ключем.
Асинхронні запуски й очікування — статуси виконання, яке не закінчилося.
Коди помилок —
operation_uncertainі що з ним робити.