aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/TextToImage
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2023-10-20 13:13:15 +0200
committerMarcel Klehr <mklehr@gmx.net>2023-10-20 13:13:15 +0200
commitb7fd5185b69be28338110cc1dc1655883d84c302 (patch)
tree66a1bcbeaf6e2415ce3201c763499ce157c73fb4 /lib/public/TextToImage
parent8968573d9fa0b9abac1dd5c7684dd94258a080cf (diff)
downloadnextcloud-server-b7fd5185b69be28338110cc1dc1655883d84c302.tar.gz
nextcloud-server-b7fd5185b69be28338110cc1dc1655883d84c302.zip
enh(TextToImage): Allow generating multiple images with one task
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
Diffstat (limited to 'lib/public/TextToImage')
-rw-r--r--lib/public/TextToImage/IProvider.php4
-rw-r--r--lib/public/TextToImage/Task.php33
2 files changed, 26 insertions, 11 deletions
diff --git a/lib/public/TextToImage/IProvider.php b/lib/public/TextToImage/IProvider.php
index 12cf39bb713..789a69ade67 100644
--- a/lib/public/TextToImage/IProvider.php
+++ b/lib/public/TextToImage/IProvider.php
@@ -43,12 +43,12 @@ interface IProvider {
* Processes a text
*
* @param string $prompt The input text
- * @param resource $resource The file resource to write the image to
+ * @param resource[] $resources The file resources to write the images to
* @return void
* @since 28.0.0
* @throws RuntimeException If the text could not be processed
*/
- public function generate(string $prompt, $resource): void;
+ public function generate(string $prompt, array $resources): void;
/**
* The expected runtime for one task with this provider in seconds
diff --git a/lib/public/TextToImage/Task.php b/lib/public/TextToImage/Task.php
index 545bd8bac5a..2f9869bc55a 100644
--- a/lib/public/TextToImage/Task.php
+++ b/lib/public/TextToImage/Task.php
@@ -25,7 +25,11 @@ declare(strict_types=1);
namespace OCP\TextToImage;
+use OCP\Files\AppData\IAppDataFactory;
+use OCP\Files\NotFoundException;
+use OCP\Files\NotPermittedException;
use OCP\IImage;
+use OCP\Image;
/**
* This is a text to image task
@@ -35,8 +39,6 @@ use OCP\IImage;
final class Task implements \JsonSerializable {
protected ?int $id = null;
- private ?IImage $image = null;
-
/**
* @since 28.0.0
*/
@@ -66,6 +68,7 @@ final class Task implements \JsonSerializable {
/**
* @param string $input
* @param string $appId
+ * @param int $numberOfImages
* @param string|null $userId
* @param null|string $identifier An arbitrary identifier for this task. max length: 255 chars
* @since 28.0.0
@@ -73,25 +76,36 @@ final class Task implements \JsonSerializable {
final public function __construct(
protected string $input,
protected string $appId,
+ protected int $numberOfImages,
protected ?string $userId,
protected ?string $identifier = '',
) {
}
/**
- * @return IImage|null
+ * @return IImage[]|null
* @since 28.0.0
*/
- final public function getOutputImage(): ?IImage {
- return $this->image;
+ final public function getOutputImages(): ?array {
+ $appData = \OC::$server->get(IAppDataFactory::class)->get('core');
+ try {
+ $folder = $appData->getFolder('text2image')->getFolder((string)$this->getId());
+ $images = [];
+ for ($i = 0; $i < $this->getNumberOfImages(); $i++) {
+ $images[] = new Image(base64_encode($folder->getFile((string) $i)->getContent()));
+ }
+ return $images;
+ } catch (NotFoundException|NotPermittedException) {
+ return null;
+ }
}
/**
- * @param IImage|null $image
+ * @return int
* @since 28.0.0
*/
- final public function setOutputImage(?IImage $image): void {
- $this->image = $image;
+ final public function getNumberOfImages(): int {
+ return $this->numberOfImages;
}
/**
@@ -159,7 +173,7 @@ final class Task implements \JsonSerializable {
}
/**
- * @psalm-return array{id: ?int, status: 0|1|2|3|4, userId: ?string, appId: string, input: string, identifier: ?string}
+ * @psalm-return array{id: ?int, status: 0|1|2|3|4, userId: ?string, appId: string, input: string, identifier: ?string, numberOfImages: int}
* @since 28.0.0
*/
public function jsonSerialize(): array {
@@ -168,6 +182,7 @@ final class Task implements \JsonSerializable {
'status' => $this->getStatus(),
'userId' => $this->getUserId(),
'appId' => $this->getAppId(),
+ 'numberOfImages' => $this->getNumberOfImages(),
'input' => $this->getInput(),
'identifier' => $this->getIdentifier(),
];