From eb3265222d957e09fb6ce56e5f03fdfe87253e7b Mon Sep 17 00:00:00 2001 From: radu-mocanu Date: Mon, 14 Apr 2025 16:17:29 +0300 Subject: [PATCH 1/2] feat: include folder info for actions --- pyproject.toml | 4 +-- src/uipath_langchain/_cli/_runtime/_input.py | 12 ++++--- src/uipath_langchain/_cli/_runtime/_output.py | 33 +++++++++++++++++-- uv.lock | 11 ++++--- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 38a61ee1..5d879770 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,11 @@ [project] name = "uipath-langchain" -version = "0.0.89" +version = "0.0.90" description = "UiPath Langchain" readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.10" dependencies = [ - "uipath>=2.0.7, <2.1.0", + "uipath>=2.0.9, <2.1.0", "langgraph>=0.2.70", "langchain-core>=0.3.34", "langgraph-checkpoint-sqlite>=2.0.3", diff --git a/src/uipath_langchain/_cli/_runtime/_input.py b/src/uipath_langchain/_cli/_runtime/_input.py index 66257efc..e90f081e 100644 --- a/src/uipath_langchain/_cli/_runtime/_input.py +++ b/src/uipath_langchain/_cli/_runtime/_input.py @@ -58,10 +58,12 @@ async def process(self) -> Any: if not trigger: return Command(resume=self.context.input_json) - type, key = trigger + type, key, folder_path, folder_key, payload = trigger logger.debug(f"ResumeTrigger: {type} {key}") if type == UiPathResumeTriggerType.ACTION.value and key: - action = self.uipath.actions.retrieve(key) + action = await self.uipath.actions.retrieve_async( + key, app_folder_key=folder_key, app_folder_path=folder_path + ) logger.debug(f"Action: {action}") if action.data is None: return Command(resume={}) @@ -95,7 +97,7 @@ async def process(self) -> Any: return Command(resume=try_convert_to_json_format(job.output_arguments)) return Command(resume=self.context.input_json) - async def _get_latest_trigger(self) -> Optional[tuple[str, str]]: + async def _get_latest_trigger(self) -> Optional[tuple[str, str, str, str, str]]: """Fetch the most recent trigger from the database.""" if self.context.memory is None: return None @@ -106,7 +108,7 @@ async def _get_latest_trigger(self) -> Optional[tuple[str, str]]: self.context.memory.conn.cursor() as cur, ): await cur.execute(f""" - SELECT type, key + SELECT type, key, folder_path, folder_key, payload FROM {self.context.resume_triggers_table} ORDER BY timestamp DESC LIMIT 1 @@ -114,7 +116,7 @@ async def _get_latest_trigger(self) -> Optional[tuple[str, str]]: result = await cur.fetchone() if result is None: return None - return cast(tuple[str, str], tuple(result)) + return cast(tuple[str, str, str, str, str], tuple(result)) except Exception as e: raise LangGraphRuntimeError( "DB_QUERY_FAILED", diff --git a/src/uipath_langchain/_cli/_runtime/_output.py b/src/uipath_langchain/_cli/_runtime/_output.py index 32e5d3ee..e1410d1d 100644 --- a/src/uipath_langchain/_cli/_runtime/_output.py +++ b/src/uipath_langchain/_cli/_runtime/_output.py @@ -232,6 +232,9 @@ async def _save_resume_trigger(self) -> None: id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, key TEXT, + folder_key TEXT, + folder_path TEXT, + payload TEXT, timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'utc')) ) """) @@ -280,6 +283,12 @@ async def _save_resume_trigger(self) -> None: app_name=self.interrupt_value.app_name if self.interrupt_value.app_name else "", + app_folder_path=self.interrupt_value.app_folder_path + if self.interrupt_value.app_folder_path + else "", + app_folder_key=self.interrupt_value.app_folder_key + if self.interrupt_value.app_folder_key + else "", app_key=self.interrupt_value.app_key if self.interrupt_value.app_key else "", @@ -295,11 +304,25 @@ async def _save_resume_trigger(self) -> None: self._resume_trigger = UiPathResumeTrigger( trigger_type=UiPathResumeTriggerType.ACTION, item_key=action.key, + payload=self.interrupt_value.model_dump_json(), + folder_path=self.interrupt_value.app_folder_path + if self.interrupt_value.app_folder_path + else None, + folder_key=self.interrupt_value.app_folder_key + if self.interrupt_value.app_folder_key + else None, ) elif isinstance(self.interrupt_value, WaitAction): self._resume_trigger = UiPathResumeTrigger( triggerType=UiPathResumeTriggerType.ACTION, itemKey=self.interrupt_value.action.key, + payload=self.interrupt_value.model_dump_json(), + folder_path=self.interrupt_value.app_folder_path + if self.interrupt_value.app_folder_path + else None, + folder_key=self.interrupt_value.app_folder_key + if self.interrupt_value.app_folder_key + else None, ) except Exception as e: @@ -324,8 +347,14 @@ async def _save_resume_trigger(self) -> None: try: logger.debug(f"ResumeTrigger: {trigger_type} {trigger_key}") await cur.execute( - f"INSERT INTO {self.context.resume_triggers_table} (type, key) VALUES (?, ?)", - (trigger_type, trigger_key), + f"INSERT INTO {self.context.resume_triggers_table} (type, key, payload, folder_path, folder_key) VALUES (?, ?, ?, ?, ?)", + ( + trigger_type, + trigger_key, + self.resume_trigger.payload, + self.resume_trigger.folder_path, + self.resume_trigger.folder_key, + ), ) await self.context.memory.conn.commit() except Exception as e: diff --git a/uv.lock b/uv.lock index 651f6ae9..2ae4c603 100644 --- a/uv.lock +++ b/uv.lock @@ -1898,7 +1898,7 @@ wheels = [ [[package]] name = "uipath" -version = "2.0.1" +version = "2.0.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1911,14 +1911,14 @@ dependencies = [ { name = "tomli" }, { name = "types-requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1b/74/3d0e8c9c133492af75cc47d64b76e9ef9b108b4d709ea98e039aec0ff289/uipath-2.0.1.tar.gz", hash = "sha256:869637a976cca6058c4ee0b2ed79a85d4a9eb19a3306bee5e24a6dd49979c550", size = 206254 } +sdist = { url = "https://files.pythonhosted.org/packages/ae/44/d1dbb5a624731a157763a3f1dea2cd95cd0ffb2f7501cef72a35e7f018ac/uipath-2.0.8.tar.gz", hash = "sha256:1a312cd22673e307e60388133c78ca4ff91bb02f56083b758b7ae8c74d858d3f", size = 210033 } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/a6/c45c040b5a2ab86da0e4312b20208a5df68100d04be7f2e69c17f18ccc04/uipath-2.0.1-py3-none-any.whl", hash = "sha256:992a34bef5aef8c9a98fa188d1cff165e8271b9de93e25d3ed0b18d0f16c65c4", size = 84375 }, + { url = "https://files.pythonhosted.org/packages/94/16/09509a097d3e471b836afe9d26476543b4e930d76b3e39345f5995892d46/uipath-2.0.8-py3-none-any.whl", hash = "sha256:b4bbd2e2501bc55d911978b10e91dfeb9fb50005fe0bd33ca855a0d04d1835c8", size = 86232 }, ] [[package]] name = "uipath-langchain" -version = "0.0.87" +version = "0.0.89" source = { editable = "." } dependencies = [ { name = "httpx" }, @@ -1961,9 +1961,10 @@ requires-dist = [ { name = "python-dotenv", specifier = ">=1.0.1" }, { name = "requests", specifier = ">=2.23.3" }, { name = "types-requests", specifier = ">=2.32.0.20241016" }, - { name = "uipath", specifier = "==2.0.1" }, + { name = "uipath", specifier = ">=2.0.8,<2.1.0" }, { name = "uipath-langchain", marker = "extra == 'langchain'", specifier = ">=0.0.2" }, ] +provides-extras = ["langchain"] [package.metadata.requires-dev] dev = [ From 610c22c16c01d3fb102395fe35e426ef2d1f0883 Mon Sep 17 00:00:00 2001 From: radu-mocanu Date: Tue, 15 Apr 2025 17:12:04 +0300 Subject: [PATCH 2/2] ci: stop running commit-lint on merge commits --- .github/workflows/ci.yml | 1 + uv.lock | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7570a075..60deffc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,6 +12,7 @@ on: jobs: commit-lint: + if: ${{ github.event_name == 'pull_request' }} uses: ./.github/workflows/commitlint.yml lint: uses: ./.github/workflows/lint.yml diff --git a/uv.lock b/uv.lock index 2ae4c603..e03b70b7 100644 --- a/uv.lock +++ b/uv.lock @@ -1898,7 +1898,7 @@ wheels = [ [[package]] name = "uipath" -version = "2.0.8" +version = "2.0.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -1911,14 +1911,14 @@ dependencies = [ { name = "tomli" }, { name = "types-requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/44/d1dbb5a624731a157763a3f1dea2cd95cd0ffb2f7501cef72a35e7f018ac/uipath-2.0.8.tar.gz", hash = "sha256:1a312cd22673e307e60388133c78ca4ff91bb02f56083b758b7ae8c74d858d3f", size = 210033 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/b2/4be1b45c55be25428fd4b229cf9554a46f6ecd2abc076c6cd7bed9903137/uipath-2.0.9.tar.gz", hash = "sha256:5de6678bd3dd4cc4e97f0e5635a8c7f41a9736b1a7a40ebd3888753764f85be3", size = 210455 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/16/09509a097d3e471b836afe9d26476543b4e930d76b3e39345f5995892d46/uipath-2.0.8-py3-none-any.whl", hash = "sha256:b4bbd2e2501bc55d911978b10e91dfeb9fb50005fe0bd33ca855a0d04d1835c8", size = 86232 }, + { url = "https://files.pythonhosted.org/packages/d7/74/f34b9b7db516e0c2e569618bd693a116f37e7b5f5bdd73e3db3cdcdc34c7/uipath-2.0.9-py3-none-any.whl", hash = "sha256:37212e2494c300aef08a593f4dcbbb1234dc7c26d2d665c2fe671dcd486ee286", size = 86475 }, ] [[package]] name = "uipath-langchain" -version = "0.0.89" +version = "0.0.90" source = { editable = "." } dependencies = [ { name = "httpx" }, @@ -1961,7 +1961,7 @@ requires-dist = [ { name = "python-dotenv", specifier = ">=1.0.1" }, { name = "requests", specifier = ">=2.23.3" }, { name = "types-requests", specifier = ">=2.32.0.20241016" }, - { name = "uipath", specifier = ">=2.0.8,<2.1.0" }, + { name = "uipath", specifier = ">=2.0.9,<2.1.0" }, { name = "uipath-langchain", marker = "extra == 'langchain'", specifier = ">=0.0.2" }, ] provides-extras = ["langchain"]