Skip to content

Commit 475d008

Browse files
committed
feat(taskprocessing): add text2text, text2image, contextWrite, transcribe and translate providers in the testing app
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent dbab2a8 commit 475d008

File tree

8 files changed

+584
-2
lines changed

8 files changed

+584
-2
lines changed

apps/testing/composer/composer/autoload_classmap.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@
2222
'OCA\\Testing\\Provider\\FakeTextProcessingProviderSync' => $baseDir . '/../lib/Provider/FakeTextProcessingProviderSync.php',
2323
'OCA\\Testing\\Provider\\FakeTranslationProvider' => $baseDir . '/../lib/Provider/FakeTranslationProvider.php',
2424
'OCA\\Testing\\Settings\\DeclarativeSettingsForm' => $baseDir . '/../lib/Settings/DeclarativeSettingsForm.php',
25+
'OCA\\Testing\\TaskProcessing\\FakeContextWriteProvider' => $baseDir . '/../lib/TaskProcessing/FakeContextWriteProvider.php',
26+
'OCA\\Testing\\TaskProcessing\\FakeTextToImageProvider' => $baseDir . '/../lib/TaskProcessing/FakeTextToImageProvider.php',
27+
'OCA\\Testing\\TaskProcessing\\FakeTextToTextProvider' => $baseDir . '/../lib/TaskProcessing/FakeTextToTextProvider.php',
28+
'OCA\\Testing\\TaskProcessing\\FakeTranscribeProvider' => $baseDir . '/../lib/TaskProcessing/FakeTranscribeProvider.php',
29+
'OCA\\Testing\\TaskProcessing\\FakeTranslateProvider' => $baseDir . '/../lib/TaskProcessing/FakeTranslateProvider.php',
2530
);

apps/testing/composer/composer/autoload_static.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ class ComposerStaticInitTesting
3737
'OCA\\Testing\\Provider\\FakeTextProcessingProviderSync' => __DIR__ . '/..' . '/../lib/Provider/FakeTextProcessingProviderSync.php',
3838
'OCA\\Testing\\Provider\\FakeTranslationProvider' => __DIR__ . '/..' . '/../lib/Provider/FakeTranslationProvider.php',
3939
'OCA\\Testing\\Settings\\DeclarativeSettingsForm' => __DIR__ . '/..' . '/../lib/Settings/DeclarativeSettingsForm.php',
40+
'OCA\\Testing\\TaskProcessing\\FakeContextWriteProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeContextWriteProvider.php',
41+
'OCA\\Testing\\TaskProcessing\\FakeTextToImageProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeTextToImageProvider.php',
42+
'OCA\\Testing\\TaskProcessing\\FakeTextToTextProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeTextToTextProvider.php',
43+
'OCA\\Testing\\TaskProcessing\\FakeTranscribeProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeTranscribeProvider.php',
44+
'OCA\\Testing\\TaskProcessing\\FakeTranslateProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeTranslateProvider.php',
4045
);
4146

4247
public static function getInitializer(ClassLoader $loader)

apps/testing/lib/AppInfo/Application.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
use OCA\Testing\Provider\FakeTextProcessingProviderSync;
1616
use OCA\Testing\Provider\FakeTranslationProvider;
1717
use OCA\Testing\Settings\DeclarativeSettingsForm;
18+
use OCA\Testing\TaskProcessing\FakeContextWriteProvider;
19+
use OCA\Testing\TaskProcessing\FakeTextToImageProvider;
20+
use OCA\Testing\TaskProcessing\FakeTextToTextProvider;
21+
use OCA\Testing\TaskProcessing\FakeTranscribeProvider;
22+
use OCA\Testing\TaskProcessing\FakeTranslateProvider;
1823
use OCP\AppFramework\App;
1924
use OCP\AppFramework\Bootstrap\IBootContext;
2025
use OCP\AppFramework\Bootstrap\IBootstrap;
@@ -24,8 +29,10 @@
2429
use OCP\Settings\Events\DeclarativeSettingsSetValueEvent;
2530

