vellum-ai 0.14.35__py3-none-any.whl → 0.14.37__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 (42) hide show
  1. vellum/__init__.py +6 -0
  2. vellum/client/__init__.py +4 -4
  3. vellum/client/core/client_wrapper.py +1 -1
  4. vellum/client/resources/release_reviews/client.py +118 -1
  5. vellum/client/types/__init__.py +6 -0
  6. vellum/client/types/logical_operator.py +1 -0
  7. vellum/client/types/prompt_deployment_release.py +34 -0
  8. vellum/client/types/prompt_deployment_release_prompt_deployment.py +19 -0
  9. vellum/client/types/prompt_deployment_release_prompt_version.py +19 -0
  10. vellum/types/prompt_deployment_release.py +3 -0
  11. vellum/types/prompt_deployment_release_prompt_deployment.py +3 -0
  12. vellum/types/prompt_deployment_release_prompt_version.py +3 -0
  13. vellum/workflows/inputs/base.py +2 -1
  14. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +2 -0
  15. vellum/workflows/nodes/displayable/guardrail_node/node.py +35 -12
  16. vellum/workflows/nodes/displayable/guardrail_node/test_node.py +88 -0
  17. vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +14 -2
  18. vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py +43 -0
  19. vellum/workflows/state/base.py +38 -3
  20. vellum/workflows/state/tests/test_state.py +49 -0
  21. vellum/workflows/workflows/base.py +17 -0
  22. vellum/workflows/workflows/tests/test_base_workflow.py +39 -0
  23. {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/METADATA +1 -1
  24. {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/RECORD +42 -35
  25. vellum_cli/pull.py +3 -0
  26. vellum_cli/tests/test_pull.py +3 -1
  27. vellum_ee/workflows/display/base.py +9 -7
  28. vellum_ee/workflows/display/nodes/__init__.py +2 -2
  29. vellum_ee/workflows/display/nodes/vellum/note_node.py +1 -2
  30. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -0
  31. vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +33 -0
  32. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +3 -4
  33. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -1
  34. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +0 -1
  35. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -0
  36. vellum_ee/workflows/display/types.py +6 -7
  37. vellum_ee/workflows/display/vellum.py +5 -4
  38. vellum_ee/workflows/display/workflows/base_workflow_display.py +20 -19
  39. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +11 -37
  40. {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/LICENSE +0 -0
  41. {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/WHEEL +0 -0
  42. {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/entry_points.txt +0 -0
@@ -151,3 +151,46 @@ def test_prompt_deployment_node__parent_context_serialization(mock_httpx_transpo
151
151
  request_execution_context = json.loads(call_request_args.read().decode("utf-8"))["execution_context"]
152
152
  assert request_execution_context["trace_id"] == str(trace_id)
153
153
  assert request_execution_context["parent_context"]
154
+
155
+
156
+ def test_prompt_deployment_node__json_output(vellum_client):
157
+ # GIVEN a PromptDeploymentNode
158
+ class MyPromptDeploymentNode(PromptDeploymentNode):
159
+ deployment = "example_prompt_deployment"
160
+ prompt_inputs = {}
161
+
162
+ # AND a known JSON response from invoking a prompt deployment
163
+ expected_json = {"result": "Hello, world!"}
164
+ expected_outputs: List[PromptOutput] = [
165
+ StringVellumValue(value=json.dumps(expected_json)),
166
+ ]
167
+
168
+ def generate_prompt_events(*args: Any, **kwargs: Any) -> Iterator[ExecutePromptEvent]:
169
+ execution_id = str(uuid4())
170
+ events: List[ExecutePromptEvent] = [
171
+ InitiatedExecutePromptEvent(execution_id=execution_id),
172
+ FulfilledExecutePromptEvent(
173
+ execution_id=execution_id,
174
+ outputs=expected_outputs,
175
+ ),
176
+ ]
177
+ yield from events
178
+
179
+ vellum_client.execute_prompt_stream.side_effect = generate_prompt_events
180
+
181
+ # WHEN the node is run
182
+ node = MyPromptDeploymentNode()
183
+ outputs = [o for o in node.run()]
184
+
185
+ # THEN the node should have produced the outputs we expect
186
+ results_output = outputs[0]
187
+ assert results_output.name == "results"
188
+ assert results_output.value == expected_outputs
189
+
190
+ text_output = outputs[1]
191
+ assert text_output.name == "text"
192
+ assert text_output.value == '{"result": "Hello, world!"}'
193
+
194
+ json_output = outputs[2]
195
+ assert json_output.name == "json"
196
+ assert json_output.value == expected_json
@@ -2,19 +2,21 @@ from collections import defaultdict
2
2
  from copy import deepcopy
3
3
  from dataclasses import field
4
4
  from datetime import datetime
5
+ import logging
5
6
  from queue import Queue
6
7
  from threading import Lock
7
8
  from uuid import UUID, uuid4
8
9
  from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Optional, Sequence, Set, Tuple, Type, cast
9
10
  from typing_extensions import dataclass_transform
10
11
 
11
- from pydantic import GetCoreSchemaHandler, field_serializer
12
+ from pydantic import GetCoreSchemaHandler, ValidationInfo, field_serializer, field_validator
12
13
  from pydantic_core import core_schema
13
14
 
14
15
  from vellum.core.pydantic_utilities import UniversalBaseModel
15
16
  from vellum.workflows.constants import undefined
16
17
  from vellum.workflows.edges.edge import Edge
17
18
  from vellum.workflows.inputs.base import BaseInputs
19
+ from vellum.workflows.outputs.base import BaseOutputs
18
20
  from vellum.workflows.references import ExternalInputReference, OutputReference, StateValueReference
19
21
  from vellum.workflows.types.generics import StateType
20
22
  from vellum.workflows.types.stack import Stack
@@ -29,6 +31,8 @@ from vellum.workflows.types.utils import (
29
31
  if TYPE_CHECKING:
30
32
  from vellum.workflows.nodes.bases import BaseNode
31
33
 
34
+ logger = logging.getLogger(__name__)
35
+
32
36
 
33
37
  class _Snapshottable:
34
38
  _snapshot_callback: Callable[[], None]
@@ -47,7 +51,7 @@ class _Snapshottable:
47
51
  class _BaseStateMeta(type):
48
52
  def __getattribute__(cls, name: str) -> Any:
49
53
  if not name.startswith("_"):
50
- instance = vars(cls).get(name)
54
+ instance = vars(cls).get(name, undefined)
51
55
  types = infer_types(cls, name)
52
56
  return StateValueReference(name=name, types=types, instance=instance)
53
57
 
@@ -237,6 +241,34 @@ class StateMeta(UniversalBaseModel):
237
241
  def serialize_node_outputs(self, node_outputs: Dict[OutputReference, Any], _info: Any) -> Dict[str, Any]:
238
242
  return {str(descriptor): value for descriptor, value in node_outputs.items()}
239
243
 
244
+ @field_validator("node_outputs", mode="before")
245
+ @classmethod
246
+ def deserialize_node_outputs(cls, node_outputs: Any, info: ValidationInfo):
247
+ if isinstance(node_outputs, dict) and isinstance(info.context, dict):
248
+ raw_workflow_nodes = info.context.get("nodes")
249
+ workflow_node_outputs = {}
250
+ if isinstance(raw_workflow_nodes, list):
251
+ for node in raw_workflow_nodes:
252
+ Outputs = getattr(node, "Outputs", None)
253
+ if not isinstance(Outputs, type) or not issubclass(Outputs, BaseOutputs):
254
+ continue
255
+
256
+ for output in Outputs:
257
+ workflow_node_outputs[str(output)] = output
258
+
259
+ node_output_keys = list(node_outputs.keys())
260
+ deserialized_node_outputs = {}
261
+ for node_output_key in node_output_keys:
262
+ output_reference = workflow_node_outputs.get(node_output_key)
263
+ if not output_reference:
264
+ continue
265
+
266
+ deserialized_node_outputs[output_reference] = node_outputs[node_output_key]
267
+
268
+ return deserialized_node_outputs
269
+
270
+ return node_outputs
271
+
240
272
  @field_serializer("external_inputs")
241
273
  def serialize_external_inputs(
242
274
  self, external_inputs: Dict[ExternalInputReference, Any], _info: Any
@@ -377,7 +409,10 @@ class BaseState(metaclass=_BaseStateMeta):
377
409
  Snapshots the current state to the workflow emitter. The invoked callback is overridden by the
378
410
  workflow runner.
379
411
  """
380
- self.__snapshot_callback__(deepcopy(self))
412
+ try:
413
+ self.__snapshot_callback__(deepcopy(self))
414
+ except Exception:
415
+ logger.exception("Failed to snapshot Workflow state.")
381
416
 
382
417
  @classmethod
383
418
  def __get_pydantic_core_schema__(
@@ -13,6 +13,16 @@ from vellum.workflows.state.encoder import DefaultStateEncoder
13
13
  snapshot_count: Dict[int, int] = defaultdict(int)
14
14
 
15
15
 
16
+ @pytest.fixture()
17
+ def mock_deepcopy(mocker):
18
+ return mocker.patch("vellum.workflows.state.base.deepcopy")
19
+
20
+
21
+ @pytest.fixture
22
+ def mock_logger(mocker):
23
+ return mocker.patch("vellum.workflows.state.base.logger")
24
+
25
+
16
26
  class MockState(BaseState):
17
27
  foo: str
18
28
  nested_dict: Dict[str, int] = {}
@@ -170,3 +180,42 @@ def test_state_json_serialization__with_queue():
170
180
 
171
181
  # THEN the state is serialized correctly with the queue turned into a list
172
182
  assert json_state["meta"]["node_outputs"] == {"MockNode.Outputs.baz": ["test1", "test2"]}
183
+
184
+
185
+ def test_state_snapshot__deepcopy_fails__logs_error(mock_deepcopy, mock_logger):
186
+ # GIVEN an initial state instance
187
+ class MockState(BaseState):
188
+ foo: str
189
+
190
+ state = MockState(foo="bar")
191
+
192
+ # AND we have a snapshot callback that we are tracking
193
+ snapshot_count = 0
194
+
195
+ def __snapshot_callback__(state: "BaseState") -> None:
196
+ nonlocal snapshot_count
197
+ snapshot_count += 1
198
+
199
+ state.__snapshot_callback__ = __snapshot_callback__
200
+
201
+ # AND deepcopy fails the first time but succeeds the second time
202
+ deepcopy_side_effect_count = 0
203
+
204
+ def side_effect(*args, **kwargs):
205
+ nonlocal deepcopy_side_effect_count
206
+ deepcopy_side_effect_count += 1
207
+ if deepcopy_side_effect_count == 1:
208
+ raise Exception("Failed to deepcopy")
209
+ return deepcopy(args[0])
210
+
211
+ mock_deepcopy.side_effect = side_effect
212
+
213
+ # WHEN we snapshot the state twice
214
+ state.__snapshot__()
215
+ state.__snapshot__()
216
+
217
+ # THEN we were able to invoke the callback once
218
+ assert snapshot_count == 1
219
+
220
+ # AND alert sentry once
221
+ assert mock_logger.exception.call_count == 1
@@ -530,6 +530,23 @@ class BaseWorkflow(Generic[InputsType, StateType], metaclass=_BaseWorkflowMeta):
530
530
 
531
531
  return most_recent_state_snapshot
532
532
 
533
+ @classmethod
534
+ def deserialize_state(cls, state: dict, workflow_inputs: Optional[InputsType] = None) -> StateType:
535
+ state_class = cls.get_state_class()
536
+ if "meta" in state:
537
+ nodes = list(cls.get_nodes())
538
+ state["meta"] = StateMeta.model_validate(
539
+ {
540
+ **state["meta"],
541
+ "workflow_inputs": workflow_inputs,
542
+ },
543
+ context={
544
+ "nodes": nodes,
545
+ },
546
+ )
547
+
548
+ return state_class(**state)
549
+
533
550
  @staticmethod
534
551
  def load_from_module(module_path: str) -> Type["BaseWorkflow"]:
535
552
  workflow_path = f"{module_path}.workflow"
@@ -314,3 +314,42 @@ def test_workflow__unsupported_graph_item():
314
314
 
315
315
  # THEN it should raise an error
316
316
  assert "Unexpected graph type: <class 'int'>" in str(exc_info.value)
317
+
318
+
319
+ def test_base_workflow__deserialize_state():
320
+
321
+ # GIVEN a state definition
322
+ class State(BaseState):
323
+ bar: str
324
+
325
+ # AND an inputs definition
326
+ class Inputs(BaseInputs):
327
+ baz: str
328
+
329
+ # AND a node
330
+ class NodeA(BaseNode):
331
+ class Outputs(BaseNode.Outputs):
332
+ foo: str
333
+
334
+ # AND a workflow that uses all three
335
+ class TestWorkflow(BaseWorkflow[Inputs, State]):
336
+ graph = NodeA
337
+
338
+ # WHEN we deserialize the state
339
+ state = TestWorkflow.deserialize_state(
340
+ {
341
+ "bar": "My state bar",
342
+ "meta": {
343
+ "node_outputs": {
344
+ "test_base_workflow__deserialize_state.<locals>.NodeA.Outputs.foo": "My node A output foo"
345
+ }
346
+ },
347
+ },
348
+ workflow_inputs=Inputs(baz="My input baz"),
349
+ )
350
+
351
+ # THEN the state should be correct
352
+ assert state.bar == "My state bar"
353
+ assert state.meta.node_outputs == {NodeA.Outputs.foo: "My node A output foo"}
354
+ assert isinstance(state.meta.workflow_inputs, Inputs)
355
+ assert state.meta.workflow_inputs.baz == "My input baz"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 0.14.35
3
+ Version: 0.14.37
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -7,7 +7,7 @@ vellum_cli/image_push.py,sha256=8DDvRDJEZ-FukUCqGW1827bg1ybF4xBbx9WyqWYQE-g,6816
7
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
- vellum_cli/pull.py,sha256=YTo5cVCcp7RjS9lHednOuud4rW4bH7jqV3GMdbic_Uk,12002
10
+ vellum_cli/pull.py,sha256=27Mh10aQ8H1OkTmQOJcOuJ5cQcYbNjkkuQrBmtkRe0o,12262
11
11
  vellum_cli/push.py,sha256=xjTNbLwOVFNU3kpBrm56Bk5QkSRrJ9z86qceghCzfIA,9655
12
12
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
@@ -16,16 +16,16 @@ vellum_cli/tests/test_image_push.py,sha256=i3lJuW8nFRwL1M1OF6752IZYvGAFgKmkB2hd_
16
16
  vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ,18754
17
17
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
18
18
  vellum_cli/tests/test_ping.py,sha256=3ucVRThEmTadlV9LrJdCCrr1Ofj3rOjG6ue0BNR2UC0,2523
19
- vellum_cli/tests/test_pull.py,sha256=3eZJASQ4UbPXmqnbg-5w1Q3gyasVMFiA2Pr5RFPID1o,46495
19
+ vellum_cli/tests/test_pull.py,sha256=5nIDX5yXLyi6p-siLvrzfaepI4RWbaoMwgFoQFUEhI0,46692
20
20
  vellum_cli/tests/test_push.py,sha256=zDv_Q1hbXtLwmTJDPRAvwDjbuHC09uNRYOy4FQujUow,23476
21
21
  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=swJqgFOhlbe7-FzdPYE1GgX4oq0t2UoyXZs_yM0JIY4,2307
25
+ vellum_ee/workflows/display/base.py,sha256=em2kgLWBk74fiDoDDp-smL0IFmDjMPtd8F4mx10NPTg,2229
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
- vellum_ee/workflows/display/nodes/__init__.py,sha256=436iSAh_Ex5tC68oEYvNgPu05ZVIAVXnS4PKGrQeZ0Y,321
28
+ vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
29
29
  vellum_ee/workflows/display/nodes/base_node_display.py,sha256=cHK2OxeM2gWOshMHjaDHxWbRxvjkNHxOXbajjkrgk1w,19094
30
30
  vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=WXbfVoGHTfl_owas2WKHwcRhfLeu0cAI4qLmKxfxjOs,1707
31
31
  vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=59Nht1XAxMcNESFV1VmECrF01lZMnGkB_9JWaTAFnv0,2214
@@ -45,8 +45,8 @@ vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=86hkneLIBS
45
45
  vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=MU9I8CB1X1TgL1aa1eT6DHWwNJ-2v79t74xl0oy-fBo,5510
46
46
  vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUffeVmQmCpec6WtPQnNl9gj9Y,3748
47
47
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=xtyecs9mJ_WEwVpP12jxYwvehLXynhqLrPJ-Ahdk2GA,3232
48
- vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=TMb8txILu2uWjzoxaghjgjlzeBAgzn4vkP_8zSh2qoE,1151
49
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=9YR6MtxVq8Bavb0ud2lZX0t2Y_NUd-dY9kRgq8WBz-Y,3093
48
+ vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=DQzzhVGVZf812DkpQZoVYJcDsIOtjkm_sCX3oDLks2Y,1103
49
+ vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=yAiWMeKs6jEecRdWfTjqxLmnGLeBPguaVsBD7xcOV94,3263
50
50
  vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=LgokATi7sSS38Fil-XjqoR4t7AMOJ-GzXRw6p606Svo,3397
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
@@ -54,6 +54,7 @@ vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=5EWzdA3TSUPlb
54
54
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=p0fCvbKzpGvVrg67QmJd14m9E8_DG0u5s6SYIhzlkNA,4018
56
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
57
58
  vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=fu9nxD4FInSfKbipJJ7UE617VkeUWs_uS6SeEz_8-Iw,4691
58
59
  vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=NuIw8Yb42KUdoGi3Ur8_7VPg50IC4hNrwAkCociwqNk,2091
59
60
  vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=Us32jf_FQnLuT4Bs2o5JyHxihCTAN8ozZghWIR0pl9k,3459
@@ -65,7 +66,7 @@ vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
65
66
  vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USiRlCcdC3Qe9WfdkxwFdircai0vqvuZCbELR84,9556
66
67
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
68
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=f3EKg65yq5TgyK9yx6D2XmTYLgAF5eYp5gWKS4x-Fhc,2229
69
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=GzDx9JX9yBDgsHk1x58cmjChC9tPMUtlaqOSxO5CJxQ,2069
69
70
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=4R8cZ98JsGmIq-kmt3q519c4nCI7wCy5ynAUCUNnvuI,15605
70
71
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=PXoNUAgqfyNCAoYGWoo5D-_5SLEannn7SD08nxZmVe8,19781
71
72
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
@@ -74,31 +75,31 @@ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trig
74
75
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=EdLwx6iUEMrQd68UIlACa9DQguomcu621MOYuXmunig,15908
75
76
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=V__y7uu-dy6TJjPeu4UDvaoO2yYwBRbPiW9uJdzWRx4,29828
76
77
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=6ejs_C1cuaRHtc8Qb2qh8-b-juDwLwdfTBd-6CSDDYw,47672
77
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=WebMmamSwRykxcilhiNG1XTxI88VydCgPFavF-gSqWk,8820
78
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py,sha256=FKojL_YddJ-PEZ9n0IKedD2qI0JQtnXRTfMXBPPB9HU,8821
78
79
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=wgedEa2IVP2ssH_FLghoEmLgpJR41AY-iNIw1SESeqA,6106
79
80
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=THQB73vAgdiRRk7GKWwzw99G-X3LLgEEVCb4QCQrrMQ,5773
80
81
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=aWZ3XIquyKeS199VayYVA7qVjXdvPepGG8UkNt0osIU,7446
81
82
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=XRtXTWtNXHe1g8E_mNcAhYZVjc0UcGlJRjq34_sd0jo,787
82
83
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=nZ3IOZSX3cOg4XV5-PW-Hsu806vfzmOZyCpZyl1I50w,20605
83
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=8GakAJmf140XzQRZyr-BbZUt22h0lZKUFhNZY4zlD4g,16172
84
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=3uWphk9TeyZ5Ila2wBIDIjQfbr62bHQ6TNpRgBVIP98,16150
84
85
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=QifoIZja04F1ulMhKlfZHtOqhAWrbUXlnQpybBBzNdw,8449
85
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=-bGp82C5_XgcVxeM80zWL9viogxvE4DGk7-5H__wwxA,8649
86
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=J7BQnYNjS8EFy6y4hYRFKoh33EGXz7vFSCKPOM6v2Zk,8713
86
87
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=elc4ak2OyI4y5P6GPnK2RwuZLcx4FL6hHlmhY3ARk6k,13008
87
88
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=BzFNl9ECeGh0krm-CUjbBQQq0g7krANsp0Sh-j5dAkc,11322
88
89
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=qjaXGw0JTnPnQmDAFm7jkB3bVkApf-WQ0Gd6kptqdPA,7818
89
90
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=UrueKI15Ez-DRfZpZH82o127v0LRXLP-s308kjDTPMI,4084
90
91
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=eD5686C9nWC5s6t08vbAnm9qf9t53gYQM-E1FwAa75c,3035
91
92
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=zXTjfjUdji0WBu6ZhocvM4UiXEWFJIpds24sxV9TZT0,7714
92
- vellum_ee/workflows/display/types.py,sha256=XNudHX8AyvU3657QQ37_sDULwf-EnLAOS3aQZGq7Zmw,2495
93
+ vellum_ee/workflows/display/types.py,sha256=nERYzMC-TqoQuRN8QtF2ZLr-56G7XgXJqLtn8qQMQqs,2442
93
94
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
95
  vellum_ee/workflows/display/utils/expressions.py,sha256=2u2o8Fqr-2C45FII01ej5rt6i8n2EEGiliXugK7buVw,1210
95
96
  vellum_ee/workflows/display/utils/vellum.py,sha256=Pzmg9Xiq-hRaYxbOSDaJhIAQ4A0apQN6dURn_h5DnWI,9364
96
- vellum_ee/workflows/display/vellum.py,sha256=s1ARDF8miRDwFXFIMsmFzyyUOTE5MNjri8fGhfpZeF4,3701
97
+ vellum_ee/workflows/display/vellum.py,sha256=niAiU3KVvkCd3Jp8esRxgvP0fhivu5ENNQzxeT-NKys,3664
97
98
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
98
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=6YIUU1KiKdVdpAzjaACOlMPxFmqhLCWNh8-1Qj8fEfI,20879
99
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=UbUalLL_CDFIEnqN-uFv8Ms06AMxDmQPx9HQ1oocBno,20979
99
100
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
100
101
  vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=nD6_lZnNp56siVJwhlWzSEHdMaSKjvWlsJa31SqfQAE,10623
101
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=AzGZ7ApiwXAHuymTJoXJketUegyC1dmB1blzoni5eh8,13423
102
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=f-Js7M_WbFp_3mPTv191xC4GoGyWbITrvZSGdiqDcU4,12436
102
103
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
104
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
104
105
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -123,12 +124,12 @@ vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIP
123
124
  vellum_ee/workflows/tests/test_display_meta.py,sha256=C25dErwghPNXio49pvSRxyOuc96srH6eYEwTAWdE2zY,2258
124
125
  vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
125
126
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
126
- vellum/__init__.py,sha256=YKN2trB0s1J3jSQSKsT6vQjdVM7RRdSTvKGJLvaQ1PU,41070
127
+ vellum/__init__.py,sha256=hl6RSGwdQetF5BV0k-8eGbGDVhdnZDpYX7MQXpZ4c-0,41308
127
128
  vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
128
- vellum/client/__init__.py,sha256=ki-TDOmYzC0FePN7swDyE6UpHFQV_4dK7lqy4h-3s1Y,118148
129
+ vellum/client/__init__.py,sha256=Z-JHK2jGxhtTtmkLeOaUGGJWIUNYGNVBLvUewC6lp6w,118148
129
130
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
130
131
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
131
- vellum/client/core/client_wrapper.py,sha256=ETlev1Qgt8SDpGgtdiJftsiPBOUFLk93P_WgpT1msN0,1869
132
+ vellum/client/core/client_wrapper.py,sha256=O2ona-RY5QBlx_tQsGG9B7ftfYuk-y7iQ0vJD7hL9Z4,1869
132
133
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
133
134
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
134
135
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -173,7 +174,7 @@ vellum/client/resources/organizations/client.py,sha256=Uye92moqjAcOCs4astmuFpT92
173
174
  vellum/client/resources/prompts/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
174
175
  vellum/client/resources/prompts/client.py,sha256=_rNTUjhl_ZF3vyQa_M1BSTrX4DlFXU_SXkwwCEYKD2s,6598
175
176
  vellum/client/resources/release_reviews/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
176
- vellum/client/resources/release_reviews/client.py,sha256=6u7qYK_fpRZzizYnFtUS06Q41RqEzSsre6RQwRimf8w,5088
177
+ vellum/client/resources/release_reviews/client.py,sha256=VLXcmw1o8cYYtdTJQpajJWE2ve1z40_IXIbQRQIhqpY,9395
177
178
  vellum/client/resources/sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
178
179
  vellum/client/resources/sandboxes/client.py,sha256=SG4BV0NG1Ow10mXSu52ybj-c6hR7wcNxfGJK4eiHu_8,17670
179
180
  vellum/client/resources/test_suite_runs/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
@@ -195,7 +196,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
195
196
  vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
196
197
  vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
197
198
  vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
198
- vellum/client/types/__init__.py,sha256=rvwKofaHwLpRT0shxW3yUXkEorD3QurXnqSicG_2Or4,62132
199
+ vellum/client/types/__init__.py,sha256=vfEaeh8-2xzhzeFo8j-OnbmezsjCd4EJS4zhxuw_JbE,62505
199
200
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
200
201
  vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
201
202
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
@@ -380,7 +381,7 @@ vellum/client/types/json_input.py,sha256=ZUA2O9YueBCx0IMMdB8uYNSWJiSDZxMm5ogwbwC
380
381
  vellum/client/types/json_input_request.py,sha256=x5sA-VXxF4QH-98xRcIKPZhsMVbnJNUQofiUQqyfGk4,768
381
382
  vellum/client/types/json_vellum_value.py,sha256=8irlw6NkRRVafysfTc1Q5BFFhRrWJYzdwrDYTdJK4JY,689
382
383
  vellum/client/types/json_vellum_value_request.py,sha256=IUlkdwFGgBeLl9sCmAJhoaxomWiEMpWgRcLa_WnlK8g,696
383
- vellum/client/types/logical_operator.py,sha256=_3-gBnfsz4g5-sw5_ThRuS0NdNLQ2n2vV2Dl1RqbXe4,617
384
+ vellum/client/types/logical_operator.py,sha256=mfRXK3dWLcqt2tHTgNXynEXdMDh32yI4MUade3smI7Q,636
384
385
  vellum/client/types/logprobs_enum.py,sha256=D_458cZX2CAb6dX_ovrQ6HARlJkYcZRadKwsi1Cr-JM,151
385
386
  vellum/client/types/map_node_result.py,sha256=e2YqEP-aKig2TbbZIlfn5LCeVEVhEJJBR7o7xTBKXaY,752
386
387
  vellum/client/types/map_node_result_data.py,sha256=3xJXC1JrS9lo3-3_u1S79sYwLxMknNntDyspN24vQzY,699
@@ -492,6 +493,9 @@ vellum/client/types/prompt_block_state.py,sha256=BRAzTYARoSU36IVZGWMeeqhl5fgFMXC
492
493
  vellum/client/types/prompt_deployment_expand_meta_request.py,sha256=agsiAaHB6lDoZPlnfJ2nmhB4Ud4EiJJTX05YmduyCPo,1910
493
494
  vellum/client/types/prompt_deployment_input_request.py,sha256=KrT4-Ew2VvTWXEkYQz2oyHn5EDOgrMW7FzRFaPH3ARg,353
494
495
  vellum/client/types/prompt_deployment_parent_context.py,sha256=eu8dYmRb789uZeFVzbRkJrErDYZXo35f2qaNBcY0wOQ,2319
496
+ vellum/client/types/prompt_deployment_release.py,sha256=H6sluuxANsoaX6gA9lw76lJkTECuxFofSeetKF00ze0,1346
497
+ vellum/client/types/prompt_deployment_release_prompt_deployment.py,sha256=tj8g0qEJyAuijxRBUV6nO2IITEorqVY-C37oqiWg6Po,582
498
+ vellum/client/types/prompt_deployment_release_prompt_version.py,sha256=NELGH68M8-SFtdci1Ygg0FpgjYeZgmBjfFke2m3GP8Y,577
495
499
  vellum/client/types/prompt_exec_config.py,sha256=kthvyEe-IzfTpOBd1fYrczHuxD-v7k6cwjmuaY170RQ,1390
496
500
  vellum/client/types/prompt_execution_meta.py,sha256=3hhMZgdAR5mKfnh2e_eVN3oKfT0E9w26khVPrpjn7jk,1141
497
501
  vellum/client/types/prompt_node_execution_meta.py,sha256=IyWH__nCp5uwS0N32b2ZEsA-Fv7AZDB4nnlRZayU2Gc,888
@@ -1158,6 +1162,9 @@ vellum/types/prompt_block_state.py,sha256=tKqNrZnHWjvfGS_6oIUTpdCPGxvRJa31Le6qWL
1158
1162
  vellum/types/prompt_deployment_expand_meta_request.py,sha256=5dBdvjjK9zCKxrPMdKQPj6iG8A06GAlb_zazde6qZsU,175
1159
1163
  vellum/types/prompt_deployment_input_request.py,sha256=z8CxCZWnKW8BBZajQ6iDnz-2gaxU-FrnYrVe_MvC3FU,169
1160
1164
  vellum/types/prompt_deployment_parent_context.py,sha256=U9X9PvXhG6ZUE8RxLrH13xfqKvs3DOwbxzWmujoXTbg,170
1165
+ vellum/types/prompt_deployment_release.py,sha256=jr4iRA0A6HaHbI1EINxUPLZrRCi6uKWOnvjxQZyu7bg,163
1166
+ vellum/types/prompt_deployment_release_prompt_deployment.py,sha256=WetrclgECqyJ6ppPp-dNaaHRt7ayawa9wszRBn3p2OE,181
1167
+ vellum/types/prompt_deployment_release_prompt_version.py,sha256=cFVyvBTHjiTSpA2SrFS_SkbB26UDigaBUSJmKh1SEkg,178
1161
1168
  vellum/types/prompt_exec_config.py,sha256=aNeOGDi6l2rVzvkFt8CJE6L3W2EmY8gZaSb5051w8as,156
1162
1169
  vellum/types/prompt_execution_meta.py,sha256=_5izDjusf-TM69zKhvXr5EHH4Fx9jfWkg8F5_KNJV-w,159
1163
1170
  vellum/types/prompt_node_execution_meta.py,sha256=cJoHlIn_lb_sLpQniB8eszRJvFI6mJij9QgUIiKtiCY,164
@@ -1511,7 +1518,7 @@ vellum/workflows/graph/graph.py,sha256=GGR8cGpSuNWPIiTWNWsj6l70upb5nIxAyFcn7VdaJ
1511
1518
  vellum/workflows/graph/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1512
1519
  vellum/workflows/graph/tests/test_graph.py,sha256=q0wxLvPPxc-6en4a_XuAZwVfLURMd9Ikvoreq4bpJ9s,11839
1513
1520
  vellum/workflows/inputs/__init__.py,sha256=AbFEteIYEvCb14fM3EK7bhM-40-6s494rSlIhQ4Dsss,62
1514
- vellum/workflows/inputs/base.py,sha256=eVTjtn6GielKYogQ-LPA6n4iZO3-WIfyxWpBKkN-dPs,3959
1521
+ vellum/workflows/inputs/base.py,sha256=n5jqDpIEl-jf7z3ohwSUtIq2YfHH-GJ9Qn8KZzzMxIM,4019
1515
1522
  vellum/workflows/inputs/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1516
1523
  vellum/workflows/inputs/tests/test_inputs.py,sha256=g--YqWTNWzMk5Ktoj__gq988kvBReefc2tsyUl6H2kg,1775
1517
1524
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
@@ -1558,7 +1565,7 @@ vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=
1558
1565
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=rga24gkK9_STRhFwhBwGL7oHhTTZvLWS_rXHHrp85p4,8386
1559
1566
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1560
1567
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=ZCXCZs-_OyPk4nqCpuWY-vw87lg92TDZ2tK_gckJ7mg,10450
1561
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=mjTAN2GERUaoKVsr5h1ecW60Hw_fZ-EYzgaKMZ33P-s,5674
1568
+ vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=14ONjhpgDaLSIthhLnWDKv79rysU2VsZDNakY4kDSzI,5804
1562
1569
  vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
1563
1570
  vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1564
1571
  vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMDPevgwLg1i6YK0g4L4bCy-7xCBN5yYZI,3156
@@ -1579,8 +1586,8 @@ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=PuQ0RvtAmoSI
1579
1586
  vellum/workflows/nodes/displayable/final_output_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1580
1587
  vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py,sha256=E6LQ74qZjY4Xi4avx2qdOCgGhF8pEcNLBh8cqYRkzMI,709
1581
1588
  vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
1582
- vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=A9_vuahgKSemPAZdrDJilWwciLhOBTcxINXRnUHQl_g,4427
1583
- vellum/workflows/nodes/displayable/guardrail_node/test_node.py,sha256=1yPIAt4_GWiUKT6u3rTW2XKp62b8xG8Jj3JWeCm5ZDM,1368
1589
+ vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=WzwE0CzKK2NLd1C-wHHDlm2C5bUbrPGp7-UpyE_5rkA,5349
1590
+ vellum/workflows/nodes/displayable/guardrail_node/test_node.py,sha256=KkLog-bjvPaUZUBciMH25lRHA5pDIrmUxNLVWY6oU34,4526
1584
1591
  vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
1585
1592
  vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=8RXZqWMzViUjFfbpmcy1gkSsKnEpci8BGwsuPYv4xMQ,3380
1586
1593
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1590,9 +1597,9 @@ vellum/workflows/nodes/displayable/merge_node/node.py,sha256=nZtGGVAvY4fvGg8vwV6
1590
1597
  vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
1591
1598
  vellum/workflows/nodes/displayable/note_node/node.py,sha256=sIN1VBQ7zeT3GhN0kupXbFfdpvgedWV79k4woJNp5IQ,394
1592
1599
  vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
1593
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=pb-KbrnfTRL7mmNtVAMmiCiys8raXkl5Od7sIu682xU,2707
1600
+ vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=eUiQYdqJTrWhVcUgGAPJYEnRk6S71Yrzu5-c-XcVFs4,3243
1594
1601
  vellum/workflows/nodes/displayable/prompt_deployment_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1595
- vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py,sha256=mHSecwE8bcwduM5wNKwDTzlLeh7ECdEEuT86BDgByPY,5798
1602
+ vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py,sha256=nOFiv2s8MyRf6c6aQxJPhN6a0mk1dFL2HI8Gkfc09sk,7288
1596
1603
  vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
1597
1604
  vellum/workflows/nodes/displayable/search_node/node.py,sha256=_VHHuTNN4icZBgc7O5U9SVKrv1zgKipU72fOtxTyrQU,1453
1598
1605
  vellum/workflows/nodes/displayable/search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1639,12 +1646,12 @@ vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8v
1639
1646
  vellum/workflows/runner/runner.py,sha256=ww4fjZJBENkB5HJxdj92kTz7k_EyifCeAreupy5qIxs,31813
1640
1647
  vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
1641
1648
  vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
1642
- vellum/workflows/state/base.py,sha256=Vkhneko3VlQrPsMLU1PYSzXU_W1u7_AraJsghiv5O-4,15512
1649
+ vellum/workflows/state/base.py,sha256=uQcWWgW-a0rUbfGnkgm5qtEonP4OkZusDRcKEP7PtPA,16970
1643
1650
  vellum/workflows/state/context.py,sha256=KOAI1wEGn8dGmhmAemJaf4SZbitP3jpIBcwKfznQaRE,3076
1644
1651
  vellum/workflows/state/encoder.py,sha256=TnOQojc5lTQ83g9QbpA4UCqShJvutmTMxbpKt-9gNe4,1911
1645
1652
  vellum/workflows/state/store.py,sha256=uVe-oN73KwGV6M6YLhwZMMUQhzTQomsVfVnb8V91gVo,1147
1646
1653
  vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1647
- vellum/workflows/state/tests/test_state.py,sha256=jBynFR4m74Vn51DdmKBLkxb1loTy1CnJPtzPmdAFQUo,5159
1654
+ vellum/workflows/state/tests/test_state.py,sha256=m8f0jPTnK3i0W3wj5GTTRcetRrIBqBMklSA7Vev2nsg,6491
1648
1655
  vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1649
1656
  vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
1650
1657
  vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83yc5FIM33zuo8,353
@@ -1667,13 +1674,13 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
1667
1674
  vellum/workflows/utils/vellum_variables.py,sha256=UiGlUh0a8vel2FbW3w-xbHxSv_jNutkDdqMVtP_b42A,3385
1668
1675
  vellum/workflows/vellum_client.py,sha256=GxOy3dX6A04xiY69vPv1S4YGuQ_TMxwHi6WRMimQBBE,762
1669
1676
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1670
- vellum/workflows/workflows/base.py,sha256=DycL6YgN8CyaHub2gG8r9NB5PVxR9jP0wV4J09iaBnE,22749
1677
+ vellum/workflows/workflows/base.py,sha256=ezmWRtgY6mQjU-u_iQchj8qYrw1txE-Q5E4PxWgvvfI,23301
1671
1678
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1672
1679
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1673
- vellum/workflows/workflows/tests/test_base_workflow.py,sha256=tCxrV3QBHL8wfdEO3bvKteDdw32xBlUl1_WxkAwaONw,8344
1680
+ vellum/workflows/workflows/tests/test_base_workflow.py,sha256=Xbk30MaW8sW6XUNEgIhhJRGvX3sc0aorLh_tY8W2xiQ,9445
1674
1681
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1675
- vellum_ai-0.14.35.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1676
- vellum_ai-0.14.35.dist-info/METADATA,sha256=p35Qzrtnz0-GxWWkLD1zb0nMfyoFki46Og2RE-q9c8E,5484
1677
- vellum_ai-0.14.35.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1678
- vellum_ai-0.14.35.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1679
- vellum_ai-0.14.35.dist-info/RECORD,,
1682
+ vellum_ai-0.14.37.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1683
+ vellum_ai-0.14.37.dist-info/METADATA,sha256=8eaeLLw8xcvlKlxhZMTGTpog1_azd7KIGDXX1d-mPBg,5484
1684
+ vellum_ai-0.14.37.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1685
+ vellum_ai-0.14.37.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1686
+ vellum_ai-0.14.37.dist-info/RECORD,,
vellum_cli/pull.py CHANGED
@@ -35,6 +35,7 @@ class PullContentsMetadata(UniversalBaseModel):
35
35
  runner_config: Optional[RunnerConfig] = None
36
36
  deployment_id: Optional[UUID] = None
37
37
  deployment_name: Optional[str] = None
38
+ workflow_sandbox_id: Optional[UUID] = None
38
39
 
39
40
 
40
41
  def _resolve_workflow_config(
@@ -198,6 +199,8 @@ def pull_command(
198
199
  workflow_config.container_image_tag = pull_contents_metadata.runner_config.container_image_tag
199
200
  if workflow_config.container_image_name and not workflow_config.container_image_tag:
200
201
  workflow_config.container_image_tag = "latest"
202
+ if not workflow_config.workflow_sandbox_id and pull_contents_metadata.workflow_sandbox_id:
203
+ workflow_config.workflow_sandbox_id = str(pull_contents_metadata.workflow_sandbox_id)
201
204
  if not workflow_config.module and workflow_deployment and pull_contents_metadata.deployment_name:
202
205
  workflow_config.module = snake_case(pull_contents_metadata.deployment_name)
203
206
  if not workflow_config.module and pull_contents_metadata.label:
@@ -1185,7 +1185,7 @@ def test_pull__workflow_deployment_with_name_and_id(vellum_client):
1185
1185
  deployment_id = str(uuid4()) # config will always use the deployment_id return from the API
1186
1186
  deployment_name = "Test Deployment"
1187
1187
  deployment_label = "Test Label"
1188
-
1188
+ workflow_sandbox_id = str(uuid4())
1189
1189
  # AND the workflow pull API call returns a zip file with metadata
1190
1190
  vellum_client.workflows.pull.return_value = iter(
1191
1191
  [
@@ -1197,6 +1197,7 @@ def test_pull__workflow_deployment_with_name_and_id(vellum_client):
1197
1197
  "deployment_id": deployment_id,
1198
1198
  "deployment_name": deployment_name,
1199
1199
  "label": deployment_label,
1200
+ "workflow_sandbox_id": workflow_sandbox_id,
1200
1201
  }
1201
1202
  ),
1202
1203
  }
@@ -1227,6 +1228,7 @@ def test_pull__workflow_deployment_with_name_and_id(vellum_client):
1227
1228
  assert str(deployment["id"]) == deployment_id
1228
1229
  assert deployment["name"] == deployment_name
1229
1230
  assert deployment["label"] == deployment_label
1231
+ assert lock_data["workflows"][0]["workflow_sandbox_id"] == workflow_sandbox_id
1230
1232
 
1231
1233
  os.chdir(current_dir)
1232
1234
 
@@ -1,6 +1,6 @@
1
1
  from dataclasses import dataclass, field
2
2
  from uuid import UUID
3
- from typing import Optional, TypeVar
3
+ from typing import Optional
4
4
 
5
5
  from pydantic import Field
6
6
 
@@ -36,17 +36,19 @@ class WorkflowMetaDisplayOverrides(WorkflowMetaDisplay):
36
36
 
37
37
 
38
38
  @dataclass
39
- class WorkflowInputsDisplayOverrides:
39
+ class WorkflowInputsDisplay:
40
40
  id: UUID
41
+ name: Optional[str] = None
42
+ color: Optional[str] = None
41
43
 
42
44
 
43
45
  @dataclass
44
- class WorkflowInputsDisplay(WorkflowInputsDisplayOverrides):
45
- pass
46
-
46
+ class WorkflowInputsDisplayOverrides(WorkflowInputsDisplay):
47
+ """
48
+ DEPRECATED: Use WorkflowInputsDisplay instead. Will be removed in 0.15.0
49
+ """
47
50
 
48
- WorkflowInputsDisplayType = TypeVar("WorkflowInputsDisplayType", bound=WorkflowInputsDisplay)
49
- WorkflowInputsDisplayOverridesType = TypeVar("WorkflowInputsDisplayOverridesType", bound=WorkflowInputsDisplayOverrides)
51
+ pass
50
52
 
51
53
 
52
54
  @dataclass
@@ -1,8 +1,8 @@
1
- # flake8: noqa: F401
1
+ # flake8: noqa: F403
2
2
 
3
3
  # Force an import to ensure that all display classes are registered with the BaseNodeDisplay registry
4
4
  from .base_node_display import BaseNodeDisplay
5
- from .vellum import * # noqa: F401
5
+ from .vellum import *
6
6
  from .vellum import __all__ as all_vellum_display_nodes
7
7
 
8
8
  __all__ = ["BaseNodeDisplay"] + all_vellum_display_nodes
@@ -1,4 +1,3 @@
1
- import json
2
1
  from typing import Any, ClassVar, Dict, Generic, TypeVar, Union
3
2
 
4
3
  from vellum.workflows.nodes import NoteNode
@@ -23,7 +22,7 @@ class BaseNoteNodeDisplay(BaseNodeVellumDisplay[_NoteNodeType], Generic[_NoteNod
23
22
  "data": {
24
23
  "label": self.label,
25
24
  "text": self.text,
26
- "style": json.dumps(self.style) if self.style else None,
25
+ "style": self.style,
27
26
  },
28
27
  "display_data": self.get_display_data().dict(),
29
28
  "base": self.get_base().dict(),
@@ -47,6 +47,7 @@ class BasePromptDeploymentNodeDisplay(
47
47
  deployment = vellum_client.deployments.retrieve(
48
48
  id=str(raise_if_descriptor(node.deployment)),
49
49
  )
50
+ ml_model_fallbacks = raise_if_descriptor(node.ml_model_fallbacks)
50
51
 
51
52
  return {
52
53
  "id": str(node_id),
@@ -62,6 +63,7 @@ class BasePromptDeploymentNodeDisplay(
62
63
  "variant": "DEPLOYMENT",
63
64
  "prompt_deployment_id": str(deployment.id),
64
65
  "release_tag": raise_if_descriptor(node.release_tag),
66
+ "ml_model_fallbacks": list(ml_model_fallbacks) if ml_model_fallbacks else None,
65
67
  },
66
68
  "display_data": self.get_display_data().dict(),
67
69
  "base": self.get_base().dict(),