vellum-ai 1.6.3__py3-none-any.whl → 1.6.4__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.
@@ -27,10 +27,10 @@ class BaseClientWrapper:
27
27
 
28
28
  def get_headers(self) -> typing.Dict[str, str]:
29
29
  headers: typing.Dict[str, str] = {
30
- "User-Agent": "vellum-ai/1.6.3",
30
+ "User-Agent": "vellum-ai/1.6.4",
31
31
  "X-Fern-Language": "Python",
32
32
  "X-Fern-SDK-Name": "vellum-ai",
33
- "X-Fern-SDK-Version": "1.6.3",
33
+ "X-Fern-SDK-Version": "1.6.4",
34
34
  **(self.get_custom_headers() or {}),
35
35
  }
36
36
  if self._api_version is not None:
@@ -1,13 +1,14 @@
1
- from typing import ClassVar, Union
1
+ from typing import ClassVar, Generic, Union
2
2
 
3
3
  from vellum.client.types.vellum_error import VellumError
4
4
  from vellum.workflows.errors.types import WorkflowError, WorkflowErrorCode, vellum_error_to_workflow_error
5
5
  from vellum.workflows.exceptions import NodeException
6
6
  from vellum.workflows.nodes.bases.base import BaseNode
7
7
  from vellum.workflows.ports import NodePorts
8
+ from vellum.workflows.types.generics import StateType
8
9
 
9
10
 
10
- class ErrorNode(BaseNode):
11
+ class ErrorNode(BaseNode[StateType], Generic[StateType]):
11
12
  """
12
13
  Used to raise an error to reject the surrounding Workflow.
13
14
 
@@ -1,4 +1,4 @@
1
- from typing import Set
1
+ from typing import Generic, Set
2
2
 
3
3
  from vellum.workflows.nodes.bases import BaseNode
4
4
  from vellum.workflows.outputs.base import BaseOutputs
@@ -6,9 +6,10 @@ from vellum.workflows.ports.port import Port
6
6
  from vellum.workflows.ports.utils import validate_ports
7
7
  from vellum.workflows.state.base import BaseState
8
8
  from vellum.workflows.types import MergeBehavior
9
+ from vellum.workflows.types.generics import StateType
9
10
 
10
11
 
11
- class ConditionalNode(BaseNode):
12
+ class ConditionalNode(BaseNode[StateType], Generic[StateType]):
12
13
  """
13
14
  Used to conditionally determine which port to invoke next. This node exists to be backwards compatible with
14
15
  Vellum's Conditional Node, and for most cases, you should extend `BaseNode.Ports` directly.
@@ -1,8 +1,11 @@
1
+ from typing import Generic
2
+
1
3
  from vellum.workflows.nodes.bases import BaseNode
2
4
  from vellum.workflows.types import MergeBehavior
5
+ from vellum.workflows.types.generics import StateType
3
6
 
4
7
 
5
- class MergeNode(BaseNode):
8
+ class MergeNode(BaseNode[StateType], Generic[StateType]):
6
9
  """
7
10
  Used to merge the control flow of multiple nodes into a single node. This node exists to be backwards compatible
8
11
  with Vellum's Merge Node, and for most cases, you should extend from `BaseNode.Trigger` directly.
@@ -1,8 +1,11 @@
1
+ from typing import Generic
2
+
1
3
  from vellum.workflows.nodes.bases import BaseNode
2
4
  from vellum.workflows.types import MergeBehavior
5
+ from vellum.workflows.types.generics import StateType
3
6
 
4
7
 
5
- class NoteNode(BaseNode):
8
+ class NoteNode(BaseNode[StateType], Generic[StateType]):
6
9
  """
7
10
  A no-op Node purely used to display a note in the Vellum UI.
8
11
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.6.3
3
+ Version: 1.6.4
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -48,7 +48,7 @@ vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=z4oeTgKnMGV
48
48
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=9_AslWjzj4RHH2sq3SIaq9FU0NCg7ex5TIWrNMybqXg,2173
49
49
  vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=KA4U5NADWCBBbTG0f76OOFW9HvlWd5DfZoqN5Y0ZK9c,12167
50
50
  vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=m20_ZZ3Au0ZCpI3TNC9xh54ld1X13CNq-T51VOtP23k,6434
