From 1a1ba661126beab51fa400517104e6bf683818a8 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 13 May 2026 09:59:27 +0200 Subject: [PATCH 1/2] feat(TaskProcessing): Create task types Signed-off-by: Marcel Klehr --- .../AudioClassificationTaskType.php | 72 +++++++++++++++++++ .../ImageClassificationTaskType.php | 72 +++++++++++++++++++ .../ImageFaceRecognitionTaskType.php | 72 +++++++++++++++++++ .../VideoClassificationTaskType.php | 72 +++++++++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 lib/TaskProcessing/AudioClassificationTaskType.php create mode 100644 lib/TaskProcessing/ImageClassificationTaskType.php create mode 100644 lib/TaskProcessing/ImageFaceRecognitionTaskType.php create mode 100644 lib/TaskProcessing/VideoClassificationTaskType.php diff --git a/lib/TaskProcessing/AudioClassificationTaskType.php b/lib/TaskProcessing/AudioClassificationTaskType.php new file mode 100644 index 00000000..2a816204 --- /dev/null +++ b/lib/TaskProcessing/AudioClassificationTaskType.php @@ -0,0 +1,72 @@ +l->t('Audio classification'); + } + + /** + * @inheritDoc + */ + public function getDescription(): string { + return $this->l->t('Classify audios into categories.'); + } + + /** + * @return string + */ + public function getId(): string { + return self::ID; + } + + /** + * @return ShapeDescriptor[] + */ + public function getInputShape(): array { + return [ + 'input' => new ShapeDescriptor( + $this->l->t('Audios'), + $this->l->t('Provide audios to classify'), + EShapeType::ListOfAudios, + ), + ]; + } + + /** + * @return ShapeDescriptor[] + */ + public function getOutputShape(): array { + return [ + 'output' => new ShapeDescriptor( + $this->l->t('Categories'), + $this->l->t('The classified categories. Each input audio is mapped to a text containing a comma separated list of categories.'), + EShapeType::ListOfTexts, + ), + ]; + } +} diff --git a/lib/TaskProcessing/ImageClassificationTaskType.php b/lib/TaskProcessing/ImageClassificationTaskType.php new file mode 100644 index 00000000..17c7cab4 --- /dev/null +++ b/lib/TaskProcessing/ImageClassificationTaskType.php @@ -0,0 +1,72 @@ +l->t('Image classification'); + } + + /** + * @inheritDoc + */ + public function getDescription(): string { + return $this->l->t('Classify images into categories.'); + } + + /** + * @return string + */ + public function getId(): string { + return self::ID; + } + + /** + * @return ShapeDescriptor[] + */ + public function getInputShape(): array { + return [ + 'input' => new ShapeDescriptor( + $this->l->t('Images'), + $this->l->t('Provide images to classify'), + EShapeType::ListOfImages, + ), + ]; + } + + /** + * @return ShapeDescriptor[] + */ + public function getOutputShape(): array { + return [ + 'output' => new ShapeDescriptor( + $this->l->t('Categories'), + $this->l->t('The classified categories. Each input image is mapped to a text containing a comma separated list of categories.'), + EShapeType::ListOfTexts, + ), + ]; + } +} diff --git a/lib/TaskProcessing/ImageFaceRecognitionTaskType.php b/lib/TaskProcessing/ImageFaceRecognitionTaskType.php new file mode 100644 index 00000000..1cb71b01 --- /dev/null +++ b/lib/TaskProcessing/ImageFaceRecognitionTaskType.php @@ -0,0 +1,72 @@ +l->t('Image face recognition'); + } + + /** + * @inheritDoc + */ + public function getDescription(): string { + return $this->l->t('Recognize faces in images and return embedding vectors for each face.'); + } + + /** + * @return string + */ + public function getId(): string { + return self::ID; + } + + /** + * @return ShapeDescriptor[] + */ + public function getInputShape(): array { + return [ + 'input' => new ShapeDescriptor( + $this->l->t('Images'), + $this->l->t('Provide images to recognize faces in'), + EShapeType::ListOfImages, + ), + ]; + } + + /** + * @return ShapeDescriptor[] + */ + public function getOutputShape(): array { + return [ + 'output' => new ShapeDescriptor( + $this->l->t('Faces'), + $this->l->t('The detected faces. Each input image is mapped to a text containing JSON-encoded embedding vectors separated by line breaks.'), + EShapeType::ListOfTexts, + ), + ]; + } +} diff --git a/lib/TaskProcessing/VideoClassificationTaskType.php b/lib/TaskProcessing/VideoClassificationTaskType.php new file mode 100644 index 00000000..ea01d38d --- /dev/null +++ b/lib/TaskProcessing/VideoClassificationTaskType.php @@ -0,0 +1,72 @@ +l->t('Video classification'); + } + + /** + * @inheritDoc + */ + public function getDescription(): string { + return $this->l->t('Classify videos into categories.'); + } + + /** + * @return string + */ + public function getId(): string { + return self::ID; + } + + /** + * @return ShapeDescriptor[] + */ + public function getInputShape(): array { + return [ + 'input' => new ShapeDescriptor( + $this->l->t('Videos'), + $this->l->t('Provide videos to classify'), + EShapeType::ListOfVideos, + ), + ]; + } + + /** + * @return ShapeDescriptor[] + */ + public function getOutputShape(): array { + return [ + 'output' => new ShapeDescriptor( + $this->l->t('Categories'), + $this->l->t('The classified categories. Each input video is mapped to a text containing a comma separated list of categories.'), + EShapeType::ListOfTexts, + ), + ]; + } +} From 8f81d8dbb8fe1d2270b3947eef8860a135e5b1e6 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 13 May 2026 11:18:40 +0200 Subject: [PATCH 2/2] fix: Fix psalm issue Signed-off-by: Marcel Klehr --- lib/TaskProcessing/AudioClassificationTaskType.php | 2 +- lib/TaskProcessing/ImageClassificationTaskType.php | 2 +- lib/TaskProcessing/ImageFaceRecognitionTaskType.php | 2 +- lib/TaskProcessing/VideoClassificationTaskType.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/TaskProcessing/AudioClassificationTaskType.php b/lib/TaskProcessing/AudioClassificationTaskType.php index 2a816204..8d348c92 100644 --- a/lib/TaskProcessing/AudioClassificationTaskType.php +++ b/lib/TaskProcessing/AudioClassificationTaskType.php @@ -15,7 +15,7 @@ use OCP\TaskProcessing\ITaskType; use OCP\TaskProcessing\ShapeDescriptor; -class AudioClassificationTaskType implements ITaskType { +final class AudioClassificationTaskType implements ITaskType { public const ID = Application::APP_ID . ':audio:classification'; public function __construct( diff --git a/lib/TaskProcessing/ImageClassificationTaskType.php b/lib/TaskProcessing/ImageClassificationTaskType.php index 17c7cab4..83bc938b 100644 --- a/lib/TaskProcessing/ImageClassificationTaskType.php +++ b/lib/TaskProcessing/ImageClassificationTaskType.php @@ -15,7 +15,7 @@ use OCP\TaskProcessing\ITaskType; use OCP\TaskProcessing\ShapeDescriptor; -class ImageClassificationTaskType implements ITaskType { +final class ImageClassificationTaskType implements ITaskType { public const ID = Application::APP_ID . ':image:classification'; public function __construct( diff --git a/lib/TaskProcessing/ImageFaceRecognitionTaskType.php b/lib/TaskProcessing/ImageFaceRecognitionTaskType.php index 1cb71b01..b018380f 100644 --- a/lib/TaskProcessing/ImageFaceRecognitionTaskType.php +++ b/lib/TaskProcessing/ImageFaceRecognitionTaskType.php @@ -15,7 +15,7 @@ use OCP\TaskProcessing\ITaskType; use OCP\TaskProcessing\ShapeDescriptor; -class ImageFaceRecognitionTaskType implements ITaskType { +final class ImageFaceRecognitionTaskType implements ITaskType { public const ID = Application::APP_ID . ':image:facerecognition'; public function __construct( diff --git a/lib/TaskProcessing/VideoClassificationTaskType.php b/lib/TaskProcessing/VideoClassificationTaskType.php index ea01d38d..0f820309 100644 --- a/lib/TaskProcessing/VideoClassificationTaskType.php +++ b/lib/TaskProcessing/VideoClassificationTaskType.php @@ -15,7 +15,7 @@ use OCP\TaskProcessing\ITaskType; use OCP\TaskProcessing\ShapeDescriptor; -class VideoClassificationTaskType implements ITaskType { +final class VideoClassificationTaskType implements ITaskType { public const ID = Application::APP_ID . ':video:classification'; public function __construct(