]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
feat(ERP-292): консольная команда verify-llm, триггер в run-new
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 30 Apr 2026 15:24:16 +0000 (18:24 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 30 Apr 2026 15:24:16 +0000 (18:24 +0300)
erp24/commands/AutoMarkController.php

index b48c661329b08fce26dd2d47d42d93314822c0e6..72a1b101f0f9d31e887185634a065bdf1c91bbf4 100644 (file)
@@ -12,22 +12,32 @@ use yii_app\services\AutoMarkService;
  * Авторазметка товаров из 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;
     }
 
@@ -58,4 +68,30 @@ class AutoMarkController extends Controller
         $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;
+        }
+    }
 }