* Авторазметка товаров из 1С (ERP-292).
*
* Использование:
- * php yii auto-mark/run-new — разметить все товары без номенклатуры
+ * php yii auto-mark/run-new — разметить новые товары; если нет новых — запустить LLM-верификацию
* php yii auto-mark/run-product GUID — разметить конкретный товар
- * php yii auto-mark/apply PRED_ID — применить одобренное предсказание
+ * php yii auto-mark/apply PRED_ID — применить одобренное предсказание
+ * php yii auto-mark/verify-llm — запустить LLM-верификацию принудительно
*/
class AutoMarkController extends Controller
{
- public string $defaultAction = 'run-new';
+ public $defaultAction = 'run-new';
public function actionRunNew(): int
{
+ $service = new AutoMarkService();
+
$this->stdout("Запуск авторазметки новых товаров...\n");
+ $newCount = $service->batchPredict();
+ $this->stdout("Создано предсказаний: {$newCount}\n");
- $service = new AutoMarkService();
- $count = $service->batchPredict();
+ if ($newCount === 0) {
+ $pendingCount = $service->getPendingUnverifiedCount();
+ if ($pendingCount > 0) {
+ $this->stdout("Новых товаров нет. Запуск LLM-верификации ({$pendingCount} ожидают)...\n");
+ return $this->runLlmVerify($service);
+ }
+ $this->stdout("Нет новых товаров и нет ожидающих верификации.\n");
+ }
- $this->stdout("Создано предсказаний: {$count}\n");
return ExitCode::OK;
}
$this->stdout("Предсказание ID={$predictionId} применено.\n");
return ExitCode::OK;
}
+
+ public function actionVerifyLlm(): int
+ {
+ $service = new AutoMarkService();
+ $pendingCount = $service->getPendingUnverifiedCount();
+
+ if ($pendingCount === 0) {
+ $this->stdout("Нет предсказаний для LLM-верификации.\n");
+ return ExitCode::OK;
+ }
+
+ $this->stdout("Запуск LLM-верификации ({$pendingCount} предсказаний)...\n");
+ return $this->runLlmVerify($service);
+ }
+
+ private function runLlmVerify(AutoMarkService $service): int
+ {
+ try {
+ $verified = $service->llmBatchVerify();
+ $this->stdout("LLM верифицировано: {$verified}\n");
+ return ExitCode::OK;
+ } catch (\RuntimeException $e) {
+ $this->stderr("Ошибка LLM-верификации: {$e->getMessage()}\n");
+ return ExitCode::UNSPECIFIED_ERROR;
+ }
+ }
}