vellum-ai 0.11.4__py3-none-any.whl → 0.11.6__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,7 +17,7 @@ class BaseClientWrapper:
17
17
  headers: typing.Dict[str, str] = {
18
18
  "X-Fern-Language": "Python",
19
19
  "X-Fern-SDK-Name": "vellum-ai",
20
- "X-Fern-SDK-Version": "0.11.4",
20
+ "X-Fern-SDK-Version": "0.11.6",
21
21
  }
22
22
  headers["X_API_KEY"] = self.api_key
23
23
  return headers
@@ -87,6 +87,13 @@ class WorkflowParentContext(BaseParentContext):
87
87
  workflow_definition: VellumCodeResourceDefinition
88
88
 
89
89
 
90
+ class WorkflowSandboxParentContext(BaseParentContext):
91
+ type: Literal["WORKFLOW_SANDBOX"] = "WORKFLOW_SANDBOX"
92
+ sandbox_id: UUID
93
+ sandbox_history_item_id: UUID
94
+ scenario_id: UUID
95
+
96
+
90
97
  # Define the discriminated union
91
98
  ParentContext = Annotated[
92
99
  Union[
@@ -94,6 +101,7 @@ ParentContext = Annotated[
94
101
  NodeParentContext,
95
102
  WorkflowDeploymentParentContext,
96
103
  PromptDeploymentParentContext,
104
+ WorkflowSandboxParentContext,
97
105
  ],
98
106
  Field(discriminator="type"),
99
107
  ]
@@ -57,7 +57,7 @@ class BaseNodeMeta(type):
57
57
  dct["Ports"] = type(
58
58
  f"{name}.Ports",
59
59
  (NodePorts,),
60
- dict(dct["Ports"].__dict__),
60
+ {**dct["Ports"].__dict__, "__module__": dct["__module__"]},
61
61
  )
62
62
  else:
63
63
  for base in reversed(bases):
@@ -160,6 +160,7 @@ Message: {event.error.message}""",
160
160
  "__module__": dynamic_module,
161
161
  "on_error_code": _on_error_code,
162
162
  "subworkflow": Subworkflow,
163
+ "Ports": type("Ports", (TryNode.Ports,), {port.name: port.copy() for port in inner_cls.Ports}),
163
164
  },
164
165
  )
165
166
  return WrappedNode
@@ -1,3 +1,4 @@
1
+ import inspect
1
2
  from typing import Any, ClassVar, Dict, Generic, List, Optional, Sequence, Tuple, Type, TypeVar, cast, get_args
2
3
 
3
4
  from vellum import (
@@ -189,7 +190,8 @@ class CodeExecutionNode(BaseNode[StateType], Generic[StateType, _OutputType], me
189
190
  return compiled_inputs
190
191
 
191
192
  def _resolve_code(self) -> str:
192
- code = read_file_from_path(self.filepath)
193
+ root = inspect.getfile(self.__class__)
194
+ code = read_file_from_path(node_filepath=root, script_filepath=self.filepath)
193
195
  if not code:
194
196
  raise NodeException(
195
197
  message=f"Filepath '{self.filepath}' does not exist",
@@ -2,21 +2,11 @@ import os
2
2
  from typing import Union
3
3
 
4
4
 
5
- def get_project_root() -> str:
6
- current_dir = os.getcwd()
7
- while current_dir != "/":
8
- if ".git" in os.listdir(current_dir):
9
- return current_dir
10
- current_dir = os.path.dirname(current_dir)
11
- raise FileNotFoundError("Project root not found.")
12
-
13
-
14
- def read_file_from_path(filepath: str) -> Union[str, None]:
15
- project_root = get_project_root()
16
- relative_filepath = os.path.join(project_root, filepath)
17
-
18
- if not os.path.exists(relative_filepath):
19
- return None
20
-
21
- with open(relative_filepath) as file:
22
- return file.read()
5
+ def read_file_from_path(node_filepath: str, script_filepath: str) -> Union[str, None]:
6
+ node_filepath_dir = os.path.dirname(node_filepath)
7
+ full_filepath = os.path.join(node_filepath_dir, script_filepath)
8
+
9
+ if os.path.isfile(full_filepath):
10
+ with open(full_filepath) as file:
11
+ return file.read()
12
+ return None
@@ -40,6 +40,14 @@ class Port:
40
40
  def __repr__(self) -> str:
41
41
  return f"{self.node_class}.Ports.{self.name}"
42
42
 
43
+ def copy(self) -> "Port":
44
+ return Port(
45
+ default=self.default,
46
+ fork_state=self._fork_state,
47
+ condition=self._condition,
48
+ condition_type=self._condition_type,
49
+ )
50
+
43
51
  @property
44
52
  def fork_state(self) -> bool:
45
53
  return self._fork_state
@@ -264,7 +264,6 @@ class WorkflowRunner(Generic[StateType]):
264
264
  )
265
265
  )
266
266
 
267
- invoked_ports = ports(outputs, node.state)
268
267
  node.state.meta.node_execution_cache.fulfill_node_execution(node.__class__, span_id)
269
268
 
270
269
  for descriptor, output_value in outputs:
@@ -275,6 +274,7 @@ class WorkflowRunner(Generic[StateType]):
275
274
 
276
275
  node.state.meta.node_outputs[descriptor] = output_value
277
276
 
277
+ invoked_ports = ports(outputs, node.state)
278
278
  self._workflow_event_inner_queue.put(
279
279
  NodeExecutionFulfilledEvent(
280
280
  trace_id=node.state.meta.trace_id,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.11.4
3
+ Version: 0.11.6
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -28,9 +28,9 @@ vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6m
28
28
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
29
29
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nmPLj8vkbVCS46XQqmHq8Xj8Mr36wCK_vWf26A9KIkw,1505
30
30
  vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=4SSQGecKWHuoGy5YIGJeOZVHGKwTs_8Y-gf3GvsHb0M,8506
31
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=MASV7u0X4eiS3SzRWeBcbWZ_YgNlwwg5cM2vaFWjpqk,3915
31
+ vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=HzB4zQ6MYlRII9GsZcBPzOswFUuwBjn-b3FuDLNyujg,4025
32
32
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=gUbSP8_oSAMNIb0CGiefd2FMYgoO6wMoG6iA1FakMjk,13293
33
- vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=1pGC_P-y14g0hJRh4GUq99xu48JsfoPMMwtIsI3x3Tk,2078
33
+ vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=ygTjSjYDI4DtkxADWub5rhBnRWItMKWF6fezBrgpOKA,1979
34
34
  vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=UezalObmZ3mcg7Nou2RgiI_0cmc7_tSdZLNB591iCcI,2772
35
35
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=3TJvHX_Uuf_gr94VkYc_zmNH8I5p71ChIeoAbJZ3ddY,2158
36
36
  vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=sj-pySLVYGt032debhcQhHc5JwrALQrNCEKh3DXc8F8,7386
@@ -39,20 +39,20 @@ vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=AqUlItgSZij12qRKguKV
39
39
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=BM3nfL0-D8x91xW0MGhnJFo45ZgGLXDqdbiSGoSuXN0,3244
40
40
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=9VpC3h0RYOxJuRbjDwidBYlLKakkmlEnDMBh2C7lHcY,1107
41
41
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=gLRkizwyw21-Z12IyDbdOJpXayiZZd4HWd6qgZQg8sc,3106
42
- vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=4KHb2icxH_vHF1GvGp_9ar_flSWthXrGZk6zMa17J_8,8430
42
+ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=BQEqi6_65h7PmP-FhBF0zUB3MBLA65DkZLU9IdS3iyA,8668
43
43
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=zOp4voBSgB3MR1R93wTOrsiiara_hxEAYFupLl_SvTA,2657
44
44
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=UNYxoE-89agE8ugK0aWg_uN61jPqlC2VSxWHk568sN4,3324
45
45
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=ZUp2fmDF4JTni1NjJOIV8dJoxx22eMBskmBJFsjtEvE,3809
47
47
  vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=m4d6hi6oD-jSW_bjrlN8coVwb6ivC2amPHpePHJ-Htg,2278
48
- vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=OlkXZASm1Zb3mLf38gd-NXcijtVn4UFptsRq-OFzArA,3882
48
+ vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=golxvSM6HIZ4uYKbfcI7muVJuckFZQcGFCAFvfx4Cls,4654
49
49
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=TEg3QbdE7rLbEhml9pMWmay--phsekGlfGVhTblxCGE,1727
51
51
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=e__ae2yepB5vlgVT08sr1DDB8pYjax6VQLo5FtRk-nA,17934
53
53
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=0McMPIPnIwE8iGh7fzFZL3dc6Q7NCQ_wUVFpl14YATo,22846
54
54
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=d6xWDvi-Uo1KcMHVj_e8TujKhTwMKXAlT8H3P2V0gQU,53693
55
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=JV9TYz9BPVojWQ8ypGLsSfl9LdntDcxlm9OilP4qv6o,6874
55
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=MGwIwhCBCVYZmE_8Srts3fEs0BcRqXFFVbqiHiBQ55Q,6798
56
56
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=vA8cd7PJYhf949OUGeYP_moKtMogSyfHN2Z-qzNQLwM,8294
57
57
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=N2ACycHn-EwP5paxHwDu2fufABssE293wiunhm-bCGg,22076
58
58
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=H1bVDG_mFPokJ7OYrnl9rM9M3gEa5bctGmhUuKccB4U,15950
@@ -78,7 +78,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
78
78
  vellum/client/__init__.py,sha256=o4m7iRZWEV8rP3GkdaztHAjNmjxjWERlarviFoHzuKI,110927
79
79
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
80
80
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
81
- vellum/client/core/client_wrapper.py,sha256=2kb_aZbadYgFs7fHp9vZCvmnzLko_U_VPmjLg8Jnnyw,1890
81
+ vellum/client/core/client_wrapper.py,sha256=xZCaeJ0zVTtxXqFRe54cEDIyxXqbJlQAZ5gQGXg4sSc,1890
82
82
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
83
83
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
84
84
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -1220,7 +1220,7 @@ vellum/workflows/events/__init__.py,sha256=6pxxceJo2dcaRkWtkDAYlUQZ-PHBQSZytIoyu
1220
1220
  vellum/workflows/events/node.py,sha256=3_NPVhXR-XMnNj5QVA_ycebs_-jRuGSLf5H7XjLQh8o,5258
1221
1221
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1222
1222
  vellum/workflows/events/tests/test_event.py,sha256=IBP_fCT_kPDdSCdgDCo7eaG7MYUR6aF4EFxwFIr9lbA,12717
1223
- vellum/workflows/events/types.py,sha256=RtwwmupUS65en_mprGWmt_VHP22sMpErhIwwpgPmvME,2846
1223
+ vellum/workflows/events/types.py,sha256=7sBSMNstsibqq93Klu4A-GInzo4IB23xWel595Uyi_Y,3077
1224
1224
  vellum/workflows/events/workflow.py,sha256=02UZE4sBpWrG2A3xddu8v0S9kPfo7YetX6xTvzKg-2w,5218
1225
1225
  vellum/workflows/exceptions.py,sha256=Dc7mxstsaMDRmS91QEOiZCbZ1ZIRacnm0l5lQmC6WkA,401
1226
1226
  vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1259,7 +1259,7 @@ vellum/workflows/inputs/base.py,sha256=1kMgr0WqCYdWUqgFvgSoAMw2067FAlgwhGXLgbIOr
1259
1259
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1260
1260
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1261
1261
  vellum/workflows/nodes/bases/__init__.py,sha256=Ll1Ti6t3e_HKtGLsQTHAJevDmfo0QtfgPZUZ9FCRduI,140
1262
- vellum/workflows/nodes/bases/base.py,sha256=fKEycP9yqcHjH781d4Sg5NFHZFDsbco0nunrU3T1kjc,14025
1262
+ vellum/workflows/nodes/bases/base.py,sha256=atWeRf3BgTZpy5L3Mm47D6dca_sYKfSr5D3-fruwX_k,14056
1263
1263
  vellum/workflows/nodes/bases/base_subworkflow_node/__init__.py,sha256=0nkHQiFC4IpA1ZGx60XG0BLUWF6hwUpgqmS3ZrlFGhg,80
1264
1264
  vellum/workflows/nodes/bases/base_subworkflow_node/node.py,sha256=vC0gUBQewAUNtP3i2G0-LUpE_kY-r_ijBD_tS1XkQ1E,383
1265
1265
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1284,7 +1284,7 @@ vellum/workflows/nodes/core/templating_node/node.py,sha256=19OFvRimrp1YuUO7H4rU7
1284
1284
  vellum/workflows/nodes/core/templating_node/render.py,sha256=OpJp0NAH6qcEL6K9lxR0qjpFb75TYNttJR5iCos8tmg,1792
1285
1285
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=0BtXeSix7KGIuKzlPFTMLATpNnFPhut1UV_srGptkt0,1120
1286
1286
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1287
- vellum/workflows/nodes/core/try_node/node.py,sha256=5LHTPFsJHZ0eZZbXdmNswj1sLs93W8Pa1dp6JSZBnPM,6538
1287
+ vellum/workflows/nodes/core/try_node/node.py,sha256=XS-xZaJ_tM3sS-FjWU-FCk9x4Id2lrniyknORgg0KjA,6654
1288
1288
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1289
1289
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=iD_ZjgB-v7pOYS6VjsqC-FWAFw8xvnEb-xXeau1Cuk0,4053
1290
1290
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
@@ -1301,12 +1301,12 @@ vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=1_OXD
1301
1301
  vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=MdrAKN8QGPk_JnNjbEBaVVKwVLPE2judbBcWuYJgbkY,4964
1302
1302
  vellum/workflows/nodes/displayable/bases/search_node.py,sha256=S7J8tTW681O4wcWYerGOfH6h-_BlE8-JMJHpW8eCVG0,3564
1303
1303
  vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
1304
- vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=zK-gxWmox8QZ84J11faUmasRozNKDIBv_86Gjq8uj7M,7975
1304
+ vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=uwT_sn-XT0uYe7E-0DcJfcb3X33pwE0sw-2ri7FhoTo,8073
1305
1305
  vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1306
1306
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1307
1307
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
1308
1308
  vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=2Kr7fKtjc1fW5z_6z6noKfWoETIVJbYi0AGhhSw-hsU,3376
1309
- vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=LODnO8_KTxKWLTDbjR0CbrtoUHwdcwv-lBJM-CPcuyc,609
1309
+ vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=LfI3kj2zQz6UGMld_uA9z2LjZobqRcgxQO4jdUWkg7o,376
1310
1310
  vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
1311
1311
  vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=REFZdEVetXGyOK1RbIN1T6yRblrP0hfyZUls2KfjTKg,1016
1312
1312
  vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
@@ -1334,7 +1334,7 @@ vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfv
1334
1334
  vellum/workflows/outputs/base.py,sha256=a7W6rNSDSawwGAXYjNTF2iHb9lnZu7WFSOagZIyy__k,7976
1335
1335
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1336
1336
  vellum/workflows/ports/node_ports.py,sha256=g4A-8iUAvEJSkaWppbvzAR8XU02R9U-qLN4rP2Kq4Aw,2743
1337
- vellum/workflows/ports/port.py,sha256=4vTvhe9FE5SO5WwwAmJm2ApBBBxZv9fsyUoikPIgiaI,2947
1337
+ vellum/workflows/ports/port.py,sha256=rc3GB7dDQCUs0IbY08a92-31YzJHQgBeww13brSJ2Js,3172
1338
1338
  vellum/workflows/ports/utils.py,sha256=pEjVNJKw9LhD_cFN-o0MWBOW2ejno7jv26qqzjLxwS4,1662
1339
1339
  vellum/workflows/references/__init__.py,sha256=glHFC1VfXmcbNvH5VzFbkT03d8_D7MMcvEcsUBrzLIs,591
1340
1340
  vellum/workflows/references/environment_variable.py,sha256=7FFtiKfc4eyVkkfUbhc666OBNDqvFlMoNQEYmGpEVVE,661
@@ -1350,7 +1350,7 @@ vellum/workflows/references/workflow_input.py,sha256=epspVRZ9n_nxoTxI5Am3GDd2fpU
1350
1350
  vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
1351
1351
  vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
1352
1352
  vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
1353
- vellum/workflows/runner/runner.py,sha256=TtCB2hLnAU83mmR17qzfHQPfJfpUMqi3Lqq0q1viUIQ,27573
1353
+ vellum/workflows/runner/runner.py,sha256=7mSVaqJjyVljuuy3-bIO56mzXXMeQwKcYzZOuo8aC8E,27573
1354
1354
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1355
1355
  vellum/workflows/state/base.py,sha256=jpSzF1OQd3-fqi6dMGlNsQl-7JnJxCdzWIigmX8Wz-I,14425
1356
1356
  vellum/workflows/state/context.py,sha256=oXiEdNsWJi1coRB85IreTgUeR6_CrWWBXndtLff9S7M,1272
@@ -1377,8 +1377,8 @@ vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528
1377
1377
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1378
1378
  vellum/workflows/workflows/base.py,sha256=mnI-kZ78yt7u6NFSTUo-tYjDnarP-RJ7uZjwjCn6PCQ,16795
1379
1379
  vellum/workflows/workflows/event_filters.py,sha256=-uQcMB7IpPd-idMku8f2QNVhPXPFWo6FZLlGjRf8rCo,1996
1380
- vellum_ai-0.11.4.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1381
- vellum_ai-0.11.4.dist-info/METADATA,sha256=jsthltxAbW8_ohEuJ38axnhG6JBG-DLG6p2bwAgcAwA,5128
1382
- vellum_ai-0.11.4.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
1383
- vellum_ai-0.11.4.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1384
- vellum_ai-0.11.4.dist-info/RECORD,,
1380
+ vellum_ai-0.11.6.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1381
+ vellum_ai-0.11.6.dist-info/METADATA,sha256=PlJ1b2Y0mTg3Ob_st_UHH7dOU5JqNqQI2-1akD7YOZs,5128
1382
+ vellum_ai-0.11.6.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
1383
+ vellum_ai-0.11.6.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1384
+ vellum_ai-0.11.6.dist-info/RECORD,,
@@ -1,3 +1,4 @@
1
+ import inspect
1
2
  from uuid import UUID
2
3
  from typing import ClassVar, Dict, Generic, Optional, TypeVar
3
4
 
@@ -28,7 +29,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
28
29
  node = self._node
29
30
  node_id = self.node_id
30
31
 
31
- code = read_file_from_path(raise_if_descriptor(node.filepath))
32
+ node_file_path = inspect.getfile(node)
33
+ code = read_file_from_path(node_filepath=node_file_path, script_filepath=(raise_if_descriptor(node.filepath)))
32
34
  code_inputs = raise_if_descriptor(node.code_inputs)
33
35
 
34
36
  inputs = [
@@ -39,7 +39,6 @@ class BaseErrorNodeDisplay(BaseNodeVellumDisplay[_ErrorNodeType], Generic[_Error
39
39
  "data": {
40
40
  "name": self.name,
41
41
  "label": self.label,
42
- "source_handle_id": str(self.get_source_handle_id(display_context.port_displays)),
43
42
  "target_handle_id": str(self.get_target_handle_id()),
44
43
  "error_source_input_id": str(error_source_input_id),
45
44
  "error_output_id": str(self.error_output_id),
@@ -15,7 +15,7 @@ from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
15
15
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
16
16
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
17
17
  from vellum_ee.workflows.display.utils.uuids import uuid4_from_hash
18
- from vellum_ee.workflows.display.vellum import NodeInput
18
+ from vellum_ee.workflows.display.vellum import InputVariablePointer, NodeInput
19
19
 
20
20
  _SearchNodeType = TypeVar("_SearchNodeType", bound=SearchNode)
21
21
 
@@ -28,7 +28,7 @@ class VariableIdMap:
28
28
 
29
29
 
30
30
  class BaseSearchNodeDisplay(BaseNodeVellumDisplay[_SearchNodeType], Generic[_SearchNodeType]):
31
- variable_ids: Optional[VariableIdMap] = None
31
+ input_variable_ids_by_logical_id: Optional[Dict[str, str]] = None
32
32
 
33
33
  def serialize(
34
34
  self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs
@@ -128,7 +128,6 @@ class BaseSearchNodeDisplay(BaseNodeVellumDisplay[_SearchNodeType], Generic[_Sea
128
128
  logical_expression: Union[VellumValueLogicalConditionGroupRequest, VellumValueLogicalConditionRequest],
129
129
  display_context: WorkflowDisplayContext,
130
130
  path: List[int] = [],
131
- variable_id_map: Optional[VariableIdMap] = None,
132
131
  ) -> Tuple[JsonObject, List[NodeInput]]:
133
132
  if isinstance(logical_expression, VellumValueLogicalConditionGroupRequest):
134
133
  conditions: JsonArray = []
@@ -150,38 +149,42 @@ class BaseSearchNodeDisplay(BaseNodeVellumDisplay[_SearchNodeType], Generic[_Sea
150
149
  variables,
151
150
  )
152
151
  elif isinstance(logical_expression, VellumValueLogicalConditionRequest):
153
- lhs_variable_id = (
154
- variable_id_map.lhs.id
155
- if variable_id_map and variable_id_map.lhs and variable_id_map.lhs.id
156
- else uuid4_from_hash(f"{self.node_id}|{hash(tuple(path))}|lhs")
152
+ lhs_variable_id = str(logical_expression.lhs_variable.value)
153
+ rhs_variable_id = str(logical_expression.rhs_variable.value)
154
+ lhs_query_input_id = (
155
+ self.input_variable_ids_by_logical_id[lhs_variable_id]
156
+ if self.input_variable_ids_by_logical_id
157
+ else uuid4_from_hash(f"{self.node_id}|{hash(path)}")
157
158
  )
158
- rhs_variable_id = (
159
- variable_id_map.rhs.id
160
- if variable_id_map and variable_id_map.rhs and variable_id_map.rhs.id
161
- else uuid4_from_hash(f"{self.node_id}|{hash(tuple(path))}|rhs")
159
+ rhs_query_input_id = (
160
+ self.input_variable_ids_by_logical_id[rhs_variable_id]
161
+ if self.input_variable_ids_by_logical_id
162
+ else uuid4_from_hash(f"{self.node_id}|{hash(path)}")
162
163
  )
163
164
 
164
165
  return (
165
166
  {
166
167
  "type": "LOGICAL_CONDITION",
167
- "lhs": str(lhs_variable_id),
168
+ "lhs_variable_id": str(lhs_variable_id),
168
169
  "operator": logical_expression.operator,
169
- "rhs": str(rhs_variable_id),
170
+ "rhs_variable_id": str(rhs_variable_id),
170
171
  },
171
172
  [
172
173
  create_node_input(
173
174
  self.node_id,
174
175
  f"vellum-query-builder-variable-{lhs_variable_id}",
175
- logical_expression.lhs_variable.value,
176
+ lhs_query_input_id,
176
177
  display_context,
177
- input_id=lhs_variable_id,
178
+ input_id=UUID(lhs_variable_id),
179
+ pointer_type=InputVariablePointer,
178
180
  ),
179
181
  create_node_input(
180
182
  self.node_id,
181
183
  f"vellum-query-builder-variable-{rhs_variable_id}",
182
- logical_expression.rhs_variable.value,
184
+ rhs_query_input_id,
183
185
  display_context,
184
- input_id=rhs_variable_id,
186
+ input_id=UUID(rhs_variable_id),
187
+ pointer_type=InputVariablePointer,
185
188
  ),
186
189
  ],
187
190
  )
@@ -10,6 +10,10 @@ from vellum_ee.workflows.display.utils.uuids import uuid4_from_hash
10
10
  from vellum_ee.workflows.display.utils.vellum import create_node_input_value_pointer_rule, primitive_to_vellum_value
11
11
  from vellum_ee.workflows.display.vellum import (
12
12
  ConstantValuePointer,
13
+ ExecutionCounterData,
14
+ ExecutionCounterPointer,
15
+ InputVariableData,
16
+ InputVariablePointer,
13
17
  NodeInput,
14
18
  NodeInputValuePointer,
15
19
  NodeInputValuePointerRule,
@@ -93,4 +97,15 @@ def create_pointer(
93
97
  )
94
98
 
95
99
  vellum_variable_value = primitive_to_vellum_value(value)
96
- return ConstantValuePointer(type="CONSTANT_VALUE", data=vellum_variable_value)
100
+ if pointer_type is InputVariablePointer:
101
+ return InputVariablePointer(type="INPUT_VARIABLE", data=InputVariableData(input_variable_id=value))
102
+ elif pointer_type is WorkspaceSecretPointer:
103
+ return WorkspaceSecretPointer(
104
+ type="WORKSPACE_SECRET", data=WorkspaceSecretData(type="STRING", workspace_secret_id=value)
105
+ )
106
+ elif pointer_type is ExecutionCounterPointer:
107
+ return ExecutionCounterPointer(type="EXECUTION_COUNTER", data=ExecutionCounterData(node_id=value))
108
+ elif pointer_type is ConstantValuePointer or pointer_type is None:
109
+ return ConstantValuePointer(type="CONSTANT_VALUE", data=vellum_variable_value)
110
+ else:
111
+ raise ValueError(f"Pointer type {pointer_type} not supported")
@@ -102,7 +102,6 @@ def test_serialize_workflow():
102
102
  "data": {
103
103
  "name": "error-node",
104
104
  "label": "Fail Node",
105
- "source_handle_id": "ca17d318-a0f5-4f7c-be6c-59c9dc1dd7ed",
106
105
  "target_handle_id": "70c19f1c-309c-4a5d-ba65-664c0bb2fedf",
107
106
  "error_source_input_id": "None",
108
107
  "error_output_id": "None",