vellum-ai 1.3.3__py3-none-any.whl → 1.3.5__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.
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/types/function_definition.py +5 -0
- vellum/client/types/scenario_input_audio_variable_value.py +1 -1
- vellum/client/types/scenario_input_document_variable_value.py +1 -1
- vellum/client/types/scenario_input_image_variable_value.py +1 -1
- vellum/client/types/scenario_input_video_variable_value.py +1 -1
- vellum/workflows/events/node.py +1 -1
- vellum/workflows/events/tests/test_event.py +1 -1
- vellum/workflows/events/workflow.py +1 -1
- vellum/workflows/nodes/bases/base.py +2 -5
- vellum/workflows/nodes/core/map_node/node.py +8 -1
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +2 -2
- vellum/workflows/nodes/displayable/guardrail_node/node.py +8 -3
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +4 -0
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +17 -2
- vellum/workflows/outputs/base.py +11 -11
- vellum/workflows/references/output.py +3 -5
- vellum/workflows/resolvers/resolver.py +18 -2
- vellum/workflows/resolvers/tests/test_resolver.py +121 -0
- vellum/workflows/runner/runner.py +17 -17
- vellum/workflows/state/encoder.py +0 -37
- vellum/workflows/utils/functions.py +35 -0
- vellum/workflows/workflows/base.py +9 -1
- {vellum_ai-1.3.3.dist-info → vellum_ai-1.3.5.dist-info}/METADATA +1 -1
- {vellum_ai-1.3.3.dist-info → vellum_ai-1.3.5.dist-info}/RECORD +39 -37
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +18 -2
- vellum_ee/workflows/display/tests/test_base_workflow_display.py +99 -2
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py +85 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +2 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py +88 -0
- vellum_ee/workflows/display/utils/events.py +1 -0
- vellum_ee/workflows/display/utils/expressions.py +56 -0
- vellum_ee/workflows/display/utils/tests/test_events.py +11 -1
- vellum_ee/workflows/display/utils/vellum.py +3 -1
- vellum_ee/workflows/display/workflows/base_workflow_display.py +41 -27
- {vellum_ai-1.3.3.dist-info → vellum_ai-1.3.5.dist-info}/LICENSE +0 -0
- {vellum_ai-1.3.3.dist-info → vellum_ai-1.3.5.dist-info}/WHEEL +0 -0
- {vellum_ai-1.3.3.dist-info → vellum_ai-1.3.5.dist-info}/entry_points.txt +0 -0
@@ -135,6 +135,9 @@ def _compile_workflow_deployment_input(input_var: Any) -> dict[str, Any]:
|
|
135
135
|
def compile_function_definition(function: Callable) -> FunctionDefinition:
|
136
136
|
"""
|
137
137
|
Converts a Python function into our Vellum-native FunctionDefinition type.
|
138
|
+
|
139
|
+
Args:
|
140
|
+
function: The Python function to compile
|
138
141
|
"""
|
139
142
|
|
140
143
|
try:
|
@@ -142,10 +145,18 @@ def compile_function_definition(function: Callable) -> FunctionDefinition:
|
|
142
145
|
except ValueError as e:
|
143
146
|
raise ValueError(f"Failed to get signature for function {function.__name__}: {str(e)}")
|
144
147
|
|
148
|
+
# Get inputs from the decorator if present
|
149
|
+
inputs = getattr(function, "__vellum_inputs__", {})
|
150
|
+
exclude_params = set(inputs.keys())
|
151
|
+
|
145
152
|
properties = {}
|
146
153
|
required = []
|
147
154
|
defs: dict[str, Any] = {}
|
148
155
|
for param in signature.parameters.values():
|
156
|
+
# Skip parameters that are in the exclude_params set
|
157
|
+
if exclude_params and param.name in exclude_params:
|
158
|
+
continue
|
159
|
+
|
149
160
|
# Check if parameter uses Annotated type hint
|
150
161
|
if get_origin(param.annotation) is Annotated:
|
151
162
|
args = get_args(param.annotation)
|
@@ -248,3 +259,27 @@ def compile_workflow_deployment_function_definition(
|
|
248
259
|
description=description,
|
249
260
|
parameters=parameters,
|
250
261
|
)
|
262
|
+
|
263
|
+
|
264
|
+
def use_tool_inputs(**inputs):
|
265
|
+
"""
|
266
|
+
Decorator to specify which parameters of a tool function should be provided
|
267
|
+
from the parent workflow inputs rather than from the LLM.
|
268
|
+
|
269
|
+
Args:
|
270
|
+
**inputs: Mapping of parameter names to parent input references
|
271
|
+
|
272
|
+
Example:
|
273
|
+
@use_tool_inputs(
|
274
|
+
parent_input=ParentInputs.parent_input,
|
275
|
+
)
|
276
|
+
def get_string(parent_input: str, user_query: str) -> str:
|
277
|
+
return f"Parent: {parent_input}, Query: {user_query}"
|
278
|
+
"""
|
279
|
+
|
280
|
+
def decorator(func: Callable) -> Callable:
|
281
|
+
# Store the inputs mapping on the function for later use
|
282
|
+
setattr(func, "__vellum_inputs__", inputs)
|
283
|
+
return func
|
284
|
+
|
285
|
+
return decorator
|
@@ -1,3 +1,4 @@
|
|
1
|
+
from dataclasses import field
|
1
2
|
from datetime import datetime
|
2
3
|
from functools import lru_cache
|
3
4
|
import importlib
|
@@ -199,6 +200,12 @@ class _BaseWorkflowMeta(type):
|
|
199
200
|
if inputs_class is not BaseInputs and inputs_class.__parent_class__ is type(None):
|
200
201
|
inputs_class.__parent_class__ = workflow_class
|
201
202
|
|
203
|
+
# TODO: Uncomment this once we figure out why it's causing the ipython reload test to fail
|
204
|
+
# workflow_class.Outputs.__parent_class__ = workflow_class
|
205
|
+
workflow_class.__output_ids__ = {
|
206
|
+
ref.name: uuid4_from_hash(f"{workflow_class.__id__}|id|{ref.name}") for ref in workflow_class.Outputs
|
207
|
+
}
|
208
|
+
|
202
209
|
return workflow_class
|
203
210
|
|
204
211
|
|
@@ -207,6 +214,7 @@ GraphAttribute = Union[Type[BaseNode], Graph, Set[Type[BaseNode]], Set[Graph]]
|
|
207
214
|
|
208
215
|
class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
209
216
|
__id__: UUID = uuid4_from_hash(__qualname__)
|
217
|
+
__output_ids__: Dict[str, UUID] = {}
|
210
218
|
graph: ClassVar[GraphAttribute]
|
211
219
|
unused_graphs: ClassVar[Set[GraphAttribute]] # nodes or graphs that are defined but not used in the graph
|
212
220
|
emitters: List[BaseWorkflowEmitter]
|
@@ -214,7 +222,7 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
|
|
214
222
|
is_dynamic: ClassVar[bool] = False
|
215
223
|
|
216
224
|
class Outputs(BaseOutputs):
|
217
|
-
|
225
|
+
__parent_class__: Type["BaseWorkflow"] = field(init=False)
|
218
226
|
|
219
227
|
WorkflowEvent = Union[ # type: ignore
|
220
228
|
GenericWorkflowEvent,
|
@@ -39,7 +39,7 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
39
39
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
40
40
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=TD23uXA4vhRvsfiq7B10XHpFnsS1CA9M7WH9jsOYNB0,9242
|
41
41
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=FHhPoGmmny4Xcxi2pm12Sk3ZOREanWEVrOWcjRhncH4,6337
|
42
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=GfwA2Tn0OpdIUiPW9tD2dyv33e3M8yhGt9VfOeN81bU,5146
|
43
43
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=dtO9A-rjbDEJrywwrOxwEXahqrW-S493OIDHOti9Sjs,11498
|
44
44
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=8tSb8qGVoRIELubu0qPeoDlt1LpiIqc6d9_30GWRd_k,2266
|
45
45
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=eeu8i01HbLDvO3KwHnAfaMrYKiEchNAdDdjufjCi6OU,2991
|
@@ -72,7 +72,7 @@ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=rHybfUAWwa0L
|
|
72
72
|
vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=47fOnSCEFnY8th9m2yTYlgnoUuzgyRZdjg-SXwn--lk,4079
|
73
73
|
vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
|
74
74
|
vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
|
-
vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=
|
75
|
+
vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=fh-F7TmzOSiWEBwhtd3Nm_Ix9v5W4LhMNhiIxT7G100,15990
|
76
76
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
77
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
78
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=Y-ajeT65b5varmrZCw6L3hir4hJCFq-eO0jZfRcrs7g,1886
|
@@ -88,7 +88,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_stat
|
|
88
88
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=03Mk8OE3kWcoZW9lNBe7v4KThCYN-pXg5Rjbkfx-jOQ,6031
|
89
89
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=-T0cd2jx1bC0ZNtAESF78fnYD_0nOqo8zMMLwRHUTRM,6227
|
90
90
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=LnZp1YXDn-AaaxiYgxrhCQeH-rLgmlu_r_lvM65EQ5w,7517
|
91
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=
|
91
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=9w90pk1DzX2PDRML401bZpD9hdTW53Dw5oGb58mxpiw,26358
|
92
92
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=yKmOyunzt5_0cUcqhvCmV2pu81TTkshVi_uN3yt76Wc,21816
|
93
93
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=W4--Ldih7mRMnfyJ9G7kdyeoKkeebSu_5d33TJQzShU,16735
|
94
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=UnfWTfKN8DrOLpjCfWMgENJBjgNLWcRVfexbwERKY-c,8501
|
@@ -100,26 +100,28 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_nod
|
|
100
100
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=oVXCjkU0G56QJmqnd_xIwF3D9bhJwALFibM2wmRhwUk,3739
|
101
101
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=Sg82qV5NCzQDy-RD90hA6QaHgFHOq6ESNkbWXygsnNw,26367
|
102
102
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py,sha256=QhQbijeCnFeX1i3SMjHJg2WVAEt5JEO3dhFRv-mofdA,2458
|
103
|
-
vellum_ee/workflows/display/tests/workflow_serialization/
|
103
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py,sha256=HMMa4liBACtL7vU2b-9Ui8Oltyxxb5dbAf-CziLGCes,4284
|
104
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=cKaxme5vUIvKa8aBU7xdeFxXF9wVZ5fW3T5Ie5vToU0,10152
|
104
105
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=XIZZr5POo2NLn2uEWm9EC3rejeBMoO4X-JtzTH6mvp4,4074
|
105
106
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
|
106
107
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
|
108
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_final_output_node_map_reference_serialization.py,sha256=vl3pxUJlrYRA8zzFJ-gRm7fe-5fviLNSIsUC7imnMqk,3502
|
107
109
|
vellum_ee/workflows/display/tests/workflow_serialization/test_web_search_node_serialization.py,sha256=vbDFBrWUPeeW7cxjNA6SXrsHlYcbOAhlQ4C45Vdnr1c,3428
|
108
110
|
vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py,sha256=vAdmn3YTBDpo55znbydQxsgg9ASqHcvsUPwiBR_7wfo,1461
|
109
111
|
vellum_ee/workflows/display/types.py,sha256=cyZruu4sXAdHjwuFc7dydM4DcFNf-pp_CmulXItxac4,3679
|
110
112
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
111
113
|
vellum_ee/workflows/display/utils/auto_layout.py,sha256=f4GiLn_LazweupfqTpubcdtdfE_vrOcmZudSsnYIY9E,3906
|
112
|
-
vellum_ee/workflows/display/utils/events.py,sha256=
|
114
|
+
vellum_ee/workflows/display/utils/events.py,sha256=MEG2BT6GgAzkbv1dMaFpov5OShtaAZeAb1-g3xDFsAM,1826
|
113
115
|
vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
|
114
|
-
vellum_ee/workflows/display/utils/expressions.py,sha256=
|
116
|
+
vellum_ee/workflows/display/utils/expressions.py,sha256=ci6vOzfCwqVrSRI9A-HR7t4bz_reuS2kzr71SHYIloI,19118
|
115
117
|
vellum_ee/workflows/display/utils/registry.py,sha256=1qXiBTdsnro6FeCX0FGBEK7CIf6wa--Jt50iZ_nEp_M,3460
|
116
118
|
vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
117
119
|
vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
|
118
|
-
vellum_ee/workflows/display/utils/tests/test_events.py,sha256=
|
119
|
-
vellum_ee/workflows/display/utils/vellum.py,sha256=
|
120
|
+
vellum_ee/workflows/display/utils/tests/test_events.py,sha256=Qze6wEmFJx23_sKQhX-i329apWgMeS9zTptWlRca6Ko,4528
|
121
|
+
vellum_ee/workflows/display/utils/vellum.py,sha256=sZwU0KdmZZTKWW62SyxJTl2tC8tN6p_BpZ-lDoinV-U,5670
|
120
122
|
vellum_ee/workflows/display/vellum.py,sha256=J2mdJZ1sdLW535DDUkq_Vm8Z572vhuxHxVZF9deKSdk,391
|
121
123
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=JTB9ObEV3l4gGGdtfBHwVJtTTKC22uj-a-XjTVwXCyA,148
|
122
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
124
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=5PCZY37qMA3z1Qpu35Ot0koF5-iH4XVctlLzEMJ26OQ,43991
|
123
125
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
124
126
|
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=pb7BTH-ivRnya1LQU3j-MApWk_m8POpPNOdD0oEK82A,37847
|
125
127
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -153,7 +155,7 @@ vellum/client/README.md,sha256=b6XKeYBBbhQx0v1sHWfM0gIJeJhUFF-aqL2ig7ADa08,5564
|
|
153
155
|
vellum/client/__init__.py,sha256=T5Ht_w-Mk_9nzGqdadhQB8V20M0vYj7am06ut0A3P1o,73401
|
154
156
|
vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
|
155
157
|
vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
|
156
|
-
vellum/client/core/client_wrapper.py,sha256=
|
158
|
+
vellum/client/core/client_wrapper.py,sha256=Mh9pKr9Xxrby4VuKOk1M3W1PdfGhP8jsj32r0WIAdN8,2840
|
157
159
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
158
160
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
159
161
|
vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
|
@@ -420,7 +422,7 @@ vellum/client/types/function_call_prompt_block.py,sha256=YcuS0ndY-avXWIcG5UE9mNa
|
|
420
422
|
vellum/client/types/function_call_request.py,sha256=5nPW3gx-l9UN-9puJuDaEZKIkUJUd0glcRLaF0j1x_k,684
|
421
423
|
vellum/client/types/function_call_vellum_value.py,sha256=ITXP69WEE3yELyDylbpmLgIxnh4FWdNI14KkIX8boKA,723
|
422
424
|
vellum/client/types/function_call_vellum_value_request.py,sha256=9Xz4AZDQhtrUCICXdlq0IS9hpFr0bFHE6haf3g3Bn9c,752
|
423
|
-
vellum/client/types/function_definition.py,sha256=
|
425
|
+
vellum/client/types/function_definition.py,sha256=G4mQtdrJzC3I9984YfiyNmvozppEyWqt66NdZBqrgKc,1840
|
424
426
|
vellum/client/types/generate_options_request.py,sha256=2ZXU_zNraXRqcUwky8GqDAnhR10qb2NmcrIUaBFeF6w,746
|
425
427
|
vellum/client/types/generate_request.py,sha256=R_l2CmLeEF-GVIZHyV93Cbt6BBh2WklTslsyNbI3Vfo,1250
|
426
428
|
vellum/client/types/generate_response.py,sha256=_7F1PqE1aQLIBYqKLgw3UDQx7etR15sZgW-VzHfaaWA,1099
|
@@ -635,13 +637,13 @@ vellum/client/types/rich_text_child_block.py,sha256=JCC-6FLdxHG--gE-L6lJtRNI0pmn
|
|
635
637
|
vellum/client/types/rich_text_prompt_block.py,sha256=Te2qnJOiCgqV0gaiui8mVjnATX7mFNJjHqXDX4fd5jA,1000
|
636
638
|
vellum/client/types/sandbox_scenario.py,sha256=gaHbNzufZhibRGoo42Ryo6xZNRo30lLU39oSDS6mqIs,808
|
637
639
|
vellum/client/types/scenario_input.py,sha256=BxKRtG7u9boXbavG0kD-_-pFVk19LPzNFPZyfw64Lfo,967
|
638
|
-
vellum/client/types/scenario_input_audio_variable_value.py,sha256=
|
640
|
+
vellum/client/types/scenario_input_audio_variable_value.py,sha256=YsJ9vgdZtZ2KJkB-zK6xSQpg4LzRahQMdnIQVnqLTUw,680
|
639
641
|
vellum/client/types/scenario_input_chat_history_variable_value.py,sha256=FzXccgtyH9iTyGJJ6XcOM0TmzCMaPKWr1FmGtFCvxsQ,799
|
640
|
-
vellum/client/types/scenario_input_document_variable_value.py,sha256=
|
641
|
-
vellum/client/types/scenario_input_image_variable_value.py,sha256=
|
642
|
+
vellum/client/types/scenario_input_document_variable_value.py,sha256=xg-OOAbs7uegG9_O5fV3WhcUsM8hGXFeVL88-FJovec,698
|
643
|
+
vellum/client/types/scenario_input_image_variable_value.py,sha256=o3rwhVnXp3XCOKYSgLRzUXDo7k9WVIvqRCgL1hjyO18,680
|
642
644
|
vellum/client/types/scenario_input_json_variable_value.py,sha256=07_Fj9UOzMGvz1H0j1awmMz0Q6ErliwjgKVU_iUyZb8,716
|
643
645
|
vellum/client/types/scenario_input_string_variable_value.py,sha256=PI_pk-WOXVRBSW6PZKDZW11svxd2r9E6bCpl0zC0MTM,717
|
644
|
-
vellum/client/types/scenario_input_video_variable_value.py,sha256=
|
646
|
+
vellum/client/types/scenario_input_video_variable_value.py,sha256=6AxOsLtHNZv-1UyBue6fMs5_vLFCXidx7e_9kP0hHrs,680
|
645
647
|
vellum/client/types/search_filters_request.py,sha256=Moxewgl8KwjIy-VBistrchXQAqfsn5fkqO5R2UzLlI8,1276
|
646
648
|
vellum/client/types/search_node_result.py,sha256=2DbnKCus81-fj56IoGZqIL6Tw6hjf5jH0O2P_AXah8o,713
|
647
649
|
vellum/client/types/search_node_result_data.py,sha256=rXs0R0OG2pjTcE6bMp5lN6_cUusFiVUDwkC3pVo5l6o,810
|
@@ -1729,14 +1731,14 @@ vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy
|
|
1729
1731
|
vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
|
1730
1732
|
vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
|
1731
1733
|
vellum/workflows/events/context.py,sha256=vCfMIPmz4j9Om36rRWa35A_JU_VccWWS52_mZkkqxak,3345
|
1732
|
-
vellum/workflows/events/node.py,sha256=
|
1734
|
+
vellum/workflows/events/node.py,sha256=yHVd-rX2E3qc2XLnZr0fW6uq4ZCMm34mnY2tzYceyOg,5884
|
1733
1735
|
vellum/workflows/events/relational_threads.py,sha256=zmLrBCBYpdpQV0snKH3HleST-_hWAMy2LIT0xScfzi4,1516
|
1734
1736
|
vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
|
1735
1737
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1736
1738
|
vellum/workflows/events/tests/test_basic_workflow.py,sha256=Pj6orHsXz37jWC5FARi0Sx2Gjf99Owri2Cvr6Chb79k,1765
|
1737
|
-
vellum/workflows/events/tests/test_event.py,sha256=
|
1739
|
+
vellum/workflows/events/tests/test_event.py,sha256=V26TNmbo2aL4sDvcY3nPxCWgcoS4ejF-7VuesMeD04U,18451
|
1738
1740
|
vellum/workflows/events/types.py,sha256=mVrqAH9Hs9SpXm08Hcxdyap_ImQPwGsxRr56rSNMP34,5043
|
1739
|
-
vellum/workflows/events/workflow.py,sha256=
|
1741
|
+
vellum/workflows/events/workflow.py,sha256=kLSWFXiDZH0TELWoDjQ_kHVomFnw8MVVUPDGIzgyosw,8997
|
1740
1742
|
vellum/workflows/exceptions.py,sha256=NiBiR3ggfmPxBVqD-H1SqmjI-7mIn0EStSN1BqApvCM,1213
|
1741
1743
|
vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1742
1744
|
vellum/workflows/expressions/accessor.py,sha256=3lu1-_-dBfZdJvtX-q66jbmRAZtqIfdsh_3_JNuzg1E,4462
|
@@ -1797,7 +1799,7 @@ vellum/workflows/integrations/tests/test_mcp_service.py,sha256=q_DYrDkIqI4sQBNgI
|
|
1797
1799
|
vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
|
1798
1800
|
vellum/workflows/nodes/__init__.py,sha256=zymtc3_iW2rFmMR-sayTLuN6ZsAw8VnJweWPsjQk2-Q,1197
|
1799
1801
|
vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
|
1800
|
-
vellum/workflows/nodes/bases/base.py,sha256=
|
1802
|
+
vellum/workflows/nodes/bases/base.py,sha256=424pCSFZtXqMpAYX01nQCP3Ej2s16_ynWY3VtxUwTdo,20497
|
1801
1803
|
vellum/workflows/nodes/bases/base_adornment_node.py,sha256=hrgzuTetM4ynPd9YGHoK8Vwwn4XITi3aZZ_OCnQrq4Y,3433
|
1802
1804
|
vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1803
1805
|
vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4XMBrBnIEkK3foHaBVvyHwYcQWWDKay7ic,1148
|
@@ -1810,7 +1812,7 @@ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=TCmO0wPbt7kc8
|
|
1810
1812
|
vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1811
1813
|
vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=RK2g1h2ib-ruQZ9A2_2L-B9WBdHV44WZj75rkDNL0cE,5766
|
1812
1814
|
vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
|
1813
|
-
vellum/workflows/nodes/core/map_node/node.py,sha256=
|
1815
|
+
vellum/workflows/nodes/core/map_node/node.py,sha256=kSyQmIWk4v-KSt4WBf3d-0_QueKYkjtrEmQPGTbMryw,10054
|
1814
1816
|
vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1815
1817
|
vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=Xc2xZY5ShSy-bsIQe41JbvIjq3TE95duS-ygaELRVkk,9320
|
1816
1818
|
vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
|
@@ -1837,7 +1839,7 @@ vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py,sha256=5C59
|
|
1837
1839
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
|
1838
1840
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=ea20icDM1HB942wkH-XtXNSNCBDcjeOiN3vowkHL4fs,4477
|
1839
1841
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
1840
|
-
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=
|
1842
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=wtJjaV0tJ5svO0shxFA-lInDQB25wfv24VUvAOYLOZ8,13793
|
1841
1843
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1842
1844
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=Hk_u2IxLIeeqL_s0RTgoyL5QGYwY9VllKT8z5_JHiDU,24956
|
1843
1845
|
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=0a40fkkZkFMmZN0CsWf6EP_y1H6x36EGa3WcfVNyOsM,9797
|
@@ -1861,7 +1863,7 @@ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=6SMaGeBlHQ5r
|
|
1861
1863
|
vellum/workflows/nodes/displayable/final_output_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1862
1864
|
vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py,sha256=E6LQ74qZjY4Xi4avx2qdOCgGhF8pEcNLBh8cqYRkzMI,709
|
1863
1865
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1864
|
-
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=
|
1866
|
+
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=axYUojar_kdB3gi4LG3g9euJ8VkOxNtiFxJNI46v-SQ,5869
|
1865
1867
|
vellum/workflows/nodes/displayable/guardrail_node/test_node.py,sha256=SAGv6hSFcBwQkudn1VxtaKNsXSXWWELl3eK05zM6tS0,5410
|
1866
1868
|
vellum/workflows/nodes/displayable/guardrail_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1867
1869
|
vellum/workflows/nodes/displayable/guardrail_node/tests/test_node.py,sha256=X2pd6TI8miYxIa7rgvs1pHTEreyWcf77EyR0_Jsa700,2055
|
@@ -1891,13 +1893,13 @@ vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha2
|
|
1891
1893
|
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
|
1892
1894
|
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=Bjv-wZyFgNaVZb9KEMMZd9lFoLzbPEPjEMpANizMZw4,2413
|
1893
1895
|
vellum/workflows/nodes/displayable/tool_calling_node/__init__.py,sha256=3n0-ysmFKsr40CVxPthc0rfJgqVJeZuUEsCmYudLVRg,117
|
1894
|
-
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=
|
1896
|
+
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=KxKU8JWFr-XUdwYelEtUTfAh3UaN3FTm2wK-nioXu9U,8065
|
1895
1897
|
vellum/workflows/nodes/displayable/tool_calling_node/state.py,sha256=CcBVb_YtwfSSka4ze678k6-qwmzMSfjfVP8_Y95feSo,302
|
1896
1898
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1897
1899
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=in1fbEz5x1tx3uKv9YXdvOncsHucNL8Ro6Go7lBuuOQ,8962
|
1898
1900
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=GZoeybB9uM7ai8sBLAtUMHrMVgh-WrJDWrKZci6feDs,11892
|
1899
1901
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=SIu5GCj4tIE4fz-cAcdULtQfqZIhrcc3Doo6TWLXBws,8804
|
1900
|
-
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=
|
1902
|
+
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=VC0TenXfktfWHd4ZYQFqiXaZvkhizLJFIK3nQvKoVG0,23780
|
1901
1903
|
vellum/workflows/nodes/displayable/web_search_node/__init__.py,sha256=8FOnEP-n-U68cvxTlJW9wphIAGHq5aqjzLM-DoSSXnU,61
|
1902
1904
|
vellum/workflows/nodes/displayable/web_search_node/node.py,sha256=NQYux2bOtuBF5E4tn-fXi5y3btURPRrNqMSM9MAZYI4,5091
|
1903
1905
|
vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1912,7 +1914,7 @@ vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9T
|
|
1912
1914
|
vellum/workflows/nodes/tests/test_utils.py,sha256=BUugAHx2C9YuCwTlsTXV1Glxca0kW3St6T9o_QFatSU,5649
|
1913
1915
|
vellum/workflows/nodes/utils.py,sha256=wCvf8K5qruT5GwtvnHcQ-LMllktTD8aaFmAGpKQy--c,10720
|
1914
1916
|
vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
|
1915
|
-
vellum/workflows/outputs/base.py,sha256=
|
1917
|
+
vellum/workflows/outputs/base.py,sha256=XLt2WnjOhHBC0tT4-1FIUHLVdI1J5NXME6UZxKCKwOI,9741
|
1916
1918
|
vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
|
1917
1919
|
vellum/workflows/ports/node_ports.py,sha256=SM9uLAaoaE1HwR-Uqwf2v5zZK5iFnphKs6mE5Ls7ldE,2877
|
1918
1920
|
vellum/workflows/ports/port.py,sha256=PYhmzEHgJyjUjSFkPIQ38cNIKpcXrhYiZlj7nZC5yCk,3989
|
@@ -1925,24 +1927,24 @@ vellum/workflows/references/external_input.py,sha256=c_4SojTpykCSbGS1Pjmx9FfquyY
|
|
1925
1927
|
vellum/workflows/references/input.py,sha256=3INu-TLTi4dziWmva6LO3WvgDlPzsjayUx61cVvqLJA,325
|
1926
1928
|
vellum/workflows/references/lazy.py,sha256=jgUYmgt-yAybzPf_R-74MzdU8VuNwMYI8EQqrj9lVR0,2948
|
1927
1929
|
vellum/workflows/references/node.py,sha256=LP854wDVs-9I_aZ7-nkbwXqL2H7W2_3LED2e9FixNS8,1418
|
1928
|
-
vellum/workflows/references/output.py,sha256=
|
1930
|
+
vellum/workflows/references/output.py,sha256=utYoYPVfsPCTFPXcAc0zTVn2aZcFwL_-y1_WLiKMhHA,3329
|
1929
1931
|
vellum/workflows/references/state_value.py,sha256=bInUF0A3Pt4-zhA0f6LdSuyv8tz7n5QRkHAEn4gsmqI,711
|
1930
1932
|
vellum/workflows/references/tests/test_lazy.py,sha256=0s50-LizMTlSTBQahpK0fg_xqCucA8YTp6QmIMqPvMk,919
|
1931
1933
|
vellum/workflows/references/vellum_secret.py,sha256=Od4d19a5yletWMqNfJR5d_mZQUkVcFzj29mE-T9J7yE,480
|
1932
1934
|
vellum/workflows/references/workflow_input.py,sha256=W3rOK1EPd2gYHb04WJwmNm1CUSdvZ9LKrs8RMKxACBs,1751
|
1933
1935
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1934
1936
|
vellum/workflows/resolvers/base.py,sha256=wrQiSC02Bw4-dBwgFjJIHsjpe-4xz4rUJs_1RdErKA0,1164
|
1935
|
-
vellum/workflows/resolvers/resolver.py,sha256=
|
1936
|
-
vellum/workflows/resolvers/tests/test_resolver.py,sha256=
|
1937
|
+
vellum/workflows/resolvers/resolver.py,sha256=yK-oY0HDsFJcjlNKAm3vpsPKRIFerIh59FcTwuEN5RY,4839
|
1938
|
+
vellum/workflows/resolvers/tests/test_resolver.py,sha256=jXkJBb9SwtoH__bBN-ECohpyD0aTIB9ErEvtFhuTMQM,9750
|
1937
1939
|
vellum/workflows/resolvers/types.py,sha256=Hndhlk69g6EKLh_LYg5ILepW5U_h_BYNllfzhS9k8p4,237
|
1938
1940
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1939
|
-
vellum/workflows/runner/runner.py,sha256=
|
1941
|
+
vellum/workflows/runner/runner.py,sha256=UJPCSddeczBcGu06j63KGM2IbbQ5xISTOwP-tFDptaI,40341
|
1940
1942
|
vellum/workflows/sandbox.py,sha256=jwlFFQjHDwmbVoBah_Q3i8K_BrzOt-F6TXFauiyVyIk,3021
|
1941
1943
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1942
1944
|
vellum/workflows/state/base.py,sha256=m9fCqbZn21GshCVCjJTD1dPZEQjFrsMXqlg7tM9fIwM,24283
|
1943
1945
|
vellum/workflows/state/context.py,sha256=khM30U1iDNts5Xp8LXa_WfpkITNITexrDUUFJ5wZ2W4,8445
|
1944
1946
|
vellum/workflows/state/delta.py,sha256=7h8wR10lRCm15SykaPj-gSEvvsMjCwYLPsOx3nsvBQg,440
|
1945
|
-
vellum/workflows/state/encoder.py,sha256=
|
1947
|
+
vellum/workflows/state/encoder.py,sha256=EynuS9aCt9Neb-H6HRCinEVZX5olCzME03W1TSXfpxs,1961
|
1946
1948
|
vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
|
1947
1949
|
vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1948
1950
|
vellum/workflows/state/tests/test_state.py,sha256=zEVFIY2any41X2BA5Us_qqKpzH5HRqmyrUJ04GTO0pU,7484
|
@@ -1960,7 +1962,7 @@ vellum/workflows/types/tests/test_definition.py,sha256=rvDYjdJ1rvAv0qHBN7i7s-_WA
|
|
1960
1962
|
vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
|
1961
1963
|
vellum/workflows/types/utils.py,sha256=mTctHITBybpt4855x32oCKALBEcMNLn-9cCmfEKgJHQ,6498
|
1962
1964
|
vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1963
|
-
vellum/workflows/utils/functions.py,sha256=
|
1965
|
+
vellum/workflows/utils/functions.py,sha256=6WRRMb_XbxtvhUKOJq5ZChy0KKvlBaQCBiPhvecXT7I,10029
|
1964
1966
|
vellum/workflows/utils/hmac.py,sha256=JJCczc6pyV6DuE1Oa0QVfYPUN_of3zEYmGFib3OZnrE,1135
|
1965
1967
|
vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
|
1966
1968
|
vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
|
@@ -1974,13 +1976,13 @@ vellum/workflows/utils/vellum_variables.py,sha256=YHLNiQGWDNssGH1FQoG9Z1jUFZ-zYe
|
|
1974
1976
|
vellum/workflows/utils/zip.py,sha256=HVg_YZLmBOTXKaDV3Xhaf3V6sYnfqqZXQ8CpuafkbPY,1181
|
1975
1977
|
vellum/workflows/vellum_client.py,sha256=xkfoucodxNK5JR2-lbRqZx3xzDgExWkP6kySrpi_Ubc,1079
|
1976
1978
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1977
|
-
vellum/workflows/workflows/base.py,sha256=
|
1979
|
+
vellum/workflows/workflows/base.py,sha256=nEFaKuLQahpEAxi-3VmlIbxEcTaKJ3_1G3WNVATVvzA,28466
|
1978
1980
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
1979
1981
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1980
1982
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
|
1981
1983
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1982
|
-
vellum_ai-1.3.
|
1983
|
-
vellum_ai-1.3.
|
1984
|
-
vellum_ai-1.3.
|
1985
|
-
vellum_ai-1.3.
|
1986
|
-
vellum_ai-1.3.
|
1984
|
+
vellum_ai-1.3.5.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1985
|
+
vellum_ai-1.3.5.dist-info/METADATA,sha256=cGN1uqwggZ4itH8f0IlQACy6h-uM2e-IspLFVz3DwKU,5547
|
1986
|
+
vellum_ai-1.3.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1987
|
+
vellum_ai-1.3.5.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1988
|
+
vellum_ai-1.3.5.dist-info/RECORD,,
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import inspect
|
2
|
+
import os
|
2
3
|
from uuid import UUID
|
3
4
|
from typing import ClassVar, Generic, Optional, TypeVar
|
4
5
|
|
5
6
|
from vellum.workflows.nodes.displayable.code_execution_node import CodeExecutionNode
|
6
|
-
from vellum.workflows.nodes.displayable.code_execution_node.utils import read_file_from_path
|
7
7
|
from vellum.workflows.types.core import JsonObject
|
8
8
|
from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
|
9
9
|
from vellum_ee.workflows.display.exceptions import NodeValidationError
|
@@ -11,10 +11,26 @@ from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
|
|
11
11
|
from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
|
12
12
|
from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
|
13
13
|
from vellum_ee.workflows.display.types import WorkflowDisplayContext
|
14
|
+
from vellum_ee.workflows.display.utils.expressions import virtual_open
|
14
15
|
|
15
16
|
_CodeExecutionNodeType = TypeVar("_CodeExecutionNodeType", bound=CodeExecutionNode)
|
16
17
|
|
17
18
|
|
19
|
+
def _read_file_from_path_with_virtual_support(node_filepath: str, script_filepath: str) -> Optional[str]:
|
20
|
+
"""
|
21
|
+
Read a file using virtual_open which handles VirtualFileFinder instances.
|
22
|
+
"""
|
23
|
+
node_filepath_dir = os.path.dirname(node_filepath)
|
24
|
+
normalized_script_filepath = script_filepath.lstrip("./")
|
25
|
+
full_filepath = os.path.join(node_filepath_dir, normalized_script_filepath)
|
26
|
+
|
27
|
+
try:
|
28
|
+
with virtual_open(full_filepath, "r") as file:
|
29
|
+
return file.read()
|
30
|
+
except (FileNotFoundError, IsADirectoryError):
|
31
|
+
return None
|
32
|
+
|
33
|
+
|
18
34
|
class BaseCodeExecutionNodeDisplay(BaseNodeDisplay[_CodeExecutionNodeType], Generic[_CodeExecutionNodeType]):
|
19
35
|
output_id: ClassVar[Optional[UUID]] = None
|
20
36
|
log_output_id: ClassVar[Optional[UUID]] = None
|
@@ -37,7 +53,7 @@ class BaseCodeExecutionNodeDisplay(BaseNodeDisplay[_CodeExecutionNodeType], Gene
|
|
37
53
|
code_value = raw_code
|
38
54
|
elif filepath:
|
39
55
|
node_file_path = inspect.getfile(node)
|
40
|
-
file_code =
|
56
|
+
file_code = _read_file_from_path_with_virtual_support(
|
41
57
|
node_filepath=node_file_path,
|
42
58
|
script_filepath=filepath,
|
43
59
|
)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from uuid import UUID
|
2
|
-
from typing import Dict
|
2
|
+
from typing import Any, Dict, List, cast
|
3
3
|
|
4
4
|
from vellum.workflows.inputs import BaseInputs
|
5
5
|
from vellum.workflows.nodes import BaseNode, InlineSubworkflowNode
|
@@ -8,7 +8,9 @@ from vellum.workflows.ports.port import Port
|
|
8
8
|
from vellum.workflows.references.lazy import LazyReference
|
9
9
|
from vellum.workflows.state import BaseState
|
10
10
|
from vellum.workflows.workflows.base import BaseWorkflow
|
11
|
-
from vellum_ee.workflows.display.base import WorkflowInputsDisplay
|
11
|
+
from vellum_ee.workflows.display.base import EdgeDisplay, WorkflowInputsDisplay
|
12
|
+
from vellum_ee.workflows.display.editor.types import NodeDisplayData, NodeDisplayPosition
|
13
|
+
from vellum_ee.workflows.display.nodes import BaseNodeDisplay
|
12
14
|
from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
|
13
15
|
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
14
16
|
|
@@ -379,3 +381,98 @@ def test_global_propagation_deep_nested_subworkflows():
|
|
379
381
|
inner_global_names = {ref.name for ref in inner_display.display_context.global_workflow_input_displays.keys()}
|
380
382
|
|
381
383
|
assert inner_global_names == {"middle_param", "inner_param", "root_param"}
|
384
|
+
|
385
|
+
|
386
|
+
def test_serialize_workflow_with_edge_display_data():
|
387
|
+
"""
|
388
|
+
Tests that edges with z_index values serialize display_data correctly.
|
389
|
+
"""
|
390
|
+
|
391
|
+
# GIVEN a workflow with connected nodes
|
392
|
+
class StartNode(BaseNode):
|
393
|
+
class Outputs(BaseNode.Outputs):
|
394
|
+
result: str
|
395
|
+
|
396
|
+
class EndNode(BaseNode):
|
397
|
+
class Outputs(BaseNode.Outputs):
|
398
|
+
final: str
|
399
|
+
|
400
|
+
class TestWorkflow(BaseWorkflow):
|
401
|
+
graph = StartNode >> EndNode
|
402
|
+
|
403
|
+
class Outputs(BaseWorkflow.Outputs):
|
404
|
+
final_result = EndNode.Outputs.final
|
405
|
+
|
406
|
+
class TestWorkflowDisplay(BaseWorkflowDisplay[TestWorkflow]):
|
407
|
+
edge_displays = {
|
408
|
+
(StartNode.Ports.default, EndNode): EdgeDisplay(id=UUID("12345678-1234-5678-1234-567812345678"), z_index=5)
|
409
|
+
}
|
410
|
+
|
411
|
+
# WHEN we serialize the workflow with the custom display
|
412
|
+
display = get_workflow_display(
|
413
|
+
base_display_class=TestWorkflowDisplay,
|
414
|
+
workflow_class=TestWorkflow,
|
415
|
+
)
|
416
|
+
serialized_workflow = display.serialize()
|
417
|
+
|
418
|
+
# THEN the edge should include display_data with z_index
|
419
|
+
workflow_raw_data = cast(Dict[str, Any], serialized_workflow["workflow_raw_data"])
|
420
|
+
edges = cast(List[Dict[str, Any]], workflow_raw_data["edges"])
|
421
|
+
|
422
|
+
edge_with_display_data = None
|
423
|
+
for edge in edges:
|
424
|
+
if edge["id"] == "12345678-1234-5678-1234-567812345678":
|
425
|
+
edge_with_display_data = edge
|
426
|
+
break
|
427
|
+
|
428
|
+
assert edge_with_display_data is not None, "Edge with custom UUID not found"
|
429
|
+
assert edge_with_display_data["display_data"] == {"z_index": 5}
|
430
|
+
|
431
|
+
assert edge_with_display_data["type"] == "DEFAULT"
|
432
|
+
assert "source_node_id" in edge_with_display_data
|
433
|
+
assert "target_node_id" in edge_with_display_data
|
434
|
+
|
435
|
+
|
436
|
+
def test_serialize_workflow_with_node_display_data():
|
437
|
+
"""
|
438
|
+
Tests that nodes with z_index values serialize display_data correctly.
|
439
|
+
"""
|
440
|
+
|
441
|
+
# GIVEN a workflow with a node that has custom display data
|
442
|
+
class TestNode(BaseNode):
|
443
|
+
class Outputs(BaseNode.Outputs):
|
444
|
+
result: str
|
445
|
+
|
446
|
+
class TestWorkflow(BaseWorkflow):
|
447
|
+
graph = TestNode
|
448
|
+
|
449
|
+
class Outputs(BaseWorkflow.Outputs):
|
450
|
+
final_result = TestNode.Outputs.result
|
451
|
+
|
452
|
+
class TestNodeDisplay(BaseNodeDisplay[TestNode]):
|
453
|
+
display_data = NodeDisplayData(position=NodeDisplayPosition(x=100, y=200), z_index=10, width=300, height=150)
|
454
|
+
|
455
|
+
class TestWorkflowDisplay(BaseWorkflowDisplay[TestWorkflow]):
|
456
|
+
pass
|
457
|
+
|
458
|
+
# WHEN we serialize the workflow with the custom node display
|
459
|
+
display = get_workflow_display(
|
460
|
+
base_display_class=TestWorkflowDisplay,
|
461
|
+
workflow_class=TestWorkflow,
|
462
|
+
)
|
463
|
+
serialized_workflow = display.serialize()
|
464
|
+
|
465
|
+
# THEN the node should include display_data with z_index
|
466
|
+
workflow_raw_data = cast(Dict[str, Any], serialized_workflow["workflow_raw_data"])
|
467
|
+
nodes = cast(List[Dict[str, Any]], workflow_raw_data["nodes"])
|
468
|
+
|
469
|
+
test_node = None
|
470
|
+
for node in nodes:
|
471
|
+
if node.get("type") == "GENERIC":
|
472
|
+
definition = node.get("definition")
|
473
|
+
if isinstance(definition, dict) and definition.get("name") == "TestNode":
|
474
|
+
test_node = node
|
475
|
+
break
|
476
|
+
|
477
|
+
assert test_node is not None, "TestNode not found in serialized nodes"
|
478
|
+
assert test_node["display_data"] == {"position": {"x": 100, "y": 200}, "z_index": 10, "width": 300, "height": 150}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
from deepdiff import DeepDiff
|
2
|
+
|
3
|
+
from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
|
4
|
+
|
5
|
+
from tests.workflows.basic_tool_calling_node_parent_input.workflow import BasicToolCallingNodeParentInputWorkflow
|
6
|
+
|
7
|
+
|
8
|
+
def test_serialize_workflow():
|
9
|
+
# GIVEN a Workflow that uses a generic node
|
10
|
+
# WHEN we serialize it
|
11
|
+
workflow_display = get_workflow_display(workflow_class=BasicToolCallingNodeParentInputWorkflow)
|
12
|
+
|
13
|
+
serialized_workflow: dict = workflow_display.serialize()
|
14
|
+
# THEN we should get a serialized representation of the Workflow
|
15
|
+
assert serialized_workflow.keys() == {
|
16
|
+
"workflow_raw_data",
|
17
|
+
"input_variables",
|
18
|
+
"state_variables",
|
19
|
+
"output_variables",
|
20
|
+
}
|
21
|
+
|
22
|
+
# AND its input variables should be what we expect
|
23
|
+
input_variables = serialized_workflow["input_variables"]
|
24
|
+
assert len(input_variables) == 1
|
25
|
+
|
26
|
+
# AND its output variables should be what we expect
|
27
|
+
output_variables = serialized_workflow["output_variables"]
|
28
|
+
assert len(output_variables) == 2
|
29
|
+
assert not DeepDiff(
|
30
|
+
[
|
31
|
+
{"id": "e2e36cfc-cf24-42fd-ba8f-cce39c53d47b", "key": "text", "type": "STRING"},
|
32
|
+
{"id": "08ca9519-e421-47e8-a42d-44f49f6aab16", "key": "chat_history", "type": "CHAT_HISTORY"},
|
33
|
+
],
|
34
|
+
output_variables,
|
35
|
+
ignore_order=True,
|
36
|
+
)
|
37
|
+
|
38
|
+
# AND its raw data should be what we expect
|
39
|
+
workflow_raw_data = serialized_workflow["workflow_raw_data"]
|
40
|
+
tool_calling_node = workflow_raw_data["nodes"][2]
|
41
|
+
|
42
|
+
attributes = tool_calling_node["attributes"]
|
43
|
+
function_attributes = next(attribute for attribute in attributes if attribute["name"] == "functions")
|
44
|
+
assert function_attributes == {
|
45
|
+
"id": "cec9f5f2-7bb0-42e4-9c56-f215f07c5569",
|
46
|
+
"name": "functions",
|
47
|
+
"value": {
|
48
|
+
"type": "CONSTANT_VALUE",
|
49
|
+
"value": {
|
50
|
+
"type": "JSON",
|
51
|
+
"value": [
|
52
|
+
{
|
53
|
+
"type": "CODE_EXECUTION",
|
54
|
+
"name": "get_string",
|
55
|
+
"description": "\n Get a string with the parent input, dummy input, and the populated input.\n ", # noqa: E501
|
56
|
+
"definition": {
|
57
|
+
"state": None,
|
58
|
+
"cache_config": None,
|
59
|
+
"name": "get_string",
|
60
|
+
"description": "\n Get a string with the parent input, dummy input, and the populated input.\n ", # noqa: E501
|
61
|
+
"parameters": {
|
62
|
+
"type": "object",
|
63
|
+
"properties": {"populated_input": {"type": "string"}},
|
64
|
+
"required": ["populated_input"],
|
65
|
+
},
|
66
|
+
"inputs": {
|
67
|
+
"parent_input": {
|
68
|
+
"type": "WORKFLOW_INPUT",
|
69
|
+
"input_variable_id": "4bf1f0e7-76c6-4204-9f8c-bd9c3b73a8db",
|
70
|
+
},
|
71
|
+
"dummy_input": {
|
72
|
+
"type": "NODE_OUTPUT",
|
73
|
+
"node_id": "8e89ae10-a709-45ec-89f8-242f92e4a83f",
|
74
|
+
"node_output_id": "0cd09f0a-c142-4d5d-acc7-b93cd30ca58d",
|
75
|
+
},
|
76
|
+
},
|
77
|
+
"forced": None,
|
78
|
+
"strict": None,
|
79
|
+
},
|
80
|
+
"src": 'from vellum.workflows.utils.functions import use_tool_inputs\n\nfrom .inputs import ParentInputs\nfrom .nodes.dummy_node import DummyNode\n\n\n@use_tool_inputs(\n parent_input=ParentInputs.parent_input,\n dummy_input=DummyNode.Outputs.text,\n)\ndef get_string(parent_input: str, dummy_input: str, populated_input: str) -> str:\n """\n Get a string with the parent input, dummy input, and the populated input.\n """\n return f"This is the parent input: {parent_input}, this is the dummy input: {dummy_input}, and this is the populated input: {populated_input}" # noqa: E501\n', # noqa: E501
|
81
|
+
}
|
82
|
+
],
|
83
|
+
},
|
84
|
+
},
|
85
|
+
}
|
@@ -152,6 +152,7 @@ def test_serialize_workflow():
|
|
152
152
|
},
|
153
153
|
"required": ["location", "unit"],
|
154
154
|
},
|
155
|
+
"inputs": None,
|
155
156
|
"forced": None,
|
156
157
|
"strict": None,
|
157
158
|
},
|
@@ -194,7 +195,7 @@ def test_serialize_workflow():
|
|
194
195
|
"frequency_penalty": 0.0,
|
195
196
|
"presence_penalty": 0.0,
|
196
197
|
"logit_bias": None,
|
197
|
-
"custom_parameters":
|
198
|
+
"custom_parameters": {"mode": "initial"},
|
198
199
|
},
|
199
200
|
},
|
200
201
|
},
|