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.
- vellum/__init__.py +6 -0
- vellum/client/__init__.py +4 -4
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/resources/release_reviews/client.py +118 -1
- vellum/client/types/__init__.py +6 -0
- vellum/client/types/logical_operator.py +1 -0
- vellum/client/types/prompt_deployment_release.py +34 -0
- vellum/client/types/prompt_deployment_release_prompt_deployment.py +19 -0
- vellum/client/types/prompt_deployment_release_prompt_version.py +19 -0
- vellum/types/prompt_deployment_release.py +3 -0
- vellum/types/prompt_deployment_release_prompt_deployment.py +3 -0
- vellum/types/prompt_deployment_release_prompt_version.py +3 -0
- vellum/workflows/inputs/base.py +2 -1
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +2 -0
- vellum/workflows/nodes/displayable/guardrail_node/node.py +35 -12
- vellum/workflows/nodes/displayable/guardrail_node/test_node.py +88 -0
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +14 -2
- vellum/workflows/nodes/displayable/prompt_deployment_node/tests/test_node.py +43 -0
- vellum/workflows/state/base.py +38 -3
- vellum/workflows/state/tests/test_state.py +49 -0
- vellum/workflows/workflows/base.py +17 -0
- vellum/workflows/workflows/tests/test_base_workflow.py +39 -0
- {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/RECORD +42 -35
- vellum_cli/pull.py +3 -0
- vellum_cli/tests/test_pull.py +3 -1
- vellum_ee/workflows/display/base.py +9 -7
- vellum_ee/workflows/display/nodes/__init__.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/note_node.py +1 -2
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py +33 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +3 -4
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_state_serialization.py +1 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +0 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py +1 -0
- vellum_ee/workflows/display/types.py +6 -7
- vellum_ee/workflows/display/vellum.py +5 -4
- vellum_ee/workflows/display/workflows/base_workflow_display.py +20 -19
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py +11 -37
- {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.35.dist-info → vellum_ai-0.14.37.dist-info}/WHEEL +0 -0
- {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
|
vellum/workflows/state/base.py
CHANGED
@@ -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
|
-
|
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"
|
@@ -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=
|
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=
|
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=
|
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=
|
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=
|
49
|
-
vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=
|
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=
|
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=
|
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=
|
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
|
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=
|
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=
|
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=
|
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=
|
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=
|
127
|
+
vellum/__init__.py,sha256=hl6RSGwdQetF5BV0k-8eGbGDVhdnZDpYX7MQXpZ4c-0,41308
|
127
128
|
vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
128
|
-
vellum/client/__init__.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
1583
|
-
vellum/workflows/nodes/displayable/guardrail_node/test_node.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
1676
|
-
vellum_ai-0.14.
|
1677
|
-
vellum_ai-0.14.
|
1678
|
-
vellum_ai-0.14.
|
1679
|
-
vellum_ai-0.14.
|
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:
|
vellum_cli/tests/test_pull.py
CHANGED
@@ -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
|
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
|
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
|
45
|
-
|
46
|
-
|
46
|
+
class WorkflowInputsDisplayOverrides(WorkflowInputsDisplay):
|
47
|
+
"""
|
48
|
+
DEPRECATED: Use WorkflowInputsDisplay instead. Will be removed in 0.15.0
|
49
|
+
"""
|
47
50
|
|
48
|
-
|
49
|
-
WorkflowInputsDisplayOverridesType = TypeVar("WorkflowInputsDisplayOverridesType", bound=WorkflowInputsDisplayOverrides)
|
51
|
+
pass
|
50
52
|
|
51
53
|
|
52
54
|
@dataclass
|
@@ -1,8 +1,8 @@
|
|
1
|
-
# flake8: noqa:
|
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 *
|
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":
|
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(),
|