diff options
author | Marcel Klehr <mklehr@gmx.net> | 2023-10-31 10:27:29 +0100 |
---|---|---|
committer | Marcel Klehr <mklehr@gmx.net> | 2023-10-31 10:27:29 +0100 |
commit | 9a494407ee6cd8e6af4f96777ef00f339b1d7fa4 (patch) | |
tree | 3d613f55315716caf975bf620b46c862b0d645aa /lib | |
parent | 16bfe0cc65c3c4603c24d10c904c1aef39d5a9a2 (diff) | |
download | nextcloud-server-9a494407ee6cd8e6af4f96777ef00f339b1d7fa4.tar.gz nextcloud-server-9a494407ee6cd8e6af4f96777ef00f339b1d7fa4.zip |
fix(TextToImage): Consistently use the right method to get the preferred providers
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/TextToImage/Manager.php | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/lib/private/TextToImage/Manager.php b/lib/private/TextToImage/Manager.php index 1553fed7545..a1f0f97b0c5 100644 --- a/lib/private/TextToImage/Manager.php +++ b/lib/private/TextToImage/Manager.php @@ -113,20 +113,7 @@ class Manager implements IManager { 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 @@ class Manager implements IManager { 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 @@ class Manager implements IManager { 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; + } } |