51
- vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=AW5JuHXtmtcJKeRiZKd7iB1re_D7G7jl_OlaZs8nUl0,4219
51
+ vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=we7NENZpci-LiWXJFTPWzliCMdjzCMMMWUCfgJ-oP0g,4297
52
52
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xMHaPfTSZWYprQenlHm2g47u0a5O9Me_dhAjfqo8nKQ,3116
53
53
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=6PcAFA_EJn7vEMdqgoRjYTLHwnXCrJv80B10zuUx4jE,1026
54
54
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=uo4YZRV48iX4peGAA1xkGniSPrepywvW_gS7codt-VQ,3378
@@ -93,7 +93,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node
93
93
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=LnZp1YXDn-AaaxiYgxrhCQeH-rLgmlu_r_lvM65EQ5w,7517
94
94
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=-A9CAnzIhPMn44l_dwZcofBXBPNFa-oHke9p0w3W5PA,26358
95
95
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=gn7kisqAEG9JCZ18V88qMGvlcsTulSwpWvvEwjCfh6Y,21871
96
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=ALNOn5BdcWxw0myi6pXi5IwWtTE9H2CGrodP1BANuAg,16790
96
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=I1Mlt2Iy88C98IpJ21jl4Xu7TtSHqyx_4A4bjJgTJUE,16990
97
97
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=UnfWTfKN8DrOLpjCfWMgENJBjgNLWcRVfexbwERKY-c,8501
98
98
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=SGlBiwohTTuf7oXqO3R1lP6u7gPea8Elt1CpZU_W9Bk,21482
99
99
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=JKfYNBCmy7n6v2fd6NyYGHI1_TJRlfDNWiZMvHrdCWU,13079
@@ -160,7 +160,7 @@ vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
160
160
  vellum/client/__init__.py,sha256=rMnKRqL5-356SBc-rfm56MkO87PuAi2mtcfBszcJU1M,74316
161
161
  vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
162
162
  vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
163
- vellum/client/core/client_wrapper.py,sha256=sFGuikZMgPFZOHfH3muMMTew0bqB89ar8-4OrulZHu0,2840
163
+ vellum/client/core/client_wrapper.py,sha256=EQroyMygQaKudbqG-NTWixPzjdmHV_wnRNH5sxTldIY,2840
164
164
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
165
165
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
166
166
  vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -1886,7 +1886,7 @@ vellum/workflows/nodes/bases/tests/test_base_adornment_node.py,sha256=fXZI9KqpS4
1886
1886
  vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=igJrcSxSZADk5tLpssAt0uAXe9oJoLbilzueJJvA5p4,10942
1887
1887
  vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
1888
1888
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1889
- vellum/workflows/nodes/core/error_node/node.py,sha256=GpvvJS0F1TzOHFPRYJVQMYy96C_MCOeZGo_pzt63bfU,1357
1889
+ vellum/workflows/nodes/core/error_node/node.py,sha256=CwGMLIq6z_MogmjlicBLZm2pE7VW69ZL8fnJzNEVKHs,1451
1890
1890
  vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
1891
1891
  vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=N6Yh1z_xlZif9bBPmpwOC3xzxaru3_F5sbFaYHm2x3A,7222
1892
1892
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1936,7 +1936,7 @@ vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sh
1936
1936
  vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py,sha256=RQy7SsA39kTJAudzpYNN3jK_kuq6bWNZUld54H5pRZA,40966
1937
1937
  vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=0F_4PVvB7vjsV0RS48Brv_4djebWOMR_zgzHxzA9iV4,3308
1938
1938
  vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
1939
- vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=71ZUNfTiD7t2Kai2ypw0tmv1lSf1brQaHAQD-SeUrGE,1101
1939
+ vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=2g32hWosE3zwVaK2UPFnVEer1Nbn04s3friF2rGztmE,1195
1940
1940
  vellum/workflows/nodes/displayable/conftest.py,sha256=K2kLM2JGAfcrmmd92u8DXInUO5klFdggPWblg5RVcx4,5729
1941
1941
  vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
1942
1942
  vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=1_F9S7w-gIEUoXIdilgpqDeCKxJ0_J0oTYvE35dbjHk,4908
@@ -1952,9 +1952,9 @@ vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=0O1dksk0h6-
1952
1952
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1953
1953
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=bBHs90mV5SZ3rJPAL0wx4WWyawUA406LgMPOdvpZC_A,10923
1954
1954
  vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
