From 9a494407ee6cd8e6af4f96777ef00f339b1d7fa4 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Tue, 31 Oct 2023 10:27:29 +0100 Subject: [PATCH 1/2] fix(TextToImage): Consistently use the right method to get the preferred providers Signed-off-by: Marcel Klehr --- lib/private/TextToImage/Manager.php | 53 +++++++++++++---------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/lib/private/TextToImage/Manager.php b/lib/private/TextToImage/Manager.php index 1553fed75453a..a1f0f97b0c540 100644 --- a/lib/private/TextToImage/Manager.php +++ b/lib/private/TextToImage/Manager.php @@ -113,20 +113,7 @@ public function runTask(Task $task): void { if (!$this->hasProviders()) { throw new PreConditionNotMetException('No text to image provider is installed that can handle this task'); } - $providers = $this->getProviders(); - - $json = $this->config->getAppValue('core', 'ai.text2image_provider', ''); - if ($json !== '') { - try { - $className = json_decode($json, true, 512, JSON_THROW_ON_ERROR); - $provider = current(array_filter($providers, fn ($provider) => $provider::class === $className)); - if ($provider !== false) { - $providers = [$provider]; - } - } catch (\JsonException $e) { - $this->logger->warning('Failed to decode Text2Image setting `ai.text2image_provider`', ['exception' => $e]); - } - } + $providers = $this->getPreferredProviders(); foreach ($providers as $provider) { $this->logger->debug('Trying to run Text2Image provider '.$provider::class); @@ -232,22 +219,9 @@ public function runOrScheduleTask(Task $task) : void { if (!$this->hasProviders()) { throw new PreConditionNotMetException('No text to image provider is installed that can handle this task'); } - $providers = $this->getProviders(); - - $json = $this->config->getAppValue('core', 'ai.text2image_provider', ''); - if ($json !== '') { - try { - $id = json_decode($json, true, 512, JSON_THROW_ON_ERROR); - $provider = current(array_filter($providers, fn ($provider) => $provider->getId() === $id)); - if ($provider !== false) { - $providers = [$provider]; - } - } catch (\JsonException $e) { - $this->logger->warning('Failed to decode Text2Image setting `ai.text2image_provider`', ['exception' => $e]); - } - } + $providers = $this->getPreferredProviders(); $maxExecutionTime = (int) ini_get('max_execution_time'); - // Offload the tttttttask to a background job if the expected runtime of the likely provider is longer than 80% of our max execution time + // Offload the task to a background job if the expected runtime of the likely provider is longer than 80% of our max execution time if ($providers[0]->getExpectedRuntime() > $maxExecutionTime * 0.8) { $this->scheduleTask($task); return; @@ -331,4 +305,25 @@ public function getUserTasksByApp(?string $userId, string $appId, ?string $ident throw new RuntimeException('Failure while trying to find tasks by appId and identifier: ' . $e->getMessage(), 0, $e); } } + + /** + * @return IProvider[] + */ + private function getPreferredProviders() { + $providers = $this->getProviders(); + $json = $this->config->getAppValue('core', 'ai.text2image_provider', ''); + if ($json !== '') { + try { + $id = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + $provider = current(array_filter($providers, fn ($provider) => $provider->getId() === $id)); + if ($provider !== false && $provider !== null) { + $providers = [$provider]; + } + } catch (\JsonException $e) { + $this->logger->warning('Failed to decode Text2Image setting `ai.text2image_provider`', ['exception' => $e]); + } + } + + return $providers; + } } From ee76cc512ccb9dcc968345e821f50f65454fbaae Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Thu, 2 Nov 2023 12:07:10 +0100 Subject: [PATCH 2/2] fix(TextToImage): Always set completionExpectedAt in run/schedule methods Signed-off-by: Marcel Klehr --- lib/private/TextToImage/Manager.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/private/TextToImage/Manager.php b/lib/private/TextToImage/Manager.php index a1f0f97b0c540..f68f657277fbc 100644 --- a/lib/private/TextToImage/Manager.php +++ b/lib/private/TextToImage/Manager.php @@ -119,6 +119,9 @@ public function runTask(Task $task): void { $this->logger->debug('Trying to run Text2Image provider '.$provider::class); try { $task->setStatus(Task::STATUS_RUNNING); + $completionExpectedAt = new \DateTime('now'); + $completionExpectedAt->add(new \DateInterval('PT'.$provider->getExpectedRuntime().'S')); + $task->setCompletionExpectedAt($completionExpectedAt); if ($task->getId() === null) { $this->logger->debug('Inserting Text2Image task into DB'); $taskEntity = $this->taskMapper->insert(DbTask::fromPublicTask($task)); @@ -204,6 +207,9 @@ public function scheduleTask(Task $task): void { } $this->logger->debug('Scheduling Text2Image Task'); $task->setStatus(Task::STATUS_SCHEDULED); + $completionExpectedAt = new \DateTime('now'); + $completionExpectedAt->add(new \DateInterval('PT'.$this->getPreferredProviders()[0]->getExpectedRuntime().'S')); + $task->setCompletionExpectedAt($completionExpectedAt); $taskEntity = DbTask::fromPublicTask($task); $this->taskMapper->insert($taskEntity); $task->setId($taskEntity->getId());