From fb9825ee65275215a38c55f650f91b968a7ba832 Mon Sep 17 00:00:00 2001 From: Abhishek Patil <83769052+abhishekpatil4@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:12:29 +0530 Subject: [PATCH] fix: Resolve Auth field issue in Composio component and bump Composio (#5357) * fix: replace single quotes with double quotes * feat: update Composio component fields --- pyproject.toml | 3 ++- .../components/composio/composio_api.py | 20 ++++++++++------ uv.lock | 24 ++++++++++--------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index aaa47ed6a..bddfdb15d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,8 @@ dependencies = [ "yfinance==0.2.50", "wolframalpha==5.1.3", "astra-assistants[tools]~=2.2.6", - "composio-langchain==0.5.42", + "composio-langchain==0.6.3", + "composio-core==0.6.3", "spider-client==0.1.24", "nltk==3.9.1", "lark==1.2.2", diff --git a/src/backend/base/langflow/components/composio/composio_api.py b/src/backend/base/langflow/components/composio/composio_api.py index cd9a26a5b..6c8d3760a 100644 --- a/src/backend/base/langflow/components/composio/composio_api.py +++ b/src/backend/base/langflow/components/composio/composio_api.py @@ -8,7 +8,6 @@ from composio.client.exceptions import NoItemsFound from composio_langchain import Action, App, ComposioToolSet from langchain_core.tools import Tool from loguru import logger -from typing_extensions import override # Local imports from langflow.base.langchain_utilities.model import LCToolComponent @@ -30,16 +29,17 @@ class ComposioAPIComponent(LCToolComponent): name="api_key", display_name="Composio API Key", required=True, - # refresh_button=True, info="Refer to https://docs.composio.dev/faq/api_key/api_key", + real_time_refresh=True, ), DropdownInput( name="app_names", display_name="App Name", - options=list(App.__annotations__), + options=[str(app).replace("App.", "") for app in App.all()], value="", info="The app name to use. Please refresh after selecting app name", refresh_button=True, + required=True, ), # Authentication-related inputs (initially hidden) SecretStrInput( @@ -49,6 +49,7 @@ class ComposioAPIComponent(LCToolComponent): dynamic=True, show=False, info="Credentials for app authentication (API Key, Password, etc)", + load_from_db=False, ), MessageTextInput( name="username", @@ -220,19 +221,24 @@ class ComposioAPIComponent(LCToolComponent): """ return self.app_names.replace(" ✅", "").replace("_connected", "") - @override - def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None) -> dict: + def update_build_config(self, build_config: dict, field_value: Any, field_name: str | None = None) -> dict: # noqa: ARG002 # First, ensure all dynamic fields are hidden by default dynamic_fields = ["app_credentials", "username", "auth_link", "auth_status", "action_names"] for field in dynamic_fields: if field in build_config: if build_config[field]["value"] is None or build_config[field]["value"] == "": build_config[field]["show"] = False - build_config[field]["advanced"] = True # Hide from main view + build_config[field]["advanced"] = True + build_config[field]["load_from_db"] = False else: build_config[field]["show"] = True build_config[field]["advanced"] = False + if field_name == "app_names" and (not hasattr(self, "app_names") or not self.app_names): + build_config["auth_status"]["show"] = True + build_config["auth_status"]["value"] = "Please select an app first" + return build_config + if field_name == "app_names" and hasattr(self, "api_key") and self.api_key != "": # app_name = self._get_normalized_app_name() app_name = self.app_names @@ -285,7 +291,7 @@ class ComposioAPIComponent(LCToolComponent): # Update action names if connected if build_config["auth_status"]["value"] == "✅": - all_action_names = list(Action.__annotations__) + all_action_names = [str(action).replace("Action.", "") for action in Action.all()] app_action_names = [ action_name for action_name in all_action_names diff --git a/uv.lock b/uv.lock index a70c89951..54fbc904b 100644 --- a/uv.lock +++ b/uv.lock @@ -1157,7 +1157,7 @@ wheels = [ [[package]] name = "composio-core" -version = "0.5.42" +version = "0.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -1177,14 +1177,14 @@ dependencies = [ { name = "sentry-sdk" }, { name = "uvicorn" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/b9/a66a7646564f91937e2ac9a72c12308a37aac76dea88ea1d727a061bf153/composio_core-0.5.42.tar.gz", hash = "sha256:b38ea94e25807a6da813efb2c53ea8e01f71e54f0275ecfa55225887b36b6537", size = 295930 } +sdist = { url = "https://files.pythonhosted.org/packages/5f/21/730e8e305489d88f49d44d25630779fa79601d4add08ec00cb3c576f30fb/composio_core-0.6.3.tar.gz", hash = "sha256:13098b20d8832e74453ca194889305c935432156fc07be91dfddf76561ad591b", size = 305588 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/7a/45acb7b6bcca477712f89bd43888393f365dca0270062e97389e3653aec8/composio_core-0.5.42-py3-none-any.whl", hash = "sha256:351ddee8ac8203ea8039098c8afce7c43b1cf4a97eccbb2046c489a3a53afa54", size = 457643 }, + { url = "https://files.pythonhosted.org/packages/3f/33/e696eccb062d24182740b3203b53114aa633c9d8ded5a5799f5ff6ef5808/composio_core-0.6.3-py3-none-any.whl", hash = "sha256:981a9856781b791242f947a9685a18974d8a012ac7fab2c09438e1b19610d6a2", size = 468385 }, ] [[package]] name = "composio-langchain" -version = "0.5.42" +version = "0.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "composio-core" }, @@ -1193,9 +1193,9 @@ dependencies = [ { name = "langchainhub" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/3e/fa76297c590405d17ca8183396a51ae461845f82e232e64f68f383e2f804/composio_langchain-0.5.42.tar.gz", hash = "sha256:ed95acce4603099eccc022cd42f75df876dc566ecd0ed509bb33d18d0c541358", size = 4281 } +sdist = { url = "https://files.pythonhosted.org/packages/e7/cc/c6b48d16081c8a90f6e73e339b2cac26d8bae875622b853442bbd3cab525/composio_langchain-0.6.3.tar.gz", hash = "sha256:2036f94bfe60974b31f2be0bfdb33dd75a1d43435f275141219b3376587bf49d", size = 4252 } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/a4/4d65985c49db8d828ef39843003c443919fa9a285d3244dba3aaedbd4fd1/composio_langchain-0.5.42-py3-none-any.whl", hash = "sha256:ddbffa94c5ad7105bdc877e0103a5633cca8c736a7b6853230078e143e718700", size = 4701 }, + { url = "https://files.pythonhosted.org/packages/ad/01/cad5fd344f79b3c86e0baa7092d16dff8b38ea83640bcfc8350139d4b6aa/composio_langchain-0.6.3-py3-none-any.whl", hash = "sha256:0e749a1603dc0562293412d0a6429f88b75152b01a313cca859732070d762a6b", size = 4676 }, ] [[package]] @@ -3933,6 +3933,7 @@ dependencies = [ { name = "boto3" }, { name = "certifi" }, { name = "chromadb" }, + { name = "composio-core" }, { name = "composio-langchain" }, { name = "crewai" }, { name = "dspy-ai" }, @@ -4031,7 +4032,7 @@ local = [ { name = "sentence-transformers" }, ] -[package.dev-dependencies] +[package.dependency-groups] dev = [ { name = "asgi-lifespan" }, { name = "blockbuster" }, @@ -4087,7 +4088,8 @@ requires-dist = [ { name = "certifi", specifier = ">=2023.11.17,<2025.0.0" }, { name = "chromadb", specifier = "==0.5.23" }, { name = "clickhouse-connect", marker = "extra == 'clickhouse-connect'", specifier = "==0.7.19" }, - { name = "composio-langchain", specifier = "==0.5.42" }, + { name = "composio-core", specifier = "==0.6.3" }, + { name = "composio-langchain", specifier = "==0.6.3" }, { name = "couchbase", marker = "extra == 'couchbase'", specifier = ">=4.2.1" }, { name = "crewai", specifier = "~=0.86.0" }, { name = "ctransformers", marker = "extra == 'local'", specifier = ">=0.2.10" }, @@ -4170,7 +4172,7 @@ requires-dist = [ { name = "zep-python", specifier = "==2.0.2" }, ] -[package.metadata.requires-dev] +[package.metadata.dependency-groups] dev = [ { name = "asgi-lifespan", specifier = ">=2.1.0" }, { name = "blockbuster", specifier = ">=1.5.2,<1.6" }, @@ -4327,7 +4329,7 @@ local = [ { name = "sentence-transformers" }, ] -[package.dev-dependencies] +[package.dependency-groups] dev = [ { name = "asgi-lifespan" }, { name = "pytest-codspeed" }, @@ -4439,7 +4441,7 @@ requires-dist = [ { name = "vulture", marker = "extra == 'dev'", specifier = ">=2.11" }, ] -[package.metadata.requires-dev] +[package.metadata.dependency-groups] dev = [ { name = "asgi-lifespan", specifier = ">=2.1.0" }, { name = "pytest-codspeed", specifier = ">=3.0.0" },