uipath-langchain 0.0.88__py3-none-any.whl → 0.0.90__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,10 +58,12 @@ class LangGraphInputProcessor:
58
58
  if not trigger:
59
59
  return Command(resume=self.context.input_json)
60
60
 
61
- type, key = trigger
61
+ type, key, folder_path, folder_key, payload = trigger
62
62
  logger.debug(f"ResumeTrigger: {type} {key}")
63
63
  if type == UiPathResumeTriggerType.ACTION.value and key:
64
- action = self.uipath.actions.retrieve(key)
64
+ action = await self.uipath.actions.retrieve_async(
65
+ key, app_folder_key=folder_key, app_folder_path=folder_path
66
+ )
65
67
  logger.debug(f"Action: {action}")
66
68
  if action.data is None:
67
69
  return Command(resume={})
@@ -95,7 +97,7 @@ class LangGraphInputProcessor:
95
97
  return Command(resume=try_convert_to_json_format(job.output_arguments))
96
98
  return Command(resume=self.context.input_json)
97
99
 
98
- async def _get_latest_trigger(self) -> Optional[tuple[str, str]]:
100
+ async def _get_latest_trigger(self) -> Optional[tuple[str, str, str, str, str]]:
99
101
  """Fetch the most recent trigger from the database."""
100
102
  if self.context.memory is None:
101
103
  return None
@@ -106,7 +108,7 @@ class LangGraphInputProcessor:
106
108
  self.context.memory.conn.cursor() as cur,
107
109
  ):
108
110
  await cur.execute(f"""
109
- SELECT type, key
111
+ SELECT type, key, folder_path, folder_key, payload
110
112
  FROM {self.context.resume_triggers_table}
111
113
  ORDER BY timestamp DESC
112
114
  LIMIT 1
@@ -114,7 +116,7 @@ class LangGraphInputProcessor:
114
116
  result = await cur.fetchone()
115
117
  if result is None:
116
118
  return None
117
- return cast(tuple[str, str], tuple(result))
119
+ return cast(tuple[str, str, str, str, str], tuple(result))
118
120
  except Exception as e:
119
121
  raise LangGraphRuntimeError(
120
122
  "DB_QUERY_FAILED",
@@ -232,6 +232,9 @@ class LangGraphOutputProcessor:
232
232
  id INTEGER PRIMARY KEY AUTOINCREMENT,
233
233
  type TEXT NOT NULL,
234
234
  key TEXT,
235
+ folder_key TEXT,
236
+ folder_path TEXT,
237
+ payload TEXT,
235
238
  timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'utc'))
236
239
  )
237
240
  """)
@@ -277,11 +280,17 @@ class LangGraphOutputProcessor:
277
280
  if isinstance(self.interrupt_value, CreateAction):
