vellum-ai 0.10.3__py3-none-any.whl → 0.10.4__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,7 +17,7 @@ class BaseClientWrapper:
17
17
  headers: typing.Dict[str, str] = {
18
18
  "X-Fern-Language": "Python",
19
19
  "X-Fern-SDK-Name": "vellum-ai",
20
- "X-Fern-SDK-Version": "0.10.3",
20
+ "X-Fern-SDK-Version": "0.10.4",
21
21
  }
22
22
  headers["X_API_KEY"] = self.api_key
23
23
  return headers
@@ -7,6 +7,7 @@ from deepdiff import DeepDiff
7
7
 
8
8
  from vellum.workflows.errors.types import VellumError, VellumErrorCode
9
9
  from vellum.workflows.events.node import NodeExecutionInitiatedBody, NodeExecutionInitiatedEvent
10
+ from vellum.workflows.events.types import NodeParentContext, WorkflowParentContext
10
11
  from vellum.workflows.events.workflow import (
11
12
  WorkflowExecutionFulfilledBody,
12
13
  WorkflowExecutionFulfilledEvent,
@@ -73,6 +74,7 @@ module_root = name_parts[: name_parts.index("events")]
73
74
  "foo": "bar",
74
75
  },
75
76
  },
77
+ "parent": None,
76
78
  },
77
79
  ),
78
80
  (
@@ -87,6 +89,14 @@ module_root = name_parts[: name_parts.index("events")]
87
89
  MockNode.node_foo: "bar",
88
90
  },
89
91
  ),
92
+ parent=NodeParentContext(
93
+ node_definition=MockNode,
94
+ span_id=UUID("123e4567-e89b-12d3-a456-426614174000"),
95
+ parent=WorkflowParentContext(
96
+ workflow_definition=MockWorkflow,
97
+ span_id=UUID("123e4567-e89b-12d3-a456-426614174000")
98
+ )
99
+ )
90
100
  ),
91
101
  {
92
102
  "id": "123e4567-e89b-12d3-a456-426614174000",
@@ -104,6 +114,23 @@ module_root = name_parts[: name_parts.index("events")]
104
114
  "node_foo": "bar",
105
115
  },
106
116
  },
117
+ "parent": {
118
+ "node_definition": {
119
+ "name": "MockNode",
120
+ "module": module_root + ["events", "tests", "test_event"],
121
+ },
122
+ "parent": {
123
+ "workflow_definition": {
124
+ "name": "MockWorkflow",
125
+ "module": module_root + ["events", "tests", "test_event"],
126
+ },
127
+ "type": "WORKFLOW",
128
+ "parent": None,
129
+ "span_id": "123e4567-e89b-12d3-a456-426614174000"
130
+ },
131
+ "type": "WORKFLOW_NODE",
132
+ "span_id": "123e4567-e89b-12d3-a456-426614174000"
133
+ },
107
134
  },
108
135
  ),
109
136
  (
@@ -137,6 +164,7 @@ module_root = name_parts[: name_parts.index("events")]
137
164
  "value": "foo",
138
165
  },
139
166
  },
167
+ "parent": None
140
168
  },
141
169
  ),
142
170
  (
@@ -168,6 +196,7 @@ module_root = name_parts[: name_parts.index("events")]
168
196
  "example": "foo",
169
197
  },
170
198
  },
199
+ "parent": None,
171
200
  },
172
201
  ),
173
202
  (
@@ -201,6 +230,7 @@ module_root = name_parts[: name_parts.index("events")]
201
230
  "code": "USER_DEFINED_ERROR",
202
231
  },
203
232
  },
233
+ "parent": None,
204
234
  },
205
235
  ),
206
236
  ],
@@ -2,15 +2,18 @@ from datetime import datetime
2
2
  from enum import Enum
3
3
  import json
4
4
  from uuid import UUID, uuid4
5
- from typing import Any, Dict, Literal
5
+ from typing import TYPE_CHECKING, Any, Dict, Literal, Optional, Type, Union
6
6
 
7
- from pydantic import Field
7
+ from pydantic import Field, field_serializer
8
8
 
9
9
  from vellum.core.pydantic_utilities import UniversalBaseModel