2631
class Application extends App implements IBootstrap {
32+
public const APP_ID = 'testing';
33+
2734
public function __construct(array $urlParams = []) {
28-
parent::__construct('testing', $urlParams);
35+
parent::__construct(self::APP_ID, $urlParams);
2936
}
3037

3138
public function register(IRegistrationContext $context): void {
@@ -34,6 +41,12 @@ public function register(IRegistrationContext $context): void {
3441
$context->registerTextProcessingProvider(FakeTextProcessingProviderSync::class);
3542
$context->registerTextToImageProvider(FakeText2ImageProvider::class);
3643

44+
$context->registerTaskProcessingProvider(FakeTextToTextProvider::class);
45+
$context->registerTaskProcessingProvider(FakeTextToImageProvider::class);
46+
$context->registerTaskProcessingProvider(FakeTranslateProvider::class);
47+
$context->registerTaskProcessingProvider(FakeTranscribeProvider::class);
48+
$context->registerTaskProcessingProvider(FakeContextWriteProvider::class);
49+
3750
$context->registerDeclarativeSettings(DeclarativeSettingsForm::class);
3851
$context->registerEventListener(DeclarativeSettingsRegisterFormEvent::class, RegisterDeclarativeSettingsListener::class);
3952
$context->registerEventListener(DeclarativeSettingsGetValueEvent::class, GetDeclarativeSettingsValueListener::class);
@@ -43,7 +56,7 @@ public function register(IRegistrationContext $context): void {
4356
public function boot(IBootContext $context): void {
4457
$server = $context->getServerContainer();
4558
$config = $server->getConfig();
46-
if ($config->getAppValue('testing', 'enable_alt_user_backend', 'no') === 'yes') {
59+
if ($config->getAppValue(self::APP_ID, 'enable_alt_user_backend', 'no') === 'yes') {
4760
$userManager = $server->getUserManager();
4861

4962
// replace all user backends with this one
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
/**
3+
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
4+
* SPDX-License-Identifier: AGPL-3.0-or-later
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace OCA\Testing\TaskProcessing;
10+
11+
use OCA\Testing\AppInfo\Application;
12+
use OCP\TaskProcessing\EShapeType;
13+
use OCP\TaskProcessing\ISynchronousProvider;
14+
use OCP\TaskProcessing\ShapeDescriptor;
15+
use OCP\TaskProcessing\ShapeEnumValue;
16+
use OCP\TaskProcessing\TaskTypes\ContextWrite;
17+
use RuntimeException;
18+
19+
class FakeContextWriteProvider implements ISynchronousProvider {
20+
21+
public function __construct() {
22+
}
23+
24+
public function getId(): string {
25+
return Application::APP_ID . '-contextwrite';
26+
}
27+
28+
public function getName(): string {
29+
return 'Fake context write task processing provider';
30+
}
31+
32+
public function getTaskTypeId(): string {
33+
return ContextWrite::ID;
34+
}
35+
36+
public function getExpectedRuntime(): int {
37+
return 1;
38+
}
39+
40+
public function getInputShapeEnumValues(): array {
41+
return [];
42+
}
43+
44+
public function getInputShapeDefaults(): array {
45+
return [];
46+
}
47+
48+
public function getOptionalInputShape(): array {
49+
return [
50+
'max_tokens' => new ShapeDescriptor(
51+
'Maximum output words',
52+
'The maximum number of words/tokens that can be generated in the completion.',
53+
EShapeType::Number
54+
),
55+
'model' => new ShapeDescriptor(
56+
'Model',
57+
'The model used to generate the completion',
58+
EShapeType::Enum
59+
),
60+
];
61+
}
62+
63+
public function getOptionalInputShapeEnumValues(): array {
64+
return [
65+
'model' => [
66+
new ShapeEnumValue('Model 1', 'model_1'),
67+
new ShapeEnumValue('Model 2', 'model_2'),
68+
new ShapeEnumValue('Model 3', 'model_3'),
69+
],
70+
];
71+
}
72+
73+
public function getOptionalInputShapeDefaults(): array {
74+
return [
75+
'max_tokens' => 4321,
76+
'model' => 'model_2',
77+
];
78+
}
79+
80+
public function getOutputShapeEnumValues(): array {
81+
return [];
82+
}
83+
84+
public function getOptionalOutputShape(): array {
85+
return [];
86+
}
87+
88+
public function getOptionalOutputShapeEnumValues(): array {
89+
return [];
90+
}
91+
92+
public function process(?string $userId, array $input, callable $reportProgress): array {
93+
if (
94+
!isset($input['style_input']) || !is_string($input['style_input'])
95+
|| !isset($input['source_input']) || !is_string($input['source_input'])
96+
) {
97+
throw new RuntimeException('Invalid inputs');
98+
}
99+
$writingStyle = $input['style_input'];
100+
$sourceMaterial = $input['source_input'];
101+
102+
if (isset($input['model']) && is_string($input['model'])) {
103+
$model = $input['model'];
104+
} else {
105+
$model = 'unknown model';
106+
}
107+
108+
$maxTokens = null;
109+
if (isset($input['max_tokens']) && is_int($input['max_tokens'])) {
110+
$maxTokens = $input['max_tokens'];
111+
}
112+
113+
$fakeResult = 'This is a fake result: '
114+
. "\n\n- Style input: " . $writingStyle
115+
. "\n- Source input: " . $sourceMaterial
116+
. "\n- Model: " . $model
117+
. "\n- Maximum number of words: " . $maxTokens;
118+
119+
return ['output' => $fakeResult];
120+
}
121+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
/**
3+
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
4+
* SPDX-License-Identifier: AGPL-3.0-or-later
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace OCA\Testing\TaskProcessing;
10+
11+
use OCA\Testing\AppInfo\Application;
12+
use OCP\TaskProcessing\EShapeType;
13+
use OCP\TaskProcessing\ISynchronousProvider;
14+
use OCP\TaskProcessing\ShapeDescriptor;
15+
use OCP\TaskProcessing\TaskTypes\TextToImage;
16+
use RuntimeException;
17+
18+
class FakeTextToImageProvider implements ISynchronousProvider {
19+
20+
public function __construct() {
21+
}
22+
23+
public function getId(): string {
24+
return Application::APP_ID . '-text2image';
25+
}
26+
27+
public function getName(): string {
28+
return 'Fake text2image task processing provider';
29+
}
30+
31+
public function getTaskTypeId(): string {
32+
return TextToImage::ID;
33+
}
34+
35+
public function getExpectedRuntime(): int {
36+
return 1;
37+
}
38+
39+
public function getInputShapeEnumValues(): array {
40+
return [];
41+
}
42+
43+
public function getInputShapeDefaults(): array {
44+
return [
45+
'numberOfImages' => 1,
46+
];
47+
}
48+
49+
public function getOptionalInputShape(): array {
50+
return [
51+
'size' => new ShapeDescriptor(
52+
'Size',
53+
'Optional. The size of the generated images. Must be in 256x256 format.',
54+
EShapeType::Text
55+
),
56+
];
57+
}
58+
59+
public function getOptionalInputShapeEnumValues(): array {
60+
return [];
61+
}
62+
63+
public function getOptionalInputShapeDefaults(): array {
64+
return [];
65+
}
66+
67+
public function getOutputShapeEnumValues(): array {
68+
return [];
69+
}
70+
71+
public function getOptionalOutputShape(): array {
72+
return [];
73+
}
74+
75+
public function getOptionalOutputShapeEnumValues(): array {
76+
return [];
77+
}
78+
79+
public function process(?string $userId, array $input, callable $reportProgress): array {
80+
if (!isset($input['input']) || !is_string($input['input'])) {
81+
throw new RuntimeException('Invalid prompt');
82+
}
83+
$prompt = $input['input'];
84+
85+
$nbImages = 1;
86+
if (isset($input['numberOfImages']) && is_int($input['numberOfImages'])) {
87+
$nbImages = $input['numberOfImages'];
88+
}
89+
90+
$fakeContent = file_get_contents(__DIR__ . '/../../img/logo.png');
91+
92+
$output = ['images' => []];
93+
foreach (range(1, $nbImages) as $i) {
94+
$output['images'][] = $fakeContent;
95+
}
96+
/** @var array<string, list<numeric|string>|numeric|string> $output */
97+
return $output;
98+
}
99+
}

0 commit comments

Comments
 (0)