From 2042216bf3be86a8ee1089e09e8c33338d669f77 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 25 Feb 2026 11:54:16 +0100 Subject: [PATCH] perf: Make config values lazy if possible Signed-off-by: Marcel Klehr --- lib/Controller/ConfigController.php | 6 +-- .../Version050002Date20260225105515.php | 41 +++++++++++++++++++ lib/Service/ReplicateAPIService.php | 10 ++--- lib/Settings/Admin.php | 14 +++---- 4 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 lib/Migration/Version050002Date20260225105515.php diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index dd5e92b..c5ac396 100644 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -44,7 +44,7 @@ public function setAdminConfig(array $values): DataResponse { if ($key === 'api_key') { return new DataResponse([], Http::STATUS_BAD_REQUEST); } else { - $this->appConfig->setValueString(Application::APP_ID, $key, $value); + $this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: true); } } return new DataResponse([]); @@ -61,9 +61,9 @@ public function setAdminConfig(array $values): DataResponse { public function setSensitiveAdminConfig(array $values): DataResponse { foreach ($values as $key => $value) { if ($key === 'api_key') { - $this->appConfig->setValueString(Application::APP_ID, $key, $value, false, true); + $this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: false, sensitive: true); } else { - $this->appConfig->setValueString(Application::APP_ID, $key, $value); + $this->appConfig->setValueString(Application::APP_ID, $key, $value, lazy: true); } } return new DataResponse([]); diff --git a/lib/Migration/Version050002Date20260225105515.php b/lib/Migration/Version050002Date20260225105515.php new file mode 100644 index 0000000..e27d2f6 --- /dev/null +++ b/lib/Migration/Version050002Date20260225105515.php @@ -0,0 +1,41 @@ +appConfig->getAppKeys() as $key) { + if (in_array($key, ['installed_version','enabled','types', 'api_key'], true)) { + continue; + } + if (!$this->appConfig->isLazy($key)) { + $value = $this->appConfig->getAppValueString($key); + $this->appConfig->deleteAppValue($key); + $this->appConfig->setAppValueString($key, $value, lazy: true); + } + } + } +} diff --git a/lib/Service/ReplicateAPIService.php b/lib/Service/ReplicateAPIService.php index 99d0a3b..2a4409f 100644 --- a/lib/Service/ReplicateAPIService.php +++ b/lib/Service/ReplicateAPIService.php @@ -111,8 +111,8 @@ public function createTextGenerationPrediction(string $prompt): array { $params['input'] = array_merge($modelExtraParams, $params['input']); } - $modelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME); - $modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION); + $modelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME, lazy: true); + $modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION, lazy: true); if ($modelName !== '' || $modelVersion === '') { if ($modelName === '') { $modelName = Application::DEFAULT_LLM_NAME; @@ -143,8 +143,8 @@ public function createImagePrediction(string $prompt, int $numOutputs): array { $params['input'] = array_merge($modelExtraParams, $params['input']); } - $modelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', Application::DEFAULT_IMAGE_GEN_NAME); - $modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION); + $modelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', Application::DEFAULT_IMAGE_GEN_NAME, lazy: true); + $modelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION, lazy: true); if ($modelVersion !== '' || $modelName === '') { if ($modelVersion === '') { $modelVersion = Application::DEFAULT_IMAGE_GEN_VERSION; @@ -164,7 +164,7 @@ public function createImagePrediction(string $prompt, int $numOutputs): array { * @throws AppConfigTypeConflictException */ private function getExtraParams(string $configKey): ?array { - $stringValue = $this->appConfig->getValueString(Application::APP_ID, $configKey); + $stringValue = $this->appConfig->getValueString(Application::APP_ID, $configKey, lazy: true); if ($stringValue === '') { return null; } diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index cb9a326..56c2046 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -21,13 +21,13 @@ public function __construct( */ public function getForm(): TemplateResponse { $apiKey = $this->appConfig->getValueString(Application::APP_ID, 'api_key'); - $model = $this->appConfig->getValueString(Application::APP_ID, 'model', 'large'); - $llmModelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME); - $llmModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION); - $llmExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'llm_extra_params'); - $imageGenModelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name'); - $imageGenModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION); - $imageGenExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'igen_extra_params'); + $model = $this->appConfig->getValueString(Application::APP_ID, 'model', 'large', lazy: true); + $llmModelName = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_name', Application::DEFAULT_LLM_NAME, lazy: true); + $llmModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'llm_model_version', Application::DEFAULT_LLM_VERSION, lazy: true); + $llmExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'llm_extra_params', lazy: true); + $imageGenModelName = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_name', lazy: true); + $imageGenModelVersion = $this->appConfig->getValueString(Application::APP_ID, 'igen_model_version', Application::DEFAULT_IMAGE_GEN_VERSION, lazy: true); + $imageGenExtraParams = $this->appConfig->getValueString(Application::APP_ID, 'igen_extra_params', lazy: true); $adminConfig = [ // do not expose the api key to the user