10
-
11
10
  from vellum.workflows.state.encoder import DefaultStateEncoder
12
11
  from vellum.workflows.types.utils import datetime_now
13
12
 
13
+ if TYPE_CHECKING:
14
+ from vellum.workflows.nodes.bases.base import BaseNode
15
+ from vellum.workflows.workflows.base import BaseWorkflow
16
+
14
17
 
15
18
  class WorkflowEventType(Enum):
16
19
  NODE = "NODE"
@@ -44,9 +47,60 @@ def default_serializer(obj: Any) -> Any:
44
47
  )
45
48
 
46
49
 
50
+ class BaseParentContext(UniversalBaseModel):
51
+ span_id: UUID
52
+ parent: Optional['ParentContext'] = None
53
+
54
+
55
+ class BaseDeploymentParentContext(BaseParentContext):
56
+ deployment_id: UUID
57
+ deployment_name: str
58
+ deployment_history_item_id: UUID
59
+ release_tag_id: UUID
60
+ release_tag_name: str
61
+ external_id: Optional[str]
62
+
63
+
64
+ class WorkflowDeploymentParentContext(BaseDeploymentParentContext):
65
+ type: Literal["WORKFLOW_RELEASE_TAG"] = "WORKFLOW_RELEASE_TAG"
66
+ workflow_version_id: UUID
67
+
68
+
69
+ class PromptDeploymentParentContext(BaseDeploymentParentContext):
70
+ type: Literal["PROMPT_RELEASE_TAG"] = "PROMPT_RELEASE_TAG"
71
+ prompt_version_id: UUID
72
+
73
+
74
+ class NodeParentContext(BaseParentContext):
75
+ type: Literal["WORKFLOW_NODE"] = "WORKFLOW_NODE"
76
+ node_definition: Type['BaseNode']
77
+
78
+ @field_serializer("node_definition")
79
+ def serialize_node_definition(self, definition: Type, _info: Any) -> Dict[str, Any]:
80
+ return serialize_type_encoder(definition)
81
+
82
+
83
+ class WorkflowParentContext(BaseParentContext):
84
+ type: Literal["WORKFLOW"] = "WORKFLOW"
85
+ workflow_definition: Type['BaseWorkflow']
86
+
87
+ @field_serializer("workflow_definition")
88
+ def serialize_workflow_definition(self, definition: Type, _info: Any) -> Dict[str, Any]:
89
+ return serialize_type_encoder(definition)
90
+
91
+
92
+ ParentContext = Union[
93
+ NodeParentContext,
94
+ WorkflowParentContext,
95
+ PromptDeploymentParentContext,
96
+ WorkflowDeploymentParentContext,
97
+ ]
98
+
99
+
47
100
  class BaseEvent(UniversalBaseModel):
48
101
  id: UUID = Field(default_factory=uuid4)
49
102
  timestamp: datetime = Field(default_factory=default_datetime_factory)
50
103
  api_version: Literal["2024-10-25"] = "2024-10-25"
51
104
  trace_id: UUID
52
105
  span_id: UUID
