vellum-ai 0.14.39__py3-none-any.whl → 0.14.40__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.
Files changed (67) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/workflows/nodes/bases/tests/test_base_node.py +24 -0
  3. vellum/workflows/nodes/core/try_node/node.py +1 -2
  4. vellum/workflows/nodes/experimental/tool_calling_node/__init__.py +3 -0
  5. vellum/workflows/nodes/experimental/tool_calling_node/node.py +147 -0
  6. vellum/workflows/nodes/experimental/tool_calling_node/utils.py +132 -0
  7. vellum/workflows/nodes/utils.py +4 -2
  8. vellum/workflows/outputs/base.py +3 -2
  9. vellum/workflows/references/output.py +20 -0
  10. vellum/workflows/state/base.py +36 -14
  11. vellum/workflows/state/tests/test_state.py +5 -2
  12. vellum/workflows/types/stack.py +11 -0
  13. vellum/workflows/workflows/base.py +5 -0
  14. vellum/workflows/workflows/tests/test_base_workflow.py +96 -9
  15. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.40.dist-info}/METADATA +1 -1
  16. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.40.dist-info}/RECORD +67 -62
  17. vellum_cli/push.py +0 -2
  18. vellum_ee/workflows/display/base.py +14 -1
  19. vellum_ee/workflows/display/nodes/base_node_display.py +56 -14
  20. vellum_ee/workflows/display/nodes/get_node_display_class.py +9 -15
  21. vellum_ee/workflows/display/nodes/tests/test_base_node_display.py +36 -0
  22. vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +3 -2
  23. vellum_ee/workflows/display/nodes/vellum/retry_node.py +1 -2
  24. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +1 -2
  25. vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py +1 -2
  26. vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +1 -2
  27. vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py +55 -3
  28. vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py +1 -2
  29. vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py +1 -2
  30. vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py +1 -2
  31. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +2 -2
  32. vellum_ee/workflows/display/nodes/vellum/try_node.py +1 -2
  33. vellum_ee/workflows/display/nodes/vellum/utils.py +7 -1
  34. vellum_ee/workflows/display/tests/{test_vellum_workflow_display.py → test_base_workflow_display.py} +10 -22
  35. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +4 -6
  36. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +7 -16
  37. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +2 -6
  38. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +1 -2
  39. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py +3 -10
  40. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +4 -5
  41. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -4
  42. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +1 -4
  43. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +2 -5
  44. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py +7 -5
  45. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +1 -4
  46. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +1 -4
  47. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +1 -2
  48. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +1 -4
  49. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -4
  50. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +7 -5
  51. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py +1 -4
  52. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py +1 -4
  53. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py +1 -4
  54. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -5
  55. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +2 -7
  56. vellum_ee/workflows/display/types.py +5 -4
  57. vellum_ee/workflows/display/utils/exceptions.py +7 -0
  58. vellum_ee/workflows/display/utils/registry.py +37 -0
  59. vellum_ee/workflows/display/utils/vellum.py +2 -1
  60. vellum_ee/workflows/display/workflows/base_workflow_display.py +281 -43
  61. vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +34 -21
  62. vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +58 -20
  63. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +4 -257
  64. vellum_ee/workflows/tests/local_workflow/display/workflow.py +2 -2
  65. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.40.dist-info}/LICENSE +0 -0
  66. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.40.dist-info}/WHEEL +0 -0
  67. {vellum_ai-0.14.39.dist-info → vellum_ai-0.14.40.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,5 @@
1
1
  import pytest
2
- from uuid import uuid4
2
+ from uuid import UUID, uuid4
3
3
 
4
4
  from vellum.workflows.edges.edge import Edge
5
5
  from vellum.workflows.inputs.base import BaseInputs
@@ -7,6 +7,7 @@ from vellum.workflows.nodes.bases.base import BaseNode
7
7
  from vellum.workflows.nodes.core.inline_subworkflow_node.node import InlineSubworkflowNode
8
8
  from vellum.workflows.outputs.base import BaseOutputs
9
9
  from vellum.workflows.state.base import BaseState
10
+ from vellum.workflows.types.stack import Stack
10
11
  from vellum.workflows.workflows.base import BaseWorkflow
11
12
 
12
13
 
@@ -326,7 +327,6 @@ def test_workflow__unsupported_graph_item():
326
327
 
327
328
 
328
329
  def test_base_workflow__deserialize_state():
329
-
330
330
  # GIVEN a state definition
331
331
  class State(BaseState):
332
332
  bar: str
@@ -340,6 +340,14 @@ def test_base_workflow__deserialize_state():
340
340
  class Outputs(BaseNode.Outputs):
341
341
  foo: str
342
342
 
343
+ # AND a node id for node A
344
+ node_a_id = uuid4()
345
+ NodeA.__id__ = node_a_id
346
+
347
+ # AND an output id for NodeA.Outputs.foo
348
+ node_a_output_id = uuid4()
349
+ NodeA.__output_ids__["foo"] = node_a_output_id
350
+
343
351
  # AND a workflow that uses all three
344
352
  class TestWorkflow(BaseWorkflow[Inputs, State]):
345
353
  graph = NodeA
@@ -356,20 +364,20 @@ def test_base_workflow__deserialize_state():
356
364
  "updated_ts": "2025-04-14T19:22:18.504902",
357
365
  "external_inputs": {},
358
366
  "node_outputs": {
359
- "test_base_workflow__deserialize_state.<locals>.NodeA.Outputs.foo": "My node A output foo"
367
+ str(node_a_output_id): "My node A output foo",
360
368
  },
361
369
  "node_execution_cache": {
362
370
  "dependencies_invoked": {
363
- last_span_id: ["test_base_workflow__deserialize_state.<locals>.NodeA"],
371
+ last_span_id: [str(node_a_id)],
364
372
  },
365
373
  "node_executions_initiated": {
366
- "test_base_workflow__deserialize_state.<locals>.NodeA": [last_span_id],
374
+ str(node_a_id): [last_span_id],
367
375
  },
368
376
  "node_executions_fulfilled": {
369
- "test_base_workflow__deserialize_state.<locals>.NodeA": [last_span_id],
377
+ str(node_a_id): [last_span_id],
370
378
  },
371
379
  "node_executions_queued": {
372
- "test_base_workflow__deserialize_state.<locals>.NodeA": [],
380
+ str(node_a_id): [],
373
381
  },
374
382
  },
375
383
  "parent": None,
@@ -384,8 +392,87 @@ def test_base_workflow__deserialize_state():
384
392
  assert isinstance(state.meta.workflow_inputs, Inputs)
385
393
  assert state.meta.workflow_inputs.baz == "My input baz"
386
394
 
387
- # AND the node execution cache should deserialize
388
- assert state.meta.node_execution_cache
395
+ # AND the node execution cache should deserialize correctly
396
+ assert state.meta.node_execution_cache._node_executions_initiated == {NodeA: {UUID(last_span_id)}}
397
+ assert state.meta.node_execution_cache._node_executions_fulfilled == {NodeA: Stack.from_list([UUID(last_span_id)])}
398
+ assert state.meta.node_execution_cache._node_executions_queued == {NodeA: []}
399
+ assert state.meta.node_execution_cache._dependencies_invoked == {UUID(last_span_id): {NodeA}}
400
+
401
+
402
+ def test_base_workflow__deserialize_legacy_node_execution_cache():
403
+
404
+ # GIVEN a state definition
405
+ class State(BaseState):
406
+ bar: str
407
+
408
+ # AND a node
409
+ class NodeA(BaseNode):
410
+ class Outputs(BaseNode.Outputs):
411
+ foo: str
412
+
413
+ # AND a workflow that uses both
414
+ class TestWorkflow(BaseWorkflow[BaseInputs, State]):
415
+ graph = NodeA
416
+
417
+ # WHEN we deserialize the state that had a legacy node execution cache format
418
+ last_span_id = str(uuid4())
419
+ node_a_full_name = "vellum.workflows.workflows.tests.test_base_workflow.test_base_workflow__deserialize_legacy_node_execution_cache.<locals>.NodeA" # noqa: E501
420
+ state = TestWorkflow.deserialize_state(
421
+ {
422
+ "meta": {
423
+ "node_execution_cache": {
424
+ "dependencies_invoked": {
425
+ last_span_id: [node_a_full_name],
426
+ },
427
+ "node_executions_initiated": {
428
+ node_a_full_name: [last_span_id],
429
+ },
430
+ "node_executions_fulfilled": {
431
+ node_a_full_name: [last_span_id],
432
+ },
433
+ "node_executions_queued": {
434
+ node_a_full_name: [],
435
+ },
436
+ },
437
+ },
438
+ },
439
+ )
440
+
441
+ # THEN the node execution cache should deserialize correctly
442
+ assert state.meta.node_execution_cache._node_executions_initiated == {NodeA: {UUID(last_span_id)}}
443
+ assert state.meta.node_execution_cache._node_executions_fulfilled == {NodeA: Stack.from_list([UUID(last_span_id)])}
444
+ assert state.meta.node_execution_cache._node_executions_queued == {NodeA: []}
445
+ assert state.meta.node_execution_cache._dependencies_invoked == {UUID(last_span_id): {NodeA}}
446
+
447
+
448
+ def test_base_workflow__deserialize_legacy_node_outputs():
449
+
450
+ # GIVEN a state definition
451
+ class State(BaseState):
452
+ bar: str
453
+
454
+ # AND a node
455
+ class NodeA(BaseNode):
456
+ class Outputs(BaseNode.Outputs):
457
+ foo: str
458
+
459
+ # AND a workflow that uses both
460
+ class TestWorkflow(BaseWorkflow[BaseInputs, State]):
461
+ graph = NodeA
462
+
463
+ # WHEN we deserialize the state that had a legacy node execution cache format
464
+ state = TestWorkflow.deserialize_state(
465
+ {
466
+ "meta": {
467
+ "node_outputs": {
468
+ "test_base_workflow__deserialize_legacy_node_outputs.<locals>.NodeA.Outputs.foo": "My node A output foo", # noqa: E501
469
+ },
470
+ },
471
+ },
472
+ )
473
+
474
+ # THEN the node execution cache should deserialize correctly
475
+ assert state.meta.node_outputs == {NodeA.Outputs.foo: "My node A output foo"}
389
476
 
390
477
 
391
478
  def test_base_workflow__deserialize_state_with_optional_inputs():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.14.39
3
+ Version: 0.14.40
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -8,7 +8,7 @@ vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
8
8
  vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
9
9
  vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
10
10
  vellum_cli/pull.py,sha256=27Mh10aQ8H1OkTmQOJcOuJ5cQcYbNjkkuQrBmtkRe0o,12262
11
- vellum_cli/push.py,sha256=e2zo4PsQgEhXR3Eeg7sVJ_pdV6Rv-MswQEdCMIEdIqY,9654
11
+ vellum_cli/push.py,sha256=0bHAhp6B67JUFuiL9sSekrLOw-x2Dp6VsrzhFbOy7e4,9508
12
12
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
14
14
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
@@ -22,20 +22,20 @@ vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- vellum_ee/workflows/display/base.py,sha256=em2kgLWBk74fiDoDDp-smL0IFmDjMPtd8F4mx10NPTg,2229
25
+ vellum_ee/workflows/display/base.py,sha256=EqlQFD56kpqMY02ZBJBQajzJKh33Dwi60Wo779kJlec,2880
26
26
  vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
27
27
  vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
28
28
  vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
29
- vellum_ee/workflows/display/nodes/base_node_display.py,sha256=cHK2OxeM2gWOshMHjaDHxWbRxvjkNHxOXbajjkrgk1w,19094
29
+ vellum_ee/workflows/display/nodes/base_node_display.py,sha256=e7agquSClJhamsVo8YX6WcV1PVlUSGD4Lz1feDi-rCw,21235
30
30
  vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=WXbfVoGHTfl_owas2WKHwcRhfLeu0cAI4qLmKxfxjOs,1707
31
- vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=59Nht1XAxMcNESFV1VmECrF01lZMnGkB_9JWaTAFnv0,2214
31
+ vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=5QuXpMth0HmZuC-e8LRKOLbrVXSL-ylMR5IWae8eNmc,2113
32
32
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
33
+ vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=YuR3e6ibE_eWDfAJCrooQR3QZGeNRoha1FwpK3hvMh0,2478
34
34
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
35
35
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
36
36
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
37
37
  vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=RDsxyubod_zYc72_VaHUTfOZXsgrKv8g3fqZFS2_j8Y,8538
38
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=Bzqplrnx-bDIRD1JgU7036m8pSWSO45zEReNv8RJTu4,6379
38
+ vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=DJb7u3ZgLxwzo7ZxD--DPYDy1FDwKwPxRYBrJ5FT1x0,6452
39
39
  vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=IYx0nll0t-tsPcjfgpfHMZE4FJgMFIsOiaQanGLYF0Q,4410
40
40
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
41
41
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
@@ -47,59 +47,61 @@ vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUf
47
47
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xtyecs9mJ_WEwVpP12jxYwvehLXynhqLrPJ-Ahdk2GA,3232
48
48
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=DQzzhVGVZf812DkpQZoVYJcDsIOtjkm_sCX3oDLks2Y,1103
49
49
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=yAiWMeKs6jEecRdWfTjqxLmnGLeBPguaVsBD7xcOV94,3263
50
- vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
50
+ vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=TjBpRERmkmm1myZTWKAxxD1F0dWSc7U1sih8g9sqq2Q,3300
51
51
  vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=Hn55mKO1Q6BBspQtbsurvJJqX7RjSSuEyRjUW29xvg0,9279
52
52
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=62baAElKoRKIoba0lLhnrXGWWx96B73VxKGxh7BaIxc,2612
53
53
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlbJhs4uo1KGH6eGtDXZucVhlUoc_xpl4,3242
54
54
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=p0fCvbKzpGvVrg67QmJd14m9E8_DG0u5s6SYIhzlkNA,4018
56
- vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=ulrpoYUW-5kIxfG4Lf5F2p0k_EoYKhmahEbF3P_eruM,1648
57
- vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=Xx_2qi956tc6QoWr3MxlTBp48xJEErj8LHIsMfEi1vU,1356
58
- vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=fu9nxD4FInSfKbipJJ7UE617VkeUWs_uS6SeEz_8-Iw,4691
59
- vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
60
- vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=Us32jf_FQnLuT4Bs2o5JyHxihCTAN8ozZghWIR0pl9k,3459
61
- vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
62
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=8_4b_U2l60b3TPLTHiDd_lzk6gi-30FmNJreDVeG0oM,4876
63
- vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=0ipBZMYm521tuwefQFgHOvTyTgiWVTkzxpQtnnmOAI0,4203
64
- vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=MAoHDSURlLRJ9V8D6I6icclqGq2hExU_h7ABx6BWuJY,4733
55
+ vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=OoNO-BstB96F-VMK6FZ9aXyi-0wyNePo6HiaJC6SYRw,3880
56
+ vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=HoIph_rNlHFNBMqBq1a_eyFwPzBIazdH1yQeRhgba14,1510
57
+ vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
58
+ vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=6Q6rfEwjjSEgSX24aFZjS3K6l8G2YRYBUNC2o5BE8Tk,6101
59
+ vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=h93ysolmbo2viisyhRnXKHPxiDK0I_dSAbYoHFYIoO4,1953
60
+ vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=PK7v0AWCgH9gWRfAwGPUGCRLbIH3NSyoAYa9W15ggAo,3321
61
+ vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=Khjsb53PKpZuyhKoRMgKAL45eGp5hZqXvHmVeQWRw4w,2289
62
+ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=etCxL19nuJ-bDytH-9a0wHKFoQyBIvocxgTcyo2Cy2Y,4870
63
+ vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=o6wL17XVm6Wj4sHoJkBW54Y5fY9ZwhD7ry0xkNWRu5c,4106
64
+ vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=oICunzyaXPs0tYnW5zH1r93Bx35MSH7mcD-n0DEWRok,4978
65
65
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
66
+ vellum_ee/workflows/display/tests/test_base_workflow_display.py,sha256=1R9BAjbfRX7tV3hEwDebzUqzzXoFLfZ-f2WI8Bj4oLI,9286
67
67
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=GzDx9JX9yBDgsHk1x58cmjChC9tPMUtlaqOSxO5CJxQ,2069
70
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=4R8cZ98JsGmIq-kmt3q519c4nCI7wCy5ynAUCUNnvuI,15605
71
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=PXoNUAgqfyNCAoYGWoo5D-_5SLEannn7SD08nxZmVe8,19781
69
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
70
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=ixu_VHgpigvKXj2uQu2_EUn4bkpRy0390LGoRKBJ6iU,15262
71
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=m9KpVN55_bHiooZOJLm7doRewhcTK53weVYRiglCJX0,19578
72
72
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
73
73
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
74
74
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
75
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=EdLwx6iUEMrQd68UIlACa9DQguomcu621MOYuXmunig,15908
76
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=V__y7uu-dy6TJjPeu4UDvaoO2yYwBRbPiW9uJdzWRx4,29828
77
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=6ejs_C1cuaRHtc8Qb2qh8-b-juDwLwdfTBd-6CSDDYw,47672
78
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=FKojL_YddJ-PEZ9n0IKedD2qI0JQtnXRTfMXBPPB9HU,8821
79
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=wgedEa2IVP2ssH_FLghoEmLgpJR41AY-iNIw1SESeqA,6106
80
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=THQB73vAgdiRRk7GKWwzw99G-X3LLgEEVCb4QCQrrMQ,5773
81
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=aWZ3XIquyKeS199VayYVA7qVjXdvPepGG8UkNt0osIU,7446
82
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=XRtXTWtNXHe1g8E_mNcAhYZVjc0UcGlJRjq34_sd0jo,787
83
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=nZ3IOZSX3cOg4XV5-PW-Hsu806vfzmOZyCpZyl1I50w,20605
84
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=3uWphk9TeyZ5Ila2wBIDIjQfbr62bHQ6TNpRgBVIP98,16150
85
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=QifoIZja04F1ulMhKlfZHtOqhAWrbUXlnQpybBBzNdw,8449
86
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=J7BQnYNjS8EFy6y4hYRFKoh33EGXz7vFSCKPOM6v2Zk,8713
87
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=elc4ak2OyI4y5P6GPnK2RwuZLcx4FL6hHlmhY3ARk6k,13008
88
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=BzFNl9ECeGh0krm-CUjbBQQq0g7krANsp0Sh-j5dAkc,11322
89
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=qjaXGw0JTnPnQmDAFm7jkB3bVkApf-WQ0Gd6kptqdPA,7818
90
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=UrueKI15Ez-DRfZpZH82o127v0LRXLP-s308kjDTPMI,4084
91
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
92
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=zXTjfjUdji0WBu6ZhocvM4UiXEWFJIpds24sxV9TZT0,7714
93
- vellum_ee/workflows/display/types.py,sha256=nERYzMC-TqoQuRN8QtF2ZLr-56G7XgXJqLtn8qQMQqs,2442
75
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=h8LANc1wOj5wDzyFYhsn_defoJL7EjIcw5U_dYdjsuM,15794
76
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=G4rfMSAttEtxos2ZgVJ0j4a2kqMeKrc1D1FaqYT4vzw,29588
77
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=Ofo4pU9dO57UceejBPsTzPDRMR5XkiLqpTiNevDtkCU,47432
78
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=3GloR_5CwBYIpIkRNqJ6-AvwXe9acwyjU-xz1yN-Xws,8693
79
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=8WnzAu4HceKcIcp-Tdnrkdwq9zC6an5-92khTxNm1uk,5978
80
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=jSUfw4iSfyu9-Yift1Lb_oBDC1WnD7FwSPnNzPyQlOI,5632
81
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=1dLkx5e-rhRQ6Ap0lma4sA_ZGByQW1W9BUwPhvsazjc,7357
82
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=8NiFJLd9vVK8MheYs7TJ3PqYDmtWVXrUNz40E33Y4gA,659
83
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=xS7gjdp_ABfXYU89qz6B_i94cKiDivDm2DlQdWgZhQc,20477
84
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=EDWp_yXZ67IFv5KMCR7Zzvs7rQ456NtPCR-cdCWwqeQ,16036
85
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=aWxEPd6Xsorm36ILyJWMh7UO-bMwYgRc6BciqyYto64,8321
86
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=G8qjDAKO_-OGEg8dSqs4hp1Pf67RCy7MnecLbZYnsuU,8585
87
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=gvtlKvMK7U9P6P_sc1nTVcMbDEwaDqBjCxqpsh7tV-U,12919
88
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=E9UaEdNDG6baHVxg0v7kYHLxiJNVMzPCbVbt4gXBhFw,11194
89
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=8J-KdCUiC8AgzbRQgT_1t_eWrMOaPSgK3XQfXV_hiE0,7690
90
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=2MIf-929wze_gDoYSTwZVT74tBi09m2MihtX-EcxFRg,3956
91
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=NIq7pa8EBR0ZmhTc3k_akwGuOKih8mwurkyIbc0dNTg,2857
92
+ vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=DsWHUyh_GfCvFShbBh7GQnjq5j5NlMc1q_VubE5NikY,7530
93
+ vellum_ee/workflows/display/types.py,sha256=NKtEGFhvgz1i_oAayXFIS06QZautixnS3id5DckCIjg,2637
94
94
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
+ vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
95
96
  vellum_ee/workflows/display/utils/expressions.py,sha256=2u2o8Fqr-2C45FII01ej5rt6i8n2EEGiliXugK7buVw,1210
96
- vellum_ee/workflows/display/utils/vellum.py,sha256=Pzmg9Xiq-hRaYxbOSDaJhIAQ4A0apQN6dURn_h5DnWI,9364
97
+ vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
98
+ vellum_ee/workflows/display/utils/vellum.py,sha256=VSWB3RA3RWQwQ7nMsU9gLfgpX3_BK9ARBIT36i52r9k,9478
97
99
  vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
98
100
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
99
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=UbUalLL_CDFIEnqN-uFv8Ms06AMxDmQPx9HQ1oocBno,20979
100
- vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
101
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=nD6_lZnNp56siVJwhlWzSEHdMaSKjvWlsJa31SqfQAE,10623
102
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=f-Js7M_WbFp_3mPTv191xC4GoGyWbITrvZSGdiqDcU4,12436
101
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=L91EOajiV3CkaMTwC98QYJpqno-JhUOo_8FYGjT8xFM,32501
102
+ vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=s6yMO0RxoM8scmfT8TJ-9cwl-WHFe7JSyEJA0alCeEs,1913
103
+ vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=uWBMmd_2BlDpymGoo5FB2LBeFQKHmPWJAPvSPZHk94o,11869
104
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
103
105
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
106
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
105
107
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -114,7 +116,7 @@ vellum_ee/workflows/tests/local_workflow/display/__init__.py,sha256=xo75Uqb4aErO
114
116
  vellum_ee/workflows/tests/local_workflow/display/nodes/__init__.py,sha256=szW_mgOUriyZ6v1vlnevBgkzNi8g83-ihS98UOLHVcE,155
115
117
  vellum_ee/workflows/tests/local_workflow/display/nodes/final_output.py,sha256=Kv92TCREiZsB9531KZYaBIq83uHn7e_ECw_yAbD1qfk,1017
116
118
  vellum_ee/workflows/tests/local_workflow/display/nodes/templating_node.py,sha256=5cankEe1rDZlXKgILFSPbmN0tUZhIdmcFgz_AguXTJc,1229
117
- vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=rYjUO0TN6GPCDldD4liWFPOLquJmw-sP4HYtyGspe08,2024
119
+ vellum_ee/workflows/tests/local_workflow/display/workflow.py,sha256=ZqOwUFaS6vQAOWRsAq02cno5ULXFKsnXFwWPMfqH8uw,1996
118
120
  vellum_ee/workflows/tests/local_workflow/inputs.py,sha256=4cgsZBoUbIY0Rs8gknC9yqxQ-sSoULclx_SAm1FT2RA,96
119
121
  vellum_ee/workflows/tests/local_workflow/metadata.json,sha256=rdu3h5qkFZiqhCAMxoyoWyMI0O8QALC5-URvSIW6F00,24
120
122
  vellum_ee/workflows/tests/local_workflow/nodes/__init__.py,sha256=1F6jxUpSKfPXPj4ZZKSbnX6Mg-VwF3euLJSZfGn6xkM,127
@@ -129,7 +131,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
129
131
  vellum/client/__init__.py,sha256=Z-JHK2jGxhtTtmkLeOaUGGJWIUNYGNVBLvUewC6lp6w,118148
130
132
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
131
133
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
132
- vellum/client/core/client_wrapper.py,sha256=KIJivfBpItYrCWMBe54yxwrVv0jkHzTimMkbw06mEAg,1869
134
+ vellum/client/core/client_wrapper.py,sha256=7bH2-p6hYzfsAz1ScP5muSnO-bbtUPUj3dQ911oa66I,1869
133
135
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
134
136
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
135
137
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -1538,7 +1540,7 @@ vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62Er
1538
1540
  vellum/workflows/nodes/bases/base.py,sha256=eW-3RSkBgtuGY8x2nmbHYiUg_HXS5U57n3k6Fh-dJ9s,15330
1539
1541
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=afMwJLHK2Ke7sBpceVLnNdZMlU2O-6UgyG7lBt9SAQ8,3039
1540
1542
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1541
- vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=4PGjzFh4ZkvffOn-7xhqzsqfdLsYe_2IGqn002TL4LE,7099
1543
+ vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=6J85q-vtfG-NHzCndMKLk5_sEEDiI52sTGaxefcUCOU,7892
1542
1544
  vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
1543
1545
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1544
1546
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
@@ -1558,7 +1560,7 @@ vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id
1558
1560
  vellum/workflows/nodes/core/templating_node/node.py,sha256=iqBmr2i-f-BqhisNQJiDfewjol0ur7-XpupLStyMJsg,3731
1559
1561
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=nXkgGDBg4wP36NwykdMEVWwx_xjv8oGT2rYkwuCB_VU,10075
1560
1562
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1561
- vellum/workflows/nodes/core/try_node/node.py,sha256=2r2I70j30IyZPvn3Q3zP2VgLbx3WQ1DdOr8NUlXjcq0,4429
1563
+ vellum/workflows/nodes/core/try_node/node.py,sha256=XdyOvlwQ3m4h0-_WNtaBl2t_CdlzPXclulkLOtUcX3E,4388
1562
1564
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1563
1565
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
1564
1566
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
@@ -1629,13 +1631,16 @@ vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrra
1629
1631
  vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1630
1632
  vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
1631
1633
  vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
1634
+ vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
1635
+ vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=z1hi13Ssya59LL5_hP5UI1qGH_RjUilStxCRLnnxpMI,6064
1636
+ vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=oK0y3dAupNOzpdTpjcDPxDFtuDfcQeMpD_QcyKD0lTE,4888
1632
1637
  vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
1633
1638
  vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1634
1639
  vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
1635
1640
  vellum/workflows/nodes/tests/test_utils.py,sha256=qNB6ApIsnFtE_9HDaEah9KD-zX8e10FhDixewS1uRcc,5199
1636
- vellum/workflows/nodes/utils.py,sha256=Tc3TAmAytb-gi30BAyzGY7DG0uS1_7KTGYdjrvKUSt0,8362
1641
+ vellum/workflows/nodes/utils.py,sha256=wVn68jhAQ9ev9LV3c0XEH276CiqcY9-fVgUFY_K9izQ,8409
1637
1642
  vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
1638
- vellum/workflows/outputs/base.py,sha256=jOvSr44GEmtldits-bysJoxme7js6aN_LkdV-PpA7Dk,8631
1643
+ vellum/workflows/outputs/base.py,sha256=1OGHqBJVk7i8cW8uewFWOhIjuMlRRpzCDrGE30ZwDjw,8763
1639
1644
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1640
1645
  vellum/workflows/ports/node_ports.py,sha256=g4A-8iUAvEJSkaWppbvzAR8XU02R9U-qLN4rP2Kq4Aw,2743
1641
1646
  vellum/workflows/ports/port.py,sha256=eI2SOZPZ5rsC3jMsxW6Rbn0NpaYQsrR7AapiIbbiy8Q,3635
@@ -1648,7 +1653,7 @@ vellum/workflows/references/external_input.py,sha256=c_4SojTpykCSbGS1Pjmx9FfquyY
1648
1653
  vellum/workflows/references/input.py,sha256=3INu-TLTi4dziWmva6LO3WvgDlPzsjayUx61cVvqLJA,325
1649
1654
  vellum/workflows/references/lazy.py,sha256=jgUYmgt-yAybzPf_R-74MzdU8VuNwMYI8EQqrj9lVR0,2948
1650
1655
  vellum/workflows/references/node.py,sha256=LP854wDVs-9I_aZ7-nkbwXqL2H7W2_3LED2e9FixNS8,1418
1651
- vellum/workflows/references/output.py,sha256=-g97wkZDf-6_l_-NM4C_8v1VBt2c7NCPhtrG2lBLKSc,2808
1656
+ vellum/workflows/references/output.py,sha256=QWrqLGpeo6mFxC_fKmL3LHIfrcDD9SzOhQdHvG99I9Y,3379
1652
1657
  vellum/workflows/references/state_value.py,sha256=bInUF0A3Pt4-zhA0f6LdSuyv8tz7n5QRkHAEn4gsmqI,711
1653
1658
  vellum/workflows/references/tests/test_lazy.py,sha256=0s50-LizMTlSTBQahpK0fg_xqCucA8YTp6QmIMqPvMk,919
1654
1659
  vellum/workflows/references/vellum_secret.py,sha256=Od4d19a5yletWMqNfJR5d_mZQUkVcFzj29mE-T9J7yE,480
@@ -1659,12 +1664,12 @@ vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8v
1659
1664
  vellum/workflows/runner/runner.py,sha256=1ozidWAFecR7nfpj_Uw33SBGJVZY54JyU0AA3wySqaA,32826
1660
1665
  vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
1661
1666
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1662
- vellum/workflows/state/base.py,sha256=Rj4UWh_YfPNZ4ISGv5ltVf8s0zdu4yGXhwYwEhO1Wf4,21353
1667
+ vellum/workflows/state/base.py,sha256=ZXDmVafs6sExcbx1azrZjEGQsmuY68mSRWfI7t2PT4c,22330
1663
1668
  vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
1664
1669
  vellum/workflows/state/encoder.py,sha256=TnOQojc5lTQ83g9QbpA4UCqShJvutmTMxbpKt-9gNe4,1911
1665
1670
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
1666
1671
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1667
- vellum/workflows/state/tests/test_state.py,sha256=hkxaGBfsbWyzSfMM-hfFktMQEFI3kIdfm5a4XQwk-Z8,6684
1672
+ vellum/workflows/state/tests/test_state.py,sha256=YOiC9qZAzkdiqb7nRarNWeDwxo7xHv3y3czlHl81ezg,6741
1668
1673
  vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1669
1674
  vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
1670
1675
  vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
@@ -1672,7 +1677,7 @@ vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SL
1672
1677
  vellum/workflows/types/core.py,sha256=kMQremh_I8egXpiKmtMQbB6e3OczAWiRnnTq5V6xlD0,928
1673
1678
  vellum/workflows/types/definition.py,sha256=z81CL_u0FJol-9yUIqoXNTYAARtU8x__c6s-f4rb5c8,2335
1674
1679
  vellum/workflows/types/generics.py,sha256=tKXz0LwWJGKw1YGudyl9_yFDrRgU6yYV1yJV1Zv-LTw,1430
1675
- vellum/workflows/types/stack.py,sha256=RDSGLkcV612ge8UuAH9TZiEGXxJt0Av2-H5rfzrTVVI,1014
1680
+ vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1676
1681
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1677
1682
  vellum/workflows/types/tests/test_utils.py,sha256=y2bj4O8-ykPRRRocdD98NdnQz6ydSCoMBp6rECPPqE8,2536
1678
1683
  vellum/workflows/types/utils.py,sha256=mSlcgIr8q_qMCtSCdPxcduRntL_5hk4ptFGq3K0EVgw,5801
@@ -1688,13 +1693,13 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
1688
1693
  vellum/workflows/utils/vellum_variables.py,sha256=UiGlUh0a8vel2FbW3w-xbHxSv_jNutkDdqMVtP_b42A,3385
1689
1694
  vellum/workflows/vellum_client.py,sha256=GxOy3dX6A04xiY69vPv1S4YGuQ_TMxwHi6WRMimQBBE,762
1690
1695
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1691
- vellum/workflows/workflows/base.py,sha256=X2X2-v_kN9dqkkhHfkPFpZ3k-ldURBF3CBKmi8js7A8,23392
1696
+ vellum/workflows/workflows/base.py,sha256=j9o6eXueXEwsueNMlZwYP4HhZPQjMgXIgHcRqWHNaDI,23584
1692
1697
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1693
1698
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1694
- vellum/workflows/workflows/tests/test_base_workflow.py,sha256=rBLsUsoLdRRQ-JBEfUivV9qVCjdqaiDsCPNyHvqz9fc,17361
1699
+ vellum/workflows/workflows/tests/test_base_workflow.py,sha256=8P5YIsNMO78_CR1NNK6wkEdkMB4b3Q_Ni1qxh78OnHo,20481
1695
1700
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1696
- vellum_ai-0.14.39.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1697
- vellum_ai-0.14.39.dist-info/METADATA,sha256=j--ftKNWYCJ3_QoC58vOMR75cDgcc0XqjmkFgo0Sp90,5484
1698
- vellum_ai-0.14.39.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1699
- vellum_ai-0.14.39.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1700
- vellum_ai-0.14.39.dist-info/RECORD,,
1701
+ vellum_ai-0.14.40.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1702
+ vellum_ai-0.14.40.dist-info/METADATA,sha256=yhGwwOKSMKxH_eHuWxg_zaUq6v3fWl6mDIXS0jv5acI,5484
1703
+ vellum_ai-0.14.40.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1704
+ vellum_ai-0.14.40.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1705
+ vellum_ai-0.14.40.dist-info/RECORD,,
vellum_cli/push.py CHANGED
@@ -17,7 +17,6 @@ from vellum.workflows.workflows.base import BaseWorkflow
17
17
  from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
18
18
  from vellum_cli.logger import load_cli_logger
19
19
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
20
- from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
21
20
 
22
21
 
23
22
  def push_command(
@@ -105,7 +104,6 @@ def push_command(
105
104
  # https://app.shortcut.com/vellum/story/5585
106
105
  workflow = BaseWorkflow.load_from_module(workflow_config.module)
107
106
  workflow_display = get_workflow_display(
108
- base_display_class=VellumWorkflowDisplay,
109
107
  workflow_class=workflow,
110
108
  dry_run=dry_run or False,
111
109
  )
@@ -1,10 +1,12 @@
1
1
  from dataclasses import dataclass, field
2
2
  from uuid import UUID
3
- from typing import Optional
3
+ from typing import Optional, Type
4
4
 
5
5
  from pydantic import Field
6
6
 
7
7
  from vellum.client.core.pydantic_utilities import UniversalBaseModel
8
+ from vellum.workflows.utils.uuids import uuid4_from_hash
9
+ from vellum.workflows.workflows.base import BaseWorkflow
8
10
  from vellum_ee.workflows.display.editor.types import NodeDisplayData
9
11
 
10
12
 
@@ -25,6 +27,17 @@ class WorkflowMetaDisplay:
25
27
  entrypoint_node_display: NodeDisplayData = Field(default_factory=NodeDisplayData)
26
28
  display_data: WorkflowDisplayData = field(default_factory=WorkflowDisplayData)
27
29
 
30
+ @classmethod
31
+ def get_default(cls, workflow: Type[BaseWorkflow]) -> "WorkflowMetaDisplay":
32
+ entrypoint_node_id = uuid4_from_hash(f"{workflow.__id__}|entrypoint_node_id")
33
+ entrypoint_node_source_handle_id = uuid4_from_hash(f"{workflow.__id__}|entrypoint_node_source_handle_id")
34
+
35
+ return WorkflowMetaDisplay(
36
+ entrypoint_node_id=entrypoint_node_id,
37
+ entrypoint_node_source_handle_id=entrypoint_node_source_handle_id,
38
+ entrypoint_node_display=NodeDisplayData(),
39
+ )
40
+
28
41
 
29
42
  @dataclass
30
43
  class WorkflowMetaDisplayOverrides(WorkflowMetaDisplay):
@@ -21,14 +21,31 @@ from vellum.client.types.code_resource_definition import CodeResourceDefinition
21
21
  from vellum.workflows import BaseWorkflow
22
22
  from vellum.workflows.constants import undefined
23
23
  from vellum.workflows.descriptors.base import BaseDescriptor
24
+ from vellum.workflows.expressions.accessor import AccessorExpression
25
+ from vellum.workflows.expressions.and_ import AndExpression
26
+ from vellum.workflows.expressions.begins_with import BeginsWithExpression
24
27
  from vellum.workflows.expressions.between import BetweenExpression
28
+ from vellum.workflows.expressions.coalesce_expression import CoalesceExpression
29
+ from vellum.workflows.expressions.contains import ContainsExpression
30
+ from vellum.workflows.expressions.does_not_begin_with import DoesNotBeginWithExpression
31
+ from vellum.workflows.expressions.does_not_contain import DoesNotContainExpression
32
+ from vellum.workflows.expressions.does_not_end_with import DoesNotEndWithExpression
33
+ from vellum.workflows.expressions.ends_with import EndsWithExpression
34
+ from vellum.workflows.expressions.equals import EqualsExpression
35
+ from vellum.workflows.expressions.greater_than import GreaterThanExpression
36
+ from vellum.workflows.expressions.greater_than_or_equal_to import GreaterThanOrEqualToExpression
37
+ from vellum.workflows.expressions.in_ import InExpression
25
38
  from vellum.workflows.expressions.is_nil import IsNilExpression
26
39
  from vellum.workflows.expressions.is_not_nil import IsNotNilExpression
27
40
  from vellum.workflows.expressions.is_not_null import IsNotNullExpression
28
41
  from vellum.workflows.expressions.is_not_undefined import IsNotUndefinedExpression
29
42
  from vellum.workflows.expressions.is_null import IsNullExpression
30
43
  from vellum.workflows.expressions.is_undefined import IsUndefinedExpression
44
+ from vellum.workflows.expressions.less_than import LessThanExpression
45
+ from vellum.workflows.expressions.less_than_or_equal_to import LessThanOrEqualToExpression
31
46
  from vellum.workflows.expressions.not_between import NotBetweenExpression
47
+ from vellum.workflows.expressions.not_in import NotInExpression
48
+ from vellum.workflows.expressions.or_ import OrExpression
32
49
  from vellum.workflows.expressions.parse_json import ParseJsonExpression
33
50
  from vellum.workflows.nodes.bases.base import BaseNode
34
51
  from vellum.workflows.nodes.displayable.bases.utils import primitive_to_vellum_value
@@ -50,7 +67,9 @@ from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_var
50
67
  from vellum_ee.workflows.display.editor.types import NodeDisplayData
51
68
  from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
52
69
  from vellum_ee.workflows.display.nodes.types import NodeOutputDisplay, PortDisplay, PortDisplayOverrides
70
+ from vellum_ee.workflows.display.utils.exceptions import UnsupportedSerializationException
53
71
  from vellum_ee.workflows.display.utils.expressions import get_child_descriptor
72
+ from vellum_ee.workflows.display.utils.registry import register_node_display_class
54
73
  from vellum_ee.workflows.display.utils.vellum import convert_descriptor_to_operator
55
74
 
56
75
  if TYPE_CHECKING:
@@ -121,9 +140,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
121
140
  # Once all nodes are Generic Nodes, we may replace this with a trigger_id or trigger attribute
122
141
  target_handle_id: ClassVar[Optional[UUID]] = None
123
142
 
124
- # Used to store the mapping between node types and their display classes
125
- _node_display_registry: Dict[Type[NodeType], Type["BaseNodeDisplay"]] = {}
126
-
127
143
  def serialize(self, display_context: "WorkflowDisplayContext", **kwargs: Any) -> JsonObject:
128
144
  node = self._node
129
145
  node_id = self.node_id
@@ -149,7 +165,7 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
149
165
  adornments = kwargs.get("adornments", None)
150
166
  wrapped_node = get_wrapped_node(node)
151
167
  if wrapped_node is not None:
152
- display_class = get_node_display_class(BaseNodeDisplay, wrapped_node)
168
+ display_class = get_node_display_class(wrapped_node)
153
169
 
154
170
  adornment: JsonObject = {
155
171
  "id": str(node_id),
@@ -280,10 +296,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
280
296
 
281
297
  return self.get_target_handle_id()
282
298
 
283
- @classmethod
284
- def get_from_node_display_registry(cls, node_class: Type[NodeType]) -> Optional[Type["BaseNodeDisplay"]]:
285
- return cls._node_display_registry.get(node_class)
286
-
287
299
  @cached_property
288
300
  def node_id(self) -> UUID:
289
301
  """Can be overridden as a class attribute to specify a custom node id."""
@@ -344,14 +356,12 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
344
356
 
345
357
  def __init_subclass__(cls, **kwargs: Any) -> None:
346
358
  super().__init_subclass__(**kwargs)
347
- if not cls._node_display_registry:
348
- cls._node_display_registry[BaseNode] = BaseNodeDisplay
349
359
 
350
360
  node_class = cls.infer_node_class()
351
361
  if node_class is BaseNode:
352
362
  return
353
363
 
354
- cls._node_display_registry[node_class] = cls
364
+ register_node_display_class(node_class=node_class, node_display_class=cls)
355
365
 
356
366
  def _get_generic_node_display_data(self) -> NodeDisplayData:
357
367
  explicit_value = self._get_explicit_node_display_attr("display_data", NodeDisplayData)
@@ -388,9 +398,29 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
388
398
  "lhs": lhs,
389
399
  "rhs": rhs,
390
400
  }
391
- else:
392
- lhs = self.serialize_value(display_context, condition._lhs) # type: ignore[attr-defined]
393
- rhs = self.serialize_value(display_context, condition._rhs) # type: ignore[attr-defined]
401
+ elif isinstance(
402
+ condition,
403
+ (
404
+ AndExpression,
405
+ BeginsWithExpression,
406
+ CoalesceExpression,
407
+ ContainsExpression,
408
+ DoesNotBeginWithExpression,
409
+ DoesNotContainExpression,
410
+ DoesNotEndWithExpression,
411
+ EndsWithExpression,
412
+ EqualsExpression,
413
+ GreaterThanExpression,
414
+ GreaterThanOrEqualToExpression,
415
+ InExpression,
416
+ LessThanExpression,
417
+ LessThanOrEqualToExpression,
418
+ NotInExpression,
419
+ OrExpression,
420
+ ),
421
+ ):
422
+ lhs = self.serialize_value(display_context, condition._lhs)
423
+ rhs = self.serialize_value(display_context, condition._rhs)
394
424
 
395
425
  return {
396
426
  "type": "BINARY_EXPRESSION",
@@ -398,6 +428,15 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
398
428
  "operator": convert_descriptor_to_operator(condition),
399
429
  "rhs": rhs,
400
430
  }
431
+ elif isinstance(condition, AccessorExpression):
432
+ return {
433
+ "type": "BINARY_EXPRESSION",
434
+ "lhs": self.serialize_value(display_context, condition._base),
435
+ "operator": "accessField",
436
+ "rhs": self.serialize_value(display_context, condition._field),
437
+ }
438
+
439
+ raise UnsupportedSerializationException(f"Unsupported condition type: {condition.__class__.__name__}")
401
440
 
402
441
  def serialize_value(self, display_context: "WorkflowDisplayContext", value: Any) -> JsonObject:
403
442
  if isinstance(value, ConstantValueReference):
@@ -458,3 +497,6 @@ class BaseNodeDisplay(Generic[NodeType], metaclass=BaseNodeDisplayMeta):
458
497
  # If it's not any of the references we know about,
459
498
  # then try to serialize it as a nested value
460
499
  return self.serialize_condition(display_context, value)
500
+
501
+
502
+ register_node_display_class(node_class=BaseNode, node_display_class=BaseNodeDisplay)