Skip to content

Commit f8f3a87

Browse files
authored
Merge pull request #83 from nextcloud/fix/lazy-config
perf: Make config values lazy if possible
2 parents 9b425f5 + 2042216 commit f8f3a87

File tree

4 files changed

+56
-15
lines changed

4 files changed

+56
-15
lines changed

lib/Controller/ConfigController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public function setAdminConfig(array $values): DataResponse {
4444
if ($key === 'api_key') {
4545
return new DataResponse([], Http::STATUS_BAD_REQUEST);
4646
} else {
47-
$this->appConfig->setValueString(Application::APP_ID, $key, $value);
47+
$this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: true);
4848
}
4949
}
5050
return new DataResponse([]);
@@ -61,9 +61,9 @@ public function setAdminConfig(array $values): DataResponse {
6161
public function setSensitiveAdminConfig(array $values): DataResponse {
6262
foreach ($values as $key => $value) {
6363
if ($key === 'api_key') {
64-
$this->appConfig->setValueString(Application::APP_ID, $key, $value, false, true);
64+
$this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: false, sensitive: true);
6565
} else {
66-
$this->appConfig->setValueString(Application::APP_ID, $key, $value);
66+
$this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: true);
6767
}
6868
}
6969
return new DataResponse([]);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
namespace OCA\Replicate\Migration;
10+
11+
use Closure;
12+
use OCP\AppFramework\Services\IAppConfig;
13+
use OCP\Migration\IOutput;
14+
use OCP\Migration\SimpleMigrationStep;
15+
16+
class Version050002Date20260225105515 extends SimpleMigrationStep {
17+
18+
public function __construct(
19+
private IAppConfig $appConfig,
20+
) {
21+
}
22+
23+
/**
24+
* @param IOutput $output
25+
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
26+
* @param array $options
27+
*/
28+
public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) {
29+
// Make app config entries lazy
30+
foreach ($this->appConfig->getAppKeys() as $key) {
31+
if (in_array($key, ['installed_version','enabled','types', 'api_key'], true)) {
32+
continue;
33+
}
34+
if (!$this->appConfig->isLazy($key)) {
35+
$value = $this->appConfig->getAppValueString($key);
36+
$this->appConfig->deleteAppValue($key);
37+
$this->appConfig->setAppValueString($key, $value, lazy: true);
38+
}
39+
}
40+
}
41+
}

lib/Service/ReplicateAPIService.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ public function createTextGenerationPrediction(string $prompt): array {
111111
$params['input'] = array_merge($modelExtraParams, $params['input']);
112112
}
113113

114-
$modelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME);
115-
$modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION);
114+
$modelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME, lazy: true);
115+
$modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION, lazy: true);
116116
if ($modelName !== '' || $modelVersion === '') {
117117
if ($modelName === '') {
118118
$modelName = Application::DEFAULT_LLM_NAME;
@@ -143,8 +143,8 @@ public function createImagePrediction(string $prompt, int $numOutputs): array {
143143
$params['input'] = array_merge($modelExtraParams, $params['input']);
144144
}
145145

146-
$modelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', Application::DEFAULT_IMAGE_GEN_NAME);
147-
$modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION);
146+
$modelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', Application::DEFAULT_IMAGE_GEN_NAME, lazy: true);
147+
$modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION, lazy: true);
148148
if ($modelVersion !== '' || $modelName === '') {
149149
if ($modelVersion === '') {
150150
$modelVersion = Application::DEFAULT_IMAGE_GEN_VERSION;
@@ -164,7 +164,7 @@ public function createImagePrediction(string $prompt, int $numOutputs): array {
164164
* @throws AppConfigTypeConflictException
165165
*/
166166
private function getExtraParams(string $configKey): ?array {
167-
$stringValue = $this->appConfig->getValueString(Application::APP_ID, $configKey);
167+
$stringValue = $this->appConfig->getValueString(Application::APP_ID, $configKey, lazy: true);
168168
if ($stringValue === '') {
169169
return null;
170170
}

lib/Settings/Admin.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ public function __construct(
2121
*/
2222
public function getForm(): TemplateResponse {
2323
$apiKey = $this->appConfig->getValueString(Application::APP_ID, 'api_key');
24-
$model = $this->appConfig->getValueString(Application::APP_ID, 'model', 'large');
25-
$llmModelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME);
26-
$llmModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION);
27-
$llmExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'llm_extra_params');
28-
$imageGenModelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name');
29-
$imageGenModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION);
30-
$imageGenExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'igen_extra_params');
24+
$model = $this->appConfig->getValueString(Application::APP_ID, 'model', 'large', lazy: true);
25+
$llmModelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME, lazy: true);
26+
$llmModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION, lazy: true);
27+
$llmExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'llm_extra_params', lazy: true);
28+
$imageGenModelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', lazy: true);
29+
$imageGenModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION, lazy: true);
30+
$imageGenExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'igen_extra_params', lazy: true);
3131

3232
$adminConfig = [
3333
// do not expose the api key to the user

0 commit comments

Comments
 (0)