106
+ parent: Optional['ParentContext'] = None
@@ -25,6 +25,7 @@ class InlineSubworkflowNode(BaseSubworkflowNode[StateType], Generic[StateType, W
25
25
  def run(self) -> Iterator[BaseOutput]:
26
26
  subworkflow = self.subworkflow(
27
27
  parent_state=self.state,
28
+ context=self._context,
28
29
  )
29
30
  subworkflow_stream = subworkflow.stream(
30
31
  inputs=self._compile_subworkflow_inputs(),
@@ -89,7 +89,7 @@ class MapNode(BaseNode, Generic[StateType, MapNodeItemType]):
89
89
  return self.Outputs(**mapped_items)
90
90
 
91
91
  def _run_subworkflow(self, *, item: MapNodeItemType, index: int) -> None:
92
- subworkflow = self.subworkflow(parent_state=self.state)
92
+ subworkflow = self.subworkflow(parent_state=self.state, context=self._context)
93
93
  events = subworkflow.stream(inputs=self.SubworkflowInputs(index=index, item=item, all_items=self.items))
94
94
 
95
95
  for event in events:
@@ -43,6 +43,7 @@ class RetryNode(BaseNode[StateType], Generic[StateType], metaclass=_RetryNodeMet
43
43
  attempt_number = index + 1
44
44
  subworkflow = self.subworkflow(
45
45
  parent_state=self.state,
46
+ context=self._context,
46
47
  )
47
48
  terminal_event = subworkflow.run(
48
49
  inputs=self.SubworkflowInputs(attempt_number=attempt_number),
@@ -59,6 +59,7 @@ class TryNode(BaseNode[StateType], Generic[StateType], metaclass=_TryNodeMeta):
59
59
  def run(self) -> Outputs:
60
60
  subworkflow = self.subworkflow(
61
61
  parent_state=self.state,
62
+ context=self._context,
62
63
  )
63
64
  terminal_event = subworkflow.run()
64
65
 
@@ -1,5 +1,6 @@
1
1
  import pytest
2
2
 
3
+ from vellum.client import Vellum
3
4
  from vellum.workflows.errors.types import VellumError, VellumErrorCode
4
5
  from vellum.workflows.exceptions import NodeException
5
6
  from vellum.workflows.inputs.base import BaseInputs
@@ -7,6 +8,7 @@ from vellum.workflows.nodes.bases import BaseNode
7
8
  from vellum.workflows.nodes.core.try_node.node import TryNode
8
9
  from vellum.workflows.outputs import BaseOutputs
9
10
  from vellum.workflows.state.base import BaseState, StateMeta
11
+ from vellum.workflows.state.context import WorkflowContext
10
12
 
11
13
 
12
14
  def test_try_node__on_error_code__successfully_caught():
@@ -80,3 +82,25 @@ def test_try_node__use_parent_inputs_and_state():
80
82
 
81
83
  # THEN the data is used successfully
82
84
  assert outputs == {"value": "foo bar"}
85
+
86
+
87
+ def test_try_node__use_parent_execution_context():
88
+ # GIVEN a try node that uses node context to use the vellum client
89
+ @TryNode.wrap()
90
+ class TestNode(BaseNode):
91
+ class Outputs(BaseOutputs):
92
+ key: str
93
+
94
+ def run(self) -> Outputs:
95
+ return self.Outputs(key=self._context.vellum_client.ad_hoc._client_wrapper.api_key)
96
+
97
+ # WHEN the node is run with a custom vellum client
98
+ node = TestNode(
99
+ context=WorkflowContext(
100
+ _vellum_client=Vellum(api_key="test-key"),
101
+ )
102
+ )
103
+ outputs = node.run()
104
+
105
+ # THEN the inner node had access to the key
106
+ assert outputs == {"key": "test-key"}
@@ -1,3 +1,4 @@
1
+ import pytest
1
2
  from collections import defaultdict
2
3
  from copy import deepcopy
3
4
  import json
@@ -76,6 +77,7 @@ def test_state_deepcopy():
76
77
  assert deepcopied_state.meta.node_outputs == state.meta.node_outputs
77
78
 
78
79
 
80
+ @pytest.mark.skip(reason="https://app.shortcut.com/vellum/story/5654")
79
81
  def test_state_deepcopy__with_node_output_updates():
80
82
  # GIVEN an initial state instance
81
83
  state = MockState(foo="bar")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.10.3
3
+ Version: 0.10.4
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -31,9 +31,9 @@ vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=FwyEh
31
31
  vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=38_0gZbtWgpBO6EAEnwR8Enz3vP23Ga72StZ__ECqIc,4646
32
32
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=7YmVRNSI6RkK1rvg0b0zDeW2nnBIKir0ERzqqtT08I4,2218
33
33
  vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=busFtdD7Cs6yeHsCeyVEReHkLlt062vP_mG4GAynsNk,3116
34
- vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=ycbxwvAykeGqDQ7f1jUm-efsGIBxtEnLL63IpoCuts8,8679
34
+ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=B2WX8C5cx3kYqd3ClyesY0fyeFwfEgb7-iC_gIWgNp4,8440
35
35
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=SOGhvY0nUa02aDm5hrMSEAg0qdMxrI4GSB5_bpuTS0o,2671
36
- vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=2pPnJOXQcHQI4RyXXsaisztXgHZB_PJ-D6re5zX0-WI,3076
36
+ vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=79EYw_C7jef5wbPFtT5F2cjuF9EvUimwEEcL0dX-M9Q,3029
37
37
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=LmjC0yhXWOIDPnHmQpoMpzLr_VE2_ZpsJhWGSAqaHHY,3809
39
39
  vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=5JDFT8rpm4rKjoOvrjrvjyaK-sFVW0_xAZPB4_En-hA,1680
@@ -68,7 +68,7 @@ vellum/client/README.md,sha256=8cKUE1kSuhz-U87n3-clA7o9_zlP0Avr4qKbvRbdT2k,5984
68
68
  vellum/client/__init__.py,sha256=Fu-wzw_MiTtqAQOFhcFcrLKAPkEfUhf6K4ZuFspfKUw,115305
69
69
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
70
70
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
71
- vellum/client/core/client_wrapper.py,sha256=49Q7kpFVRsEyZ7dh-tCnzIEFHoE56Lgj8quBgXqITqM,1890
71
+ vellum/client/core/client_wrapper.py,sha256=k5EK8N1d-FKFlgsJNJtwPgk4x8KEICMhKgvOXBMOF_0,1890
72
72
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
73
73
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
74
74
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -1188,8 +1188,8 @@ vellum/workflows/errors/types.py,sha256=YQy6na_iBkqxl9GHKOcin44m8DMRG5KP9oLV1Lpa
1188
1188
  vellum/workflows/events/__init__.py,sha256=vLwQuykMmbv0izdUvsamouRQKbmKX_r9Poo77jd404w,821
1189
1189
  vellum/workflows/events/node.py,sha256=w5A2MCWD8J-qvdmxBRP4r_c_qz6SK4YLjlsoswrYHc0,3697
1190
1190
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1191
- vellum/workflows/events/tests/test_event.py,sha256=DTPBFYReni83YUCffqFFtgeqo15kfHMnQmd9SOC_mH8,8236
1192
- vellum/workflows/events/types.py,sha256=CSoHzgY8ItonZh-zs7UliIaRsA-NkhRHt4v0ModQTr0,1171
1191
+ vellum/workflows/events/tests/test_event.py,sha256=UdBfjJFGUh1b0T3x-3IuN1Rg97Be5MViXaMY5tjnTL8,9614
1192
+ vellum/workflows/events/types.py,sha256=2MDqlhBMwFWKso423IGH9ZdsPnmBWGGOIBceW568pnk,2865
1193
1193
  vellum/workflows/events/utils.py,sha256=OwtE8dHOCX01jvLyoS1l18tYQ4ob0YJcUhUorKWLJh0,232
1194
1194
  vellum/workflows/events/workflow.py,sha256=kPjZTh5hzCsSrVKLkXQNwzxhnUp3X4GkFA5veGatGlQ,4353
1195
1195
  vellum/workflows/exceptions.py,sha256=Dc7mxstsaMDRmS91QEOiZCbZ1ZIRacnm0l5lQmC6WkA,401
@@ -1238,13 +1238,13 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
1238
1238
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1239
1239
  vellum/workflows/nodes/core/error_node/node.py,sha256=hqBPHoLnhNrK9ITIaEzpnk47XYDbG6cmObz7oe78Ceg,944
1240
1240
  vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
1241
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=FX_m7wppFjXFlYL29us8OY5ghWC2fxxKQLCxec_H85w,2966
1241
+ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=RrThrYAmZDg0IUKRU5tcJRueg3OPZjPvBTpRskt7hPI,3001
1242
1242
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1243
- vellum/workflows/nodes/core/map_node/node.py,sha256=6Pgu0O5SF1KepJQDlGczKGDwRD5k4Mr8ERzFR5cGCBs,6183
1243
+ vellum/workflows/nodes/core/map_node/node.py,sha256=aPhV3niv_jWSwrZ2CwiRg0CDOM-09Fa6QqOPYNJMgRc,6206
1244
1244
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1245
1245
  vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=RHSZs7t6mW3UWvRrXnHZqaXVdRT2ZquOK_YHJ-gzXsU,1871
1246
1246
  vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
1247
- vellum/workflows/nodes/core/retry_node/node.py,sha256=_-InZoRlXFgZ03Zrq-MjUklGFaKTQadTDdV08lE6Jk4,4174
1247
+ vellum/workflows/nodes/core/retry_node/node.py,sha256=ZDMk6h17Fzq5lP66iXrgtyuBo2RKsIxWJqMa0x3FG1k,4213
1248
1248
  vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1249
1249
  vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=zANiu9-d-uIOP9tiSEFiXiVLRt_BJ76Dh6Obgk2BUsA,3120
1250
1250
  vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
@@ -1254,9 +1254,9 @@ vellum/workflows/nodes/core/templating_node/node.py,sha256=Ed1XMtz_Mzq9Dv08wcsIv
1254
1254
  vellum/workflows/nodes/core/templating_node/render.py,sha256=OpJp0NAH6qcEL6K9lxR0qjpFb75TYNttJR5iCos8tmg,1792
1255
1255
  vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=L6F3Gw9doguj1TSKmAns-mzXvoRuRivaCFe3mhjo13E,551
1256
1256
  vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
1257
- vellum/workflows/nodes/core/try_node/node.py,sha256=dp1U66KrgsAzieqlrfFcU847gO8U8MJzguik6pOSQ_Y,4127
1257
+ vellum/workflows/nodes/core/try_node/node.py,sha256=ZFySh3S7slWN20rlvukqgmN2TVsG58Lz_p5jdNK_96Q,4162
1258
1258
  vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1259
- vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=SjesqvW81dIFHqy1LszQZ8f2u07uw3Q0stVhLAyJres,2696
1259
+ vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=Hjf4485svKEtNOnMBfnMP01GKihMRvN9Nkev2TFbHLE,3447
1260
1260
  vellum/workflows/nodes/displayable/__init__.py,sha256=SReuiXngYFlTshz2dWW6JPuLDIM6zT2Pk1YRxiQANIw,975
1261
1261
  vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
1262
1262
  vellum/workflows/nodes/displayable/api_node/node.py,sha256=-m93_KqwaWxbtbNQDWnLZZ-TSHCwd4ir2V542zovaZU,2043
@@ -1326,7 +1326,7 @@ vellum/workflows/state/context.py,sha256=tpJoOgmx7bmeNrQeOtavOfqTwBbtJCNDqjJ6ssh
1326
1326
  vellum/workflows/state/encoder.py,sha256=jYwC_47gHyMuPRvshWBNJ1SxVXQ1SBCfxvq7iuHjV_g,1688
1327
1327
  vellum/workflows/state/store.py,sha256=VYGBQgN1bpd1as5eGiouV_7scg8QsRs4_1aqZAGIsRQ,793
1328
1328
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1329
- vellum/workflows/state/tests/test_state.py,sha256=BsF_8u_qh4I1iyVrA6ctEUXBnvBsIDvlQJ-tiPjCO2M,3225
1329
+ vellum/workflows/state/tests/test_state.py,sha256=BQjcdREIK1MPuGhivRUgpynVJLftjEpH9RG3cRKxQEY,3310
1330
1330
  vellum/workflows/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1331
1331
  vellum/workflows/types/core.py,sha256=llsHFE3XKnVEk_pYoK0s9WUdeninSU5Kmoi7dU4GX0c,1804
1332
1332
  vellum/workflows/types/generics.py,sha256=ZkfoRhWs042i5IjA99v2wIhmh1u-Wieo3LzosgGWJVk,600
@@ -1343,8 +1343,8 @@ vellum/workflows/utils/vellum_variables.py,sha256=JA7hhbJ_9m7KEYFaCv5R6FqYeTRWDp
1343
1343
  vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528t75s,683
1344
1344
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1345
1345
  vellum/workflows/workflows/base.py,sha256=NbQ3jR9veKdfK5S9qPkiJvy16l19YyQxzops_Y09wMw,12872
1346
- vellum_ai-0.10.3.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1347
- vellum_ai-0.10.3.dist-info/METADATA,sha256=R_Zx_WByXz0kP8foq6yuZnTlIxTbCpR9bIK_Ge35PAg,5011
1348
- vellum_ai-0.10.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
1349
- vellum_ai-0.10.3.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1350
- vellum_ai-0.10.3.dist-info/RECORD,,
1346
+ vellum_ai-0.10.4.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1347
+ vellum_ai-0.10.4.dist-info/METADATA,sha256=02ud_MZb29bNWRkoShUsfJ1lKb37VJ1qNIxure9-TwE,5011
1348
+ vellum_ai-0.10.4.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
1349
+ vellum_ai-0.10.4.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1350
+ vellum_ai-0.10.4.dist-info/RECORD,,
@@ -7,16 +7,15 @@ from vellum import (
7
7
  VellumValueLogicalConditionGroupRequest,
8
8
  VellumValueLogicalConditionRequest,
9
9
  )
10
-
10
+ from vellum.workflows.nodes.displayable.search_node import SearchNode
11
+ from vellum.workflows.references import OutputReference
12
+ from vellum.workflows.types.core import JsonArray, JsonObject
11
13
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
12
14
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
13
15
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
14
16
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
15
17
  from vellum_ee.workflows.display.utils.uuids import uuid4_from_hash
16
18
  from vellum_ee.workflows.display.vellum import NodeInput
17
- from vellum.workflows.nodes.displayable.search_node import SearchNode
18
- from vellum.workflows.references import OutputReference
19
- from vellum.workflows.types.core import JsonArray, JsonObject
20
19
 
21
20
  _SearchNodeType = TypeVar("_SearchNodeType", bound=SearchNode)
22
21
 
@@ -76,10 +75,7 @@ class BaseSearchNodeDisplay(BaseNodeVellumDisplay[_SearchNodeType], Generic[_Sea
76
75
  options = raise_if_descriptor(node.options)
77
76
  filters = options.filters if options else None
78
77
 
79
- if filters and filters.external_ids:
80
- # TODO: Add support for serializing external ID filters
81
- # https://app.shortcut.com/vellum/story/5563/add-support-for-serializing-external-id-in-text-search-nodes
82
- raise NotImplementedError("Serializing External ID filters is not yet supported")
78
+ external_id_filters = filters.external_ids if filters else None
83
79
 
84
80
  raw_metadata_filters = filters.metadata if filters else None
85
81
  metadata_filters = None
@@ -108,7 +104,7 @@ class BaseSearchNodeDisplay(BaseNodeVellumDisplay[_SearchNodeType], Generic[_Sea
108
104
  "result_merging_enabled",
109
105
  ("True" if result_merging_enabled else "False"),
110
106
  ),
111
- ("external_id_filters", None),
107
+ ("external_id_filters", external_id_filters),
112
108
  ("metadata_filters", metadata_filters),
113
109
  ]
114
110
 
@@ -1,19 +1,18 @@
1
1
  from uuid import UUID
2
2
  from typing import Any, ClassVar, Dict, Generic, Optional, TypeVar
3
3
 
4
+ from vellum.workflows.nodes.core.templating_node import TemplatingNode
5
+ from vellum.workflows.types.core import JsonObject
6
+ from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
4
7
  from vellum_ee.workflows.display.nodes.base_node_vellum_display import BaseNodeVellumDisplay
5
8
  from vellum_ee.workflows.display.nodes.utils import raise_if_descriptor
6
9
  from vellum_ee.workflows.display.nodes.vellum.utils import create_node_input
7
10
  from vellum_ee.workflows.display.types import WorkflowDisplayContext
8
- from vellum.workflows.nodes.core.templating_node import TemplatingNode
9
- from vellum.workflows.types.core import JsonObject
10
- from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
11
11
 
12
12
  _TemplatingNodeType = TypeVar("_TemplatingNodeType", bound=TemplatingNode)
13
13
 
14
14
 
15
15
  class BaseTemplatingNodeDisplay(BaseNodeVellumDisplay[_TemplatingNodeType], Generic[_TemplatingNodeType]):
16
- output_id: ClassVar[Optional[UUID]] = None
17
16
  template_input_id: ClassVar[Optional[UUID]] = None
18
17
  input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
19
18