aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2023-10-31 10:27:29 +0100
committerMarcel Klehr <mklehr@gmx.net>2023-10-31 10:27:29 +0100
commit9a494407ee6cd8e6af4f96777ef00f339b1d7fa4 (patch)
tree3d613f55315716caf975bf620b46c862b0d645aa /lib
parent16bfe0cc65c3c4603c24d10c904c1aef39d5a9a2 (diff)
downloadnextcloud-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.php53
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;
+ }
}