1955
- vellum/workflows/nodes/displayable/merge_node/node.py,sha256=nZtGGVAvY4fvGg8vwV6sTQ8_QLRnigeXt0vf2FL272A,450
1955
+ vellum/workflows/nodes/displayable/merge_node/node.py,sha256=_zHW9fReWdpiM3GiUzdEgyOSznRqkPsTj-XKD6Oja8I,563
1956
1956
  vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
1957
- vellum/workflows/nodes/displayable/note_node/node.py,sha256=sIN1VBQ7zeT3GhN0kupXbFfdpvgedWV79k4woJNp5IQ,394
1957
+ vellum/workflows/nodes/displayable/note_node/node.py,sha256=aO54y6p5FjQe4XOSlQVRSVby4a5Ikp_ZS98GiNkM8Gs,507
1958
1958
  vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
1959
1959
  vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=XeBn6d3ce-RJuUiTwpDKUKUJvcYLQw61YufpIGVWPHY,2641
1960
1960
  vellum/workflows/nodes/displayable/prompt_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -2063,8 +2063,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
2063
2063
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2064
2064
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=Boa-_m9ii2Qsa1RvVM-VYniF7zCpzGgEGy-OnPZkrHg,23941
2065
2065
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
2066
- vellum_ai-1.6.3.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2067
- vellum_ai-1.6.3.dist-info/METADATA,sha256=4U7TNEZ9YCRzcEOlmFSgbJuzwscBVf182IlYSFW2kOc,5547
2068
- vellum_ai-1.6.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2069
- vellum_ai-1.6.3.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2070
- vellum_ai-1.6.3.dist-info/RECORD,,
2066
+ vellum_ai-1.6.4.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2067
+ vellum_ai-1.6.4.dist-info/METADATA,sha256=kRTvoaljnXd0hIt_CQhEMNHXgv8YFwb5Momhc8sRRjY,5547
2068
+ vellum_ai-1.6.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2069
+ vellum_ai-1.6.4.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2070
+ vellum_ai-1.6.4.dist-info/RECORD,,
@@ -32,15 +32,6 @@ class BaseMapNodeDisplay(BaseAdornmentNodeDisplay[_MapNodeType], Generic[_MapNod
32
32
 
33
33
  items = raise_if_descriptor(node.items)
34
34
 
35
- items_node_input = create_node_input(
36
- node_id=node_id,
37
- input_name="items",
38
- value=items or [],
39
- display_context=display_context,
40
- input_id=self.node_input_ids_by_name.get("items"),
41
- )
42
- node_inputs = [items_node_input]
43
-
44
35
  subworkflow_display = get_workflow_display(
45
36
  base_display_class=display_context.workflow_display_class,
46
37
  workflow_class=subworkflow,
@@ -58,6 +49,16 @@ class BaseMapNodeDisplay(BaseAdornmentNodeDisplay[_MapNodeType], Generic[_MapNod
58
49
  for input_variable in input_variables
59
50
  if isinstance(input_variable, dict) and input_variable["key"] == "items"
60
51
  )
52
+
53
+ # Use the same ID for the map node's items input as the subworkflow's items input
54
+ items_node_input = create_node_input(
55
+ node_id=node_id,
56
+ input_name="items",
57
+ value=items or [],
58
+ display_context=display_context,
59
+ input_id=str(items_workflow_input_id),
60
+ )
61
+ node_inputs = [items_node_input]
61
62
  item_workflow_input_id = next(
62
63
  input_variable["id"]
63
64
  for input_variable in input_variables
@@ -81,7 +81,7 @@ def test_serialize_workflow():
81
81
  "type": "MAP",
82
82
  "inputs": [
83
83
  {
84
- "id": "4c0a109f-599e-4d04-a396-a51474fc2996",
84
+ "id": "0acef1e7-caa1-4d9f-bb69-6981729af18d",
85
85
  "key": "items",
86
86
  "value": {
87
87
  "rules": [
@@ -393,3 +393,7 @@ def test_serialize_workflow():
393
393
  "workflow",
394
394
  ],
395
395
  }
396
+
397
+ # AND the map node's items input ID should match the subworkflow's items input ID
398
+ items_input_id = map_node["data"]["items_input_id"]
399
+ assert map_node["inputs"][0]["id"] == items_input_id