278
281
  action = uipath_sdk.actions.create(
279
282
  title=self.interrupt_value.title,
280
- app_name=self.interrupt_value.name
281
- if self.interrupt_value.name
283
+ app_name=self.interrupt_value.app_name
284
+ if self.interrupt_value.app_name
282
285
  else "",
283
- app_key=self.interrupt_value.key
284
- if self.interrupt_value.key
286
+ app_folder_path=self.interrupt_value.app_folder_path
287
+ if self.interrupt_value.app_folder_path
288
+ else "",
289
+ app_folder_key=self.interrupt_value.app_folder_key
290
+ if self.interrupt_value.app_folder_key
291
+ else "",
292
+ app_key=self.interrupt_value.app_key
293
+ if self.interrupt_value.app_key
285
294
  else "",
286
295
  app_version=self.interrupt_value.app_version
287
296
  if self.interrupt_value.app_version
@@ -295,11 +304,25 @@ class LangGraphOutputProcessor:
295
304
  self._resume_trigger = UiPathResumeTrigger(
296
305
  trigger_type=UiPathResumeTriggerType.ACTION,
297
306
  item_key=action.key,
307
+ payload=self.interrupt_value.model_dump_json(),
308
+ folder_path=self.interrupt_value.app_folder_path
309
+ if self.interrupt_value.app_folder_path
310
+ else None,
311
+ folder_key=self.interrupt_value.app_folder_key
312
+ if self.interrupt_value.app_folder_key
313
+ else None,
298
314
  )
299
315
  elif isinstance(self.interrupt_value, WaitAction):
300
316
  self._resume_trigger = UiPathResumeTrigger(
301
317
  triggerType=UiPathResumeTriggerType.ACTION,
302
318
  itemKey=self.interrupt_value.action.key,
319
+ payload=self.interrupt_value.model_dump_json(),
320
+ folder_path=self.interrupt_value.app_folder_path
321
+ if self.interrupt_value.app_folder_path
322
+ else None,
323
+ folder_key=self.interrupt_value.app_folder_key
324
+ if self.interrupt_value.app_folder_key
325
+ else None,
303
326
  )
304
327
 
305
328
  except Exception as e:
@@ -324,8 +347,14 @@ class LangGraphOutputProcessor:
324
347
  try:
325
348
  logger.debug(f"ResumeTrigger: {trigger_type} {trigger_key}")
326
349
  await cur.execute(
327
- f"INSERT INTO {self.context.resume_triggers_table} (type, key) VALUES (?, ?)",
328
- (trigger_type, trigger_key),
350
+ f"INSERT INTO {self.context.resume_triggers_table} (type, key, payload, folder_path, folder_key) VALUES (?, ?, ?, ?, ?)",
351
+ (
352
+ trigger_type,
353
+ trigger_key,
354
+ self.resume_trigger.payload,
355
+ self.resume_trigger.folder_path,
356
+ self.resume_trigger.folder_key,
357
+ ),
329
358
  )
330
359
  await self.context.memory.conn.commit()
331
360
  except Exception as e:
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import logging
3
+ import os
3
4
  from typing import List, Optional
4
5
 
5
6
  from langchain_core.callbacks.base import BaseCallbackHandler
@@ -54,6 +55,11 @@ class LangGraphRuntime(UiPathBaseRuntime):
54
55
  tracer = None
55
56
 
56
57
  try:
58
+ if self.context.resume is False and self.context.job_id is None:
59
+ # Delete the previous graph state file at debug time
60
+ if os.path.exists(self.state_file_path):
61
+ os.remove(self.state_file_path)
62
+
57
63
  async with AsyncSqliteSaver.from_conn_string(
58
64
  self.state_file_path
59
65
  ) as memory:
@@ -88,6 +94,14 @@ class LangGraphRuntime(UiPathBaseRuntime):
88
94
  "callbacks": callbacks,
89
95
  }
90
96
 
97
+ recursion_limit = os.environ.get("LANGCHAIN_RECURSION_LIMIT", None)
98
+ max_concurrency = os.environ.get("LANGCHAIN_MAX_CONCURRENCY", None)
99
+
100
+ if recursion_limit is not None:
101
+ graph_config["recursion_limit"] = int(recursion_limit)
102
+ if max_concurrency is not None:
103
+ graph_config["max_concurrency"] = int(max_concurrency)
104
+
91
105
  # Stream the output at debug time
92
106
  if self.context.job_id is None:
93
107
  # Get final chunk while streaming
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.88
3
+ Version: 0.0.90
4
4
  Summary: UiPath Langchain
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-langchain-python
@@ -25,7 +25,7 @@ Requires-Dist: pydantic-settings>=2.6.0
25
25
  Requires-Dist: python-dotenv>=1.0.1
26
26
  Requires-Dist: requests>=2.23.3
27
27
  Requires-Dist: types-requests>=2.32.0.20241016
28
- Requires-Dist: uipath<2.1.0,>=2.0.4
28
+ Requires-Dist: uipath<2.1.0,>=2.0.9
29
29
  Provides-Extra: langchain
30
30
  Description-Content-Type: text/markdown
31
31
 
@@ -6,9 +6,9 @@ uipath_langchain/_cli/cli_run.py,sha256=zMn2P1gB1ogM8_EmZsIhqNpeI9Oc02Z5Gj-oni7e
6
6
  uipath_langchain/_cli/_runtime/_context.py,sha256=wr4aNn06ReIXmetEZ6b6AnpAt64p13anQ2trZ5Bzgio,807
