Skip to content

Commit eb48853

Browse files
committed
feat(taskprocessing): add text2text provider in the testing app
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent dbab2a8 commit eb48853

5 files changed

Lines changed: 124 additions & 4 deletions

File tree

apps/testing/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@
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\\FakeTextToTextProvider' => $baseDir . '/../lib/TaskProcessing/FakeTextToTextProvider.php',
2526
);

apps/testing/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ 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\\FakeTextToTextProvider' => __DIR__ . '/..' . '/../lib/TaskProcessing/FakeTextToTextProvider.php',
4041
);
4142

4243
public static function getInitializer(ClassLoader $loader)

apps/testing/composer/composer/installed.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
'name' => '__root__',
44
'pretty_version' => 'dev-master',
55
'version' => 'dev-master',
6-
'reference' => '4ff660ca2e0baa02440ba07296ed7e75fa544c0e',
6+
'reference' => 'b34edf222419df41dac091a4a7b4e41814f5a7c8',
77
'type' => 'library',
88
'install_path' => __DIR__ . '/../',
99
'aliases' => array(),
@@ -13,7 +13,7 @@
1313
'__root__' => array(
1414
'pretty_version' => 'dev-master',
1515
'version' => 'dev-master',
16-
'reference' => '4ff660ca2e0baa02440ba07296ed7e75fa544c0e',
16+
'reference' => 'b34edf222419df41dac091a4a7b4e41814f5a7c8',
1717
'type' => 'library',
1818
'install_path' => __DIR__ . '/../',
1919
'aliases' => array(),

apps/testing/lib/AppInfo/Application.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use OCA\Testing\Provider\FakeTextProcessingProviderSync;
1616
use OCA\Testing\Provider\FakeTranslationProvider;
1717
use OCA\Testing\Settings\DeclarativeSettingsForm;
18+
use OCA\Testing\TaskProcessing\FakeTextToTextProvider;
1819
use OCP\AppFramework\App;
1920
use OCP\AppFramework\Bootstrap\IBootContext;
2021
use OCP\AppFramework\Bootstrap\IBootstrap;
@@ -24,8 +25,10 @@
2425
use OCP\Settings\Events\DeclarativeSettingsSetValueEvent;
2526

2627
class Application extends App implements IBootstrap {
28+
public const APP_ID = 'testing';
29+
2730
public function __construct(array $urlParams = []) {
28-
parent::__construct('testing', $urlParams);
31+
parent::__construct(self::APP_ID, $urlParams);
2932
}
3033

3134
public function register(IRegistrationContext $context): void {
@@ -34,6 +37,8 @@ public function register(IRegistrationContext $context): void {
3437
$context->registerTextProcessingProvider(FakeTextProcessingProviderSync::class);
3538
$context->registerTextToImageProvider(FakeText2ImageProvider::class);
3639

40+
$context->registerTaskProcessingProvider(FakeTextToTextProvider::class);
41+
3742
$context->registerDeclarativeSettings(DeclarativeSettingsForm::class);
3843
$context->registerEventListener(DeclarativeSettingsRegisterFormEvent::class, RegisterDeclarativeSettingsListener::class);
3944
$context->registerEventListener(DeclarativeSettingsGetValueEvent::class, GetDeclarativeSettingsValueListener::class);
@@ -43,7 +48,7 @@ public function register(IRegistrationContext $context): void {
4348
public function boot(IBootContext $context): void {
4449
$server = $context->getServerContainer();
4550
$config = $server->getConfig();
46-
if ($config->getAppValue('testing', 'enable_alt_user_backend', 'no') === 'yes') {
51+
if ($config->getAppValue(self::APP_ID, 'enable_alt_user_backend', 'no') === 'yes') {
4752
$userManager = $server->getUserManager();
4853

4954
// replace all user backends with this one
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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\TextToText;
17+
use RuntimeException;
18+
19+
class FakeTextToTextProvider implements ISynchronousProvider {
20+
21+
public function __construct() {
22+
}
23+
24+
public function getId(): string {
25+
return Application::APP_ID . '-text2text';
26+
}
27+
28+
public function getName(): string {
29+
return 'Fake text2text task processing provider';
30+
}
31+
32+
public function getTaskTypeId(): string {
33+
return TextToText::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' => 1234,
76+
'model' => 'model_2',
77+
];
78+
}
79+
80+
public function getOptionalOutputShape(): array {
81+
return [];
82+
}
83+
84+
public function getOutputShapeEnumValues(): 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 (isset($input['model']) && is_string($input['model'])) {
94+
$model = $input['model'];
95+
} else {
96+
$model = 'unknown model';
97+
}
98+
99+
if (!isset($input['input']) || !is_string($input['input'])) {
100+
throw new RuntimeException('Invalid prompt');
101+
}
102+
$prompt = $input['input'];
103+
104+
$maxTokens = null;
105+
if (isset($input['max_tokens']) && is_int($input['max_tokens'])) {
106+
$maxTokens = $input['max_tokens'];
107+
}
108+
109+
return [
110+
'output' => 'This is a fake result: ' . "\n\n- Prompt: " . $prompt . "\n- Model: " . $model . "\n- Maximum number of words: " . $maxTokens,
111+
];
112+
}
113+
}

0 commit comments

Comments
 (0)