From f49a54879d37a9cda0978513faa22fb1a114ca8d Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 26 Sep 2023 15:35:45 -0300 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=94=A7=20chore(auth.py):=20refactor?= =?UTF-8?q?=20get=5Fsecret=5Fkey=20method=20for=20improved=20readability?= =?UTF-8?q?=20and=20maintainability=20=F0=9F=94=92=20chore(auth.py):=20upd?= =?UTF-8?q?ate=20logging=20level=20to=20debug=20for=20CONFIG=5FDIR=20not?= =?UTF-8?q?=20provided=20case=20in=20get=5Fsecret=5Fkey=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langflow/services/settings/auth.py | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/backend/langflow/services/settings/auth.py b/src/backend/langflow/services/settings/auth.py index 621d9e973..cff671b84 100644 --- a/src/backend/langflow/services/settings/auth.py +++ b/src/backend/langflow/services/settings/auth.py @@ -70,33 +70,30 @@ class AuthSettings(BaseSettings): @validator("SECRET_KEY", pre=True) def get_secret_key(cls, value, values): - config_dir: Path = values.get("CONFIG_DIR") + config_dir = values.get("CONFIG_DIR") if not config_dir: - logger.warn("No CONFIG_DIR provided; not saving secret key.") + logger.debug("No CONFIG_DIR provided, not saving secret key") return value or secrets.token_urlsafe(32) - secret_key_path = config_dir / "secret_key" + secret_key_path = Path(config_dir) / "secret_key" - try: - if value: - logger.info("Secret key provided.") - write_secret_to_file(secret_key_path, value) - else: - logger.info("No secret key provided, generating a random one.") - if secret_key_path.exists(): - value = read_secret_from_file(secret_key_path) - logger.info("Loaded secret key.") - if not value: - value = secrets.token_urlsafe(32) - write_secret_to_file(secret_key_path, value) - logger.info("Saved secret key.") - else: + if value: + logger.debug("Secret key provided") + write_secret_to_file(secret_key_path, value) + else: + logger.debug("No secret key provided, generating a random one") + + if secret_key_path.exists(): + value = read_secret_from_file(secret_key_path) + logger.debug("Loaded secret key") + if not value: value = secrets.token_urlsafe(32) write_secret_to_file(secret_key_path, value) - logger.info("Saved secret key.") - except IOError: - logger.error("Failed to read or write secret key.") - raise IOError("Failed to read or write secret key.") + logger.debug("Saved secret key") + else: + value = secrets.token_urlsafe(32) + write_secret_to_file(secret_key_path, value) + logger.debug("Saved secret key") return value From c8c01402ff919da16f83e90e8f8d22e88d9a2e27 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Tue, 26 Sep 2023 15:46:39 -0300 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9B=20fix(custom=5Fcomponent.py):?= =?UTF-8?q?=20raise=20HTTPException=20when=20build=20method=20contains=20p?= =?UTF-8?q?rompt=20type=20argument=20to=20improve=20error=20handling=20and?= =?UTF-8?q?=20provide=20more=20informative=20error=20message=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(types.py):=20re-raise=20HTTPException=20when?= =?UTF-8?q?=20encountered=20during=20building=20langchain=20template=20cus?= =?UTF-8?q?tom=20component=20to=20propagate=20the=20error=20and=20provide?= =?UTF-8?q?=20more=20informative=20error=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langflow/interface/custom/custom_component.py | 12 +++++++++++- src/backend/langflow/interface/types.py | 8 +++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/backend/langflow/interface/custom/custom_component.py b/src/backend/langflow/interface/custom/custom_component.py index 49ac81ab1..b0c4f8752 100644 --- a/src/backend/langflow/interface/custom/custom_component.py +++ b/src/backend/langflow/interface/custom/custom_component.py @@ -95,7 +95,17 @@ class CustomComponent(Component, extra=Extra.allow): build_method = build_methods[0] - return build_method["args"] + args = build_method["args"] + for arg in args: + if arg.get("type") == "prompt": + raise HTTPException( + status_code=400, + detail={ + "error": "Type hint Error", + "traceback": "Prompt type is not supported in the build method. Try using PromptTemplate instead.", + }, + ) + return args @property def get_function_entrypoint_return_type(self) -> List[str]: diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index 25d3e8c8b..6708c11c9 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -303,9 +303,9 @@ def build_langchain_template_custom_component(custom_component: CustomComponent) logger.debug("Updated attributes") field_config = build_field_config(custom_component) logger.debug("Built field config") - add_extra_fields( - frontend_node, field_config, custom_component.get_function_entrypoint_args - ) + entrypoint_args = custom_component.get_function_entrypoint_args + + add_extra_fields(frontend_node, field_config, entrypoint_args) logger.debug("Added extra fields") frontend_node = add_code_field( frontend_node, custom_component.code, field_config.get("code", {}) @@ -317,6 +317,8 @@ def build_langchain_template_custom_component(custom_component: CustomComponent) logger.debug("Added base classes") return frontend_node except Exception as exc: + if isinstance(exc, HTTPException): + raise exc raise HTTPException( status_code=400, detail={