7
7
  uipath_langchain/_cli/_runtime/_escalation.py,sha256=oA5NvZvCo8ngELFJRyhZNM69DxVHrshhMY6CUk_cukQ,8055
8
8
  uipath_langchain/_cli/_runtime/_exception.py,sha256=USKkLYkG-dzjX3fEiMMOHnVUpiXJs_xF0OQXCCOvbYM,546
9
- uipath_langchain/_cli/_runtime/_input.py,sha256=aaqU7ZiTwVmE1CgaiqgOtArr925bYr9c4CuWt1oC-jk,5418
10
- uipath_langchain/_cli/_runtime/_output.py,sha256=we6sdXGI-dARRWUgcwblB8CMytBmYncJh6xiMkwcAVA,14238
11
- uipath_langchain/_cli/_runtime/_runtime.py,sha256=PWzs0EnmpzkEIceoPq_SVLLgFbTC1aU71HbPYvlzVOg,11121
9
+ uipath_langchain/_cli/_runtime/_input.py,sha256=gKzPaGW-EzgeAskWJjbCWnfZRLu_BM7lCXkq0XkVGLU,5614
10
+ uipath_langchain/_cli/_runtime/_output.py,sha256=WQSrsvGaaclZ6GLWEh6Nk1Mz1iGaIB45PgIX3DS3AN4,16130
11
+ uipath_langchain/_cli/_runtime/_runtime.py,sha256=M82qhxU6OVrobiaqoktPYEN9HQyK4NjuW9VgrTAxfWs,11803
12
12
  uipath_langchain/_cli/_utils/_graph.py,sha256=WLBSJfPc3_C07SqJhePRe17JIc5wcBvEqLviMcNOdTA,6950
13
13
  uipath_langchain/_utils/__init__.py,sha256=Sp2qnEXLAp9ftQ09x7CZMenYnpXIIGFJNv8zNN7vAsw,172
14
14
  uipath_langchain/_utils/_request_mixin.py,sha256=t_1HWBxqEl-wsSk9ubmIM-8vs9BlNy4ZVBxtDxktn6U,18489
@@ -33,8 +33,8 @@ uipath_langchain/utils/_request_mixin.py,sha256=WFyTDyAthSci1DRwUwS21I3hLntD7HdV
33
33
  uipath_langchain/utils/_settings.py,sha256=MhwEVj4gVRSar0RBf2w2hTjO-5Qm-HpCuufqN3gSWjA,3390
34
34
  uipath_langchain/utils/_sleep_policy.py,sha256=e9pHdjmcCj4CVoFM1jMyZFelH11YatsgWfpyrfXzKBQ,1251
35
35
  uipath_langchain/vectorstores/context_grounding_vectorstore.py,sha256=eTa5sX43-ydB1pj9VNHUPbB-hC36fZK_CGrNe5U2Nrw,9393
36
- uipath_langchain-0.0.88.dist-info/METADATA,sha256=rSi1XhzmDNx8D5LB0F4lhuYTCrlNoMMU6bbTJHknIUY,3818
37
- uipath_langchain-0.0.88.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
- uipath_langchain-0.0.88.dist-info/entry_points.txt,sha256=FUtzqGOEntlJKMJIXhQUfT7ZTbQmGhke1iCmDWZaQZI,81
39
- uipath_langchain-0.0.88.dist-info/licenses/LICENSE,sha256=JDpt-uotAkHFmxpwxi6gwx6HQ25e-lG4U_Gzcvgp7JY,1063
40
- uipath_langchain-0.0.88.dist-info/RECORD,,
36
+ uipath_langchain-0.0.90.dist-info/METADATA,sha256=BVn0Hp0FpVC3BrXtGBfMNwixP9VapW8dxRyWCJvnutI,3818
37
+ uipath_langchain-0.0.90.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
38
+ uipath_langchain-0.0.90.dist-info/entry_points.txt,sha256=FUtzqGOEntlJKMJIXhQUfT7ZTbQmGhke1iCmDWZaQZI,81
39
+ uipath_langchain-0.0.90.dist-info/licenses/LICENSE,sha256=JDpt-uotAkHFmxpwxi6gwx6HQ25e-lG4U_Gzcvgp7JY,1063
40
+ uipath_langchain-0.0.90.dist-info/RECORD,,