vellum-ai 0.14.69__py3-none-any.whl → 0.14.71__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/client/core/client_wrapper.py +1 -1
- vellum/workflows/environment/__init__.py +2 -1
- vellum/workflows/environment/environment.py +10 -3
- vellum/workflows/nodes/displayable/code_execution_node/node.py +8 -1
- vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py +53 -0
- vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py +77 -1
- vellum/workflows/nodes/experimental/tool_calling_node/utils.py +2 -2
- vellum/workflows/references/environment_variable.py +11 -9
- {vellum_ai-0.14.69.dist-info → vellum_ai-0.14.71.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.69.dist-info → vellum_ai-0.14.71.dist-info}/RECORD +48 -42
- vellum_cli/__init__.py +5 -2
- vellum_cli/image_push.py +24 -1
- vellum_cli/tests/test_image_push.py +103 -12
- vellum_ee/workflows/display/nodes/base_node_display.py +1 -1
- vellum_ee/workflows/display/nodes/utils.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/api_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/error_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/final_output_node.py +2 -2
- vellum_ee/workflows/display/nodes/vellum/guardrail_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +8 -4
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +9 -1
- vellum_ee/workflows/display/nodes/vellum/map_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/merge_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/note_node.py +1 -0
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/retry_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/search_node.py +70 -7
- vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/templating_node.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py +88 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py +104 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +16 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py +82 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +9 -1
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py +4 -4
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py +59 -297
- vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py +37 -0
- vellum_ee/workflows/display/utils/auto_layout.py +130 -0
- vellum_ee/workflows/display/utils/expressions.py +17 -1
- vellum_ee/workflows/display/utils/tests/__init__.py +0 -0
- vellum_ee/workflows/display/utils/tests/test_auto_layout.py +56 -0
- vellum_ee/workflows/display/workflows/base_workflow_display.py +15 -10
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +41 -0
- {vellum_ai-0.14.69.dist-info → vellum_ai-0.14.71.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.69.dist-info → vellum_ai-0.14.71.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.69.dist-info → vellum_ai-0.14.71.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@ class BaseClientWrapper:
|
|
18
18
|
headers: typing.Dict[str, str] = {
|
19
19
|
"X-Fern-Language": "Python",
|
20
20
|
"X-Fern-SDK-Name": "vellum-ai",
|
21
|
-
"X-Fern-SDK-Version": "0.14.
|
21
|
+
"X-Fern-SDK-Version": "0.14.71",
|
22
22
|
}
|
23
23
|
headers["X-API-KEY"] = self.api_key
|
24
24
|
return headers
|
@@ -3,7 +3,14 @@ from typing import Optional
|
|
3
3
|
from vellum.workflows.references import EnvironmentVariableReference
|
4
4
|
|
5
5
|
|
6
|
-
class
|
6
|
+
class EnvironmentVariables:
|
7
7
|
@staticmethod
|
8
|
-
def get(name: str, default: Optional[str] = None)
|
9
|
-
|
8
|
+
def get(name: str, default: Optional[str] = None):
|
9
|
+
env_ref = EnvironmentVariableReference(name=name)
|
10
|
+
if default is not None:
|
11
|
+
return env_ref.coalesce(default)
|
12
|
+
return env_ref
|
13
|
+
|
14
|
+
|
15
|
+
# Deprecated: Use EnvironmentVariables instead. Will be removed in v0.15.0
|
16
|
+
Environment = EnvironmentVariables
|
@@ -98,7 +98,7 @@ class CodeExecutionNode(BaseNode[StateType], Generic[StateType, _OutputType], me
|
|
98
98
|
def run(self) -> Outputs:
|
99
99
|
output_type = self.__class__.get_output_type()
|
100
100
|
code, filepath = self._resolve_code()
|
101
|
-
if not self.packages and self.runtime == "PYTHON_3_11_6":
|
101
|
+
if not self.packages and self.runtime == "PYTHON_3_11_6" and not self._has_secrets_in_code_inputs():
|
102
102
|
logs, result = run_code_inline(code, self.code_inputs, output_type, filepath)
|
103
103
|
return self.Outputs(result=result, log=logs)
|
104
104
|
|
@@ -133,6 +133,13 @@ class CodeExecutionNode(BaseNode[StateType], Generic[StateType, _OutputType], me
|
|
133
133
|
|
134
134
|
return self.Outputs(result=code_execution_result.output.value, log=code_execution_result.log)
|
135
135
|
|
136
|
+
def _has_secrets_in_code_inputs(self) -> bool:
|
137
|
+
"""Check if any code_inputs contain VellumSecret instances that require API execution."""
|
138
|
+
for input_value in self.code_inputs.values():
|
139
|
+
if isinstance(input_value, VellumSecret):
|
140
|
+
return True
|
141
|
+
return False
|
142
|
+
|
136
143
|
def _compile_code_inputs(self) -> List[CodeExecutorInput]:
|
137
144
|
# TODO: We may want to consolidate with prompt deployment input compilation
|
138
145
|
# https://app.shortcut.com/vellum/story/4117
|
@@ -1233,3 +1233,56 @@ def main(numbers: List[str]) -> str:
|
|
1233
1233
|
],
|
1234
1234
|
request_options=None,
|
1235
1235
|
)
|
1236
|
+
|
1237
|
+
|
1238
|
+
def test_run_node__vellum_secret_forces_api_execution(vellum_client):
|
1239
|
+
"""Test that CodeExecutionNode with VellumSecretReference forces API execution instead of inline execution."""
|
1240
|
+
|
1241
|
+
# GIVEN a node that subclasses CodeExecutionNode with VellumSecretReference but no packages
|
1242
|
+
# This should normally run inline, but the presence of secrets should force API execution
|
1243
|
+
class State(BaseState):
|
1244
|
+
pass
|
1245
|
+
|
1246
|
+
class ExampleCodeExecutionNode(CodeExecutionNode[State, str]):
|
1247
|
+
code = """
|
1248
|
+
def main(secret: str) -> str:
|
1249
|
+
return f"Secret value: {secret}"
|
1250
|
+
"""
|
1251
|
+
runtime = "PYTHON_3_11_6"
|
1252
|
+
# Note: No packages specified, which would normally trigger inline execution
|
1253
|
+
|
1254
|
+
code_inputs = {
|
1255
|
+
"secret": VellumSecretReference("MY_SECRET"),
|
1256
|
+
}
|
1257
|
+
|
1258
|
+
# AND we know what the Code Execution Node will respond with
|
1259
|
+
mock_code_execution = CodeExecutorResponse(
|
1260
|
+
log="",
|
1261
|
+
output=StringVellumValue(value="Secret value: my_secret_value"),
|
1262
|
+
)
|
1263
|
+
vellum_client.execute_code.return_value = mock_code_execution
|
1264
|
+
|
1265
|
+
# WHEN we run the node
|
1266
|
+
node = ExampleCodeExecutionNode(state=State())
|
1267
|
+
outputs = node.run()
|
1268
|
+
|
1269
|
+
# THEN the node should have produced the outputs we expect
|
1270
|
+
assert outputs == {"result": "Secret value: my_secret_value", "log": ""}
|
1271
|
+
|
1272
|
+
# AND we should have invoked the Code via API (not inline) due to the secret
|
1273
|
+
vellum_client.execute_code.assert_called_once_with(
|
1274
|
+
input_values=[
|
1275
|
+
CodeExecutorSecretInput(
|
1276
|
+
name="secret",
|
1277
|
+
value="MY_SECRET",
|
1278
|
+
)
|
1279
|
+
],
|
1280
|
+
code="""
|
1281
|
+
def main(secret: str) -> str:
|
1282
|
+
return f"Secret value: {secret}"
|
1283
|
+
""",
|
1284
|
+
runtime="PYTHON_3_11_6",
|
1285
|
+
output_type="STRING",
|
1286
|
+
packages=[],
|
1287
|
+
request_options=None,
|
1288
|
+
)
|
@@ -1,7 +1,17 @@
|
|
1
|
+
import json
|
2
|
+
from typing import Any, List
|
3
|
+
|
4
|
+
from vellum import ChatMessage
|
1
5
|
from vellum.client.types.function_call import FunctionCall
|
2
6
|
from vellum.client.types.function_call_vellum_value import FunctionCallVellumValue
|
3
|
-
from vellum.
|
7
|
+
from vellum.client.types.string_chat_message_content import StringChatMessageContent
|
8
|
+
from vellum.workflows import BaseWorkflow
|
9
|
+
from vellum.workflows.inputs.base import BaseInputs
|
10
|
+
from vellum.workflows.nodes.bases import BaseNode
|
11
|
+
from vellum.workflows.nodes.experimental.tool_calling_node.utils import create_function_node, create_tool_router_node
|
12
|
+
from vellum.workflows.outputs.base import BaseOutputs
|
4
13
|
from vellum.workflows.state.base import BaseState, StateMeta
|
14
|
+
from vellum.workflows.state.context import WorkflowContext
|
5
15
|
|
6
16
|
|
7
17
|
def first_function() -> str:
|
@@ -51,3 +61,69 @@ def test_port_condition_match_function_name():
|
|
51
61
|
# AND the default port should be false
|
52
62
|
default_port = getattr(router_node.Ports, "default")
|
53
63
|
assert default_port.resolve_condition(state) is False
|
64
|
+
|
65
|
+
|
66
|
+
def test_tool_calling_node_inline_workflow_context():
|
67
|
+
"""
|
68
|
+
Test that the tool calling node correctly passes the context to the inline workflow.
|
69
|
+
This specifically tests that inline workflows receive the correct context.
|
70
|
+
"""
|
71
|
+
|
72
|
+
# GIVEN a test workflow that captures its context
|
73
|
+
class MyNode(BaseNode):
|
74
|
+
class Outputs(BaseOutputs):
|
75
|
+
generated_files: Any
|
76
|
+
|
77
|
+
def run(self) -> Outputs:
|
78
|
+
return self.Outputs(generated_files=self._context.generated_files)
|
79
|
+
|
80
|
+
class MyWorkflow(BaseWorkflow[BaseInputs, BaseState]):
|
81
|
+
graph = MyNode
|
82
|
+
|
83
|
+
class Outputs(BaseOutputs):
|
84
|
+
generated_files = MyNode.Outputs.generated_files
|
85
|
+
|
86
|
+
# GIVEN a tool router node
|
87
|
+
tool_router_node = create_tool_router_node(
|
88
|
+
ml_model="test-model",
|
89
|
+
blocks=[],
|
90
|
+
functions=[MyWorkflow],
|
91
|
+
prompt_inputs=None,
|
92
|
+
)
|
93
|
+
|
94
|
+
# WHEN we create a function node for the workflow
|
95
|
+
function_node_class = create_function_node(
|
96
|
+
function=MyWorkflow,
|
97
|
+
tool_router_node=tool_router_node,
|
98
|
+
)
|
99
|
+
|
100
|
+
# AND we create an instance with a context containing generated_files
|
101
|
+
function_node = function_node_class()
|
102
|
+
|
103
|
+
# Create a parent context with test data
|
104
|
+
parent_context = WorkflowContext(
|
105
|
+
generated_files={"script.py": "print('hello world')"},
|
106
|
+
)
|
107
|
+
function_node._context = parent_context
|
108
|
+
|
109
|
+
# Create a state with chat_history for the function node
|
110
|
+
class TestState(BaseState):
|
111
|
+
chat_history: List[ChatMessage] = []
|
112
|
+
|
113
|
+
function_node.state = TestState(meta=StateMeta(node_outputs={tool_router_node.Outputs.text: '{"arguments": {}}'}))
|
114
|
+
|
115
|
+
# WHEN the function node runs
|
116
|
+
outputs = function_node.run()
|
117
|
+
|
118
|
+
# THEN the workflow should have run successfully
|
119
|
+
assert outputs is not None
|
120
|
+
|
121
|
+
# AND the chat history should contain a function response
|
122
|
+
assert len(function_node.state.chat_history) == 1
|
123
|
+
function_response = function_node.state.chat_history[0]
|
124
|
+
assert function_response.role == "FUNCTION"
|
125
|
+
|
126
|
+
# AND the response should contain the generated files
|
127
|
+
assert isinstance(function_response.content, StringChatMessageContent)
|
128
|
+
data = json.loads(function_response.content.value)
|
129
|
+
assert data["generated_files"] == {"script.py": "print('hello world')"}
|
@@ -22,6 +22,7 @@ from vellum.workflows.outputs.base import BaseOutput
|
|
22
22
|
from vellum.workflows.ports.port import Port
|
23
23
|
from vellum.workflows.references.lazy import LazyReference
|
24
24
|
from vellum.workflows.state.base import BaseState
|
25
|
+
from vellum.workflows.state.context import WorkflowContext
|
25
26
|
from vellum.workflows.state.encoder import DefaultStateEncoder
|
26
27
|
from vellum.workflows.types.core import EntityInputsInterface, MergeBehavior
|
27
28
|
from vellum.workflows.types.generics import is_workflow_class
|
@@ -152,8 +153,7 @@ def create_function_node(
|
|
152
153
|
|
153
154
|
# Call the function based on its type
|
154
155
|
inputs_instance = function.get_inputs_class()(**arguments)
|
155
|
-
|
156
|
-
workflow = function()
|
156
|
+
workflow = function(context=WorkflowContext.create_from(self._context))
|
157
157
|
terminal_event = workflow.run(
|
158
158
|
inputs=inputs_instance,
|
159
159
|
)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import os
|
2
|
-
from typing import TYPE_CHECKING, Optional
|
2
|
+
from typing import TYPE_CHECKING, Any, Optional
|
3
3
|
|
4
|
+
from vellum.workflows.constants import undefined
|
4
5
|
from vellum.workflows.descriptors.base import BaseDescriptor
|
5
6
|
|
6
7
|
if TYPE_CHECKING:
|
@@ -8,17 +9,18 @@ if TYPE_CHECKING:
|
|
8
9
|
|
9
10
|
|
10
11
|
class EnvironmentVariableReference(BaseDescriptor[str]):
|
11
|
-
def __init__(
|
12
|
+
def __init__(
|
13
|
+
self,
|
14
|
+
*,
|
15
|
+
name: str,
|
16
|
+
# DEPRECATED - to be removed in 0.15.0 release
|
17
|
+
default: Optional[str] = None,
|
18
|
+
):
|
12
19
|
super().__init__(name=name, types=(str,))
|
13
|
-
self._default = default
|
14
20
|
|
15
|
-
def resolve(self, state: "BaseState") ->
|
21
|
+
def resolve(self, state: "BaseState") -> Any:
|
16
22
|
env_value = os.environ.get(self.name)
|
17
23
|
if env_value is not None:
|
18
24
|
return env_value
|
19
25
|
|
20
|
-
|
21
|
-
return self._default
|
22
|
-
|
23
|
-
# Fetch Vellum Environment Variable named `self.name` once that project is done
|
24
|
-
raise ValueError(f"No environment variable named '{self.name}' found")
|
26
|
+
return undefined
|
@@ -1,9 +1,9 @@
|
|
1
1
|
vellum_cli/CONTRIBUTING.md,sha256=FtDC7BGxSeMnwCXAUssFsAIElXtmJE-O5Z7BpolcgvI,2935
|
2
2
|
vellum_cli/README.md,sha256=2NudRoLzWxNKqnuVy1JuQ7DerIaxWGYkrH8kMd-asIE,90
|
3
|
-
vellum_cli/__init__.py,sha256=
|
3
|
+
vellum_cli/__init__.py,sha256=oi-vvNVepu23IBBjhA5uUIDVYBPqQ3EzxWZAPn2S64c,12700
|
4
4
|
vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
|
5
5
|
vellum_cli/config.py,sha256=v5BmZ-t_v4Jmqd7KVuQMZF2pRI-rbMspSkVYXIRoTmI,9448
|
6
|
-
vellum_cli/image_push.py,sha256=
|
6
|
+
vellum_cli/image_push.py,sha256=Xw_IlItZ27OM5XrWcaqRxXCx4rroV3IaUByl8Ela6U8,10730
|
7
7
|
vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
|
8
8
|
vellum_cli/logger.py,sha256=dcM_OmgqXLo93vDYswO5ylyUQQcTfnA5GTd5tbIt3wM,1446
|
9
9
|
vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
|
@@ -12,7 +12,7 @@ vellum_cli/push.py,sha256=wxRlFu2mYW9SvwODYxwajri1mDQ2be0n-9i0d9QAc30,10194
|
|
12
12
|
vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
|
14
14
|
vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
|
15
|
-
vellum_cli/tests/test_image_push.py,sha256=
|
15
|
+
vellum_cli/tests/test_image_push.py,sha256=QGbhCB2DhkepoBUdfhv_ovks-HQ164jmjKFuYvPmJt8,9141
|
16
16
|
vellum_cli/tests/test_image_push_error_handling.py,sha256=_Wjfkn1orI2K4Ahzqz4u8T13or7NOX01K4BtcTuTIOM,7107
|
17
17
|
vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ,18754
|
18
18
|
vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
|
@@ -27,37 +27,39 @@ vellum_ee/workflows/display/base.py,sha256=EqlQFD56kpqMY02ZBJBQajzJKh33Dwi60Wo77
|
|
27
27
|
vellum_ee/workflows/display/editor/__init__.py,sha256=MSAgY91xCEg2neH5d8jXx5wRdR962ftZVa6vO9BGq9k,167
|
28
28
|
vellum_ee/workflows/display/editor/types.py,sha256=x-tOOCJ6CF4HmiKDfCmcc3bOVfc1EBlP5o6u5WEfLoY,567
|
29
29
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=jI1aPBQf8DkmrYoZ4O-wR1duqZByOf5mDFmo_wFJPE4,307
|
30
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
30
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=8Iio5O2Lu7XA5EfCWhXNZVzEOiaXO4eMdssczGBKXxU,16922
|
31
31
|
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=jI_kUi9LnNLDpY63QtlC4TfN8P571VN4LpzH0I1ZtLk,1149
|
32
32
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=Z4Mf7xLCNiblSbpKI0BrV5modQr-ZcFzhfir_OSyTTs,2997
|
34
34
|
vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
|
35
|
-
vellum_ee/workflows/display/nodes/utils.py,sha256=
|
35
|
+
vellum_ee/workflows/display/nodes/utils.py,sha256=gxiixuiJi6jrYTV2jmsPsyQfeuwKmrULRb-Lg9c0Aqw,975
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
37
|
-
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=
|
37
|
+
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=5Uq8x08F64yrBcqbfsVeuoGnTa9eoOPumYzZZrDPmr0,8847
|
38
38
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=rJbHZBg9A_v2bjk-R6MfWzShcrS2gcKIOyYGoqwTx8s,6353
|
39
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
40
|
-
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=
|
41
|
-
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=
|
42
|
-
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=
|
43
|
-
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=
|
44
|
-
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=
|
45
|
-
vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=
|
46
|
-
vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=
|
47
|
-
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=
|
48
|
-
vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=
|
49
|
-
vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=
|
50
|
-
vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=
|
51
|
-
vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=
|
52
|
-
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=
|
53
|
-
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=
|
39
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=6lavdBw297GwAQqyxjnPUtx5pHv6k5V9Vkuq7s2D0TM,4508
|
40
|
+
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=9GtbvSJUNF626tCYxnMxETVZm3Fq84vOZ3Nkdkl3n-M,11146
|
41
|
+
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=YhMsi2TG1zSR8E7IpxzzSncOyVLcvqTuGa3mr4RqHd8,2364
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=zo-nalsuayMqeb2GwR2OB9SFK3y2U5aG-rtwrsjdasQ,3089
|
43
|
+
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=IniO5KvO0Rw9zghFg3RFvbXBTv6Zi1iuQhaA1DLazqU,2331
|
44
|
+
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=1ydd1-SXCuJdPDquMrvV5JXIIhf7eBdvY2dXqDz_r5o,11035
|
45
|
+
vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=f7MeoxgKrdyb1dSJsvdDtZPlp1J2Pa4njPvN3qHVktA,6028
|
46
|
+
vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=uaZ2wcZR1J9C9iI0QWAsgNK9IlcuCz1808oxXmiYsLY,3908
|
47
|
+
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=RTP_raQWL8ZKoRKLpxLfpyXzw61TZeTCkTuM1uRLIkI,3274
|
48
|
+
vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=6xf8MJ684KecKPJrGlCJuJYLPtYImXmqN85Y_6KPjW4,1141
|
49
|
+
vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=cT5qT7Nd2v6rSsIErpSAWaxta7txGOSFOZz2AQYQmWE,3536
|
50
|
+
vellum_ee/workflows/display/nodes/vellum/retry_node.py,sha256=Gos8F1yKN69GmegDO2q3NlGTamibd4rpuTasSU0mK8c,3281
|
51
|
+
vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=bF07csUFSQlAeOayPPws5pz3tBTp1PdwgHb8WItgXmY,12319
|
52
|
+
vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=Ub6XDdVtVarqoqQrIXpJxNbp3xvz37vwpuf93DhLvX8,2670
|
53
|
+
vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=TdIJWh2l8p4tw7ejRexGOFQKnviirUqie3WYwsrVQ4g,3339
|
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=ZasoqG8FmqnZDj2FfL5BGPq9fafOTJqV_4xjOKLi1gc,5434
|
56
56
|
vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWMpJ3EN_DPjHsr9ODJWCRVcUa5hZBn-5T2GiHU,1665
|
57
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py,sha256=SKOYan-dxY4gsO0R4JyQUyWrABHBN8XImKw9Eeo4wGo,3535
|
57
58
|
vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
|
58
59
|
vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_deployment_node.py,sha256=G-qJyTNJkpqJiEZ3kCJl86CXJINLeFyf2lM0bQHCCOs,3822
|
59
60
|
vellum_ee/workflows/display/nodes/vellum/tests/test_prompt_node.py,sha256=TtzUj3Zk3ZhwtXE_WyctCC-CmcLB1RxntyF7u-a3i6I,10077
|
60
61
|
vellum_ee/workflows/display/nodes/vellum/tests/test_retry_node.py,sha256=h93ysolmbo2viisyhRnXKHPxiDK0I_dSAbYoHFYIoO4,1953
|
62
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_search_node.py,sha256=KvByxgbUkVyfPIVxTUBUk6a92JiJMi8eReZWxzfPExU,3864
|
61
63
|
vellum_ee/workflows/display/nodes/vellum/tests/test_subworkflow_deployment_node.py,sha256=BUzHJgjdWnPeZxjFjHfDBKnbFjYjnbXPjc-1hne1B2Y,3965
|
62
64
|
vellum_ee/workflows/display/nodes/vellum/tests/test_templating_node.py,sha256=LSk2gx9TpGXbAqKe8dggQW8yJZqj-Cf0EGJFeGGlEcw,3321
|
63
65
|
vellum_ee/workflows/display/nodes/vellum/tests/test_tool_calling_node.py,sha256=ZsLIGnJ9QKrXjYeDW8LEN8M9FnWRQ9TohHFyB6144HY,7970
|
@@ -71,7 +73,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DE
|
|
71
73
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
74
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=XOQDDRiG46etxTC7-_RUEutoNumXc02fo7oho4GYM0c,1900
|
73
75
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=tsjGM-jOurPSkDIbrDFdjNLmkI1fPNPAw3J9-l9knCw,12848
|
74
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
76
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=xrekxgRlZrNIF-bkvfIzGGN3vKgTKNttNz3tfLanzd4,22062
|
75
77
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=s6_mnk0pkztU59wYpSfOFpMhAJaRjmyfxM6WJGtnD4Y,6456
|
76
78
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=PkSgghJDz0fpDB72HHPjLjo8LkZk-HpUkCQzRLX-iVw,40611
|
77
79
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=dsJr8I9AdPwMOGszirfNDzZP2Ychd94aAKuPXAzknMk,4632
|
@@ -82,30 +84,34 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_default_stat
|
|
82
84
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=MNnQ51ZWOQGVfBdpIqvr4OZF0tWdfrh2bsHP3xkTwQw,5841
|
83
85
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=kLOnUNn-r1w1JXNQcVKe-Vp-fKhSfuDBuDqrjGkFZ3U,5544
|
84
86
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=v07cILUzS5iFYDrSOAXK93yz50-FtxLaMYMwoaPOv20,7374
|
85
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=
|
86
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=
|
87
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_prompt_node_serialization.py,sha256=glOPy9y_GOLGMxc7glfo7IGq5iuCDbz9-TE_6Krha2U,18426
|
88
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=1ND_6lfPNUQjSc72k_sxydeeOU5f_kHkRXO65boYFok,21631
|
87
89
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=3gZuNM8sT6ovVaeoAvd2JoyKwuxokvowlhH8kwDUoZ8,16559
|
88
90
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=IIJt7YZBzkhNtbmaMwCX4ENs58QtSIIoBHlMR6OwGU8,8342
|
89
91
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=QXiRjwtiTPeMUl40Pvh_geeU99C3mv1aVS85oeIUwY4,21052
|
90
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=
|
92
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=JuosR1Xvyy2-0UKuCxx0P_3QH3OXgU88llxpyQ7NScM,12936
|
91
93
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=KkYZc_bZuq1lmDcvUz3QxIqJLpQPCZioD1FHUNsMJY8,11211
|
92
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=aZaqRDrkO3ytcmdM2eKJqHSt60MF070NMj6M2vgzOKc,7711
|
93
95
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=r748dpS13HtwY7t_KQFExFssxRy0xI2d-wxmhiUHRe0,3850
|
94
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=
|
96
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=7UWh_8dKiRL7AochCcIvOsWvC0G3yp8aEup1wIIPo9k,25256
|
95
97
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=Cx3oY6vPVap0xm_mChqfQw4zzR4pqV36o_SyD8g6jPY,8727
|
96
98
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=EL5kfakuoEcwD85dGjhMta-J-PpCHRSDoc80SdbBrQk,2769
|
97
99
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=RmFUDx8dYdfsOE2CGLvdXqNNRtLLpVzXDN8dqZyMcZ8,5822
|
100
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_workflow_input_parameterization_error.py,sha256=vAdmn3YTBDpo55znbydQxsgg9ASqHcvsUPwiBR_7wfo,1461
|
98
101
|
vellum_ee/workflows/display/types.py,sha256=i4T7ElU5b5h-nA1i3scmEhO1BqmNDc4eJDHavATD88w,2821
|
99
102
|
vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
|
+
vellum_ee/workflows/display/utils/auto_layout.py,sha256=R_BLSZjdanj3UIR4cS6WVT6ek0i7AKJyHSjK1wPiois,3877
|
100
104
|
vellum_ee/workflows/display/utils/exceptions.py,sha256=LSwwxCYNxFkf5XMUcFkaZKpQ13OSrI7y_bpEUwbKVk0,169
|
101
|
-
vellum_ee/workflows/display/utils/expressions.py,sha256=
|
105
|
+
vellum_ee/workflows/display/utils/expressions.py,sha256=bSZ-sRByLCsut8XcRkCFbbqYvw9p7tlIeF-HFnEm664,14354
|
102
106
|
vellum_ee/workflows/display/utils/registry.py,sha256=fWIm5Jj-10gNFjgn34iBu4RWv3Vd15ijtSN0V97bpW8,1513
|
107
|
+
vellum_ee/workflows/display/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
|
+
vellum_ee/workflows/display/utils/tests/test_auto_layout.py,sha256=vfXI769418s9vda5Gb5NFBH747WMOwSgHRXeLCTLVm8,2356
|
103
109
|
vellum_ee/workflows/display/utils/vellum.py,sha256=mtoXmSYwR7rvrq-d6CzCW_auaJXTct0Mi1F0xpRCiNQ,5627
|
104
110
|
vellum_ee/workflows/display/vellum.py,sha256=o7mq_vk2Yapu9DDKRz5l76h8EmCAypWGQYe6pryrbB8,3576
|
105
111
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
106
|
-
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=
|
112
|
+
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=LKM8MnrezrBHU1W5gZ2y82UqkBwnKQ2OBQZD56g-XmI,33399
|
107
113
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=gxz76AeCqgAZ9D2lZeTiZzxY9eMgn3qOSfVgiqYcOh8,2028
|
108
|
-
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=
|
114
|
+
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=L7SKWJ26Ex-XXTNfHYXux7KP6I-dxE1EMQylap4Mhjs,31762
|
109
115
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=aaKdmWrgEe5YyV4zuDY_4E3y-l59rIHQnNGiPj2OWxQ,359
|
110
116
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
111
117
|
vellum_ee/workflows/server/virtual_file_loader.py,sha256=7JphJcSO3H85qiC2DpFfBWjC3JjrbRmoynBC6KKHVsA,2710
|
@@ -136,7 +142,7 @@ vellum/client/README.md,sha256=CuGUYnaE0Imt0KqQ4sIPaUghCjLHkF3DdEvZWu14-8s,4807
|
|
136
142
|
vellum/client/__init__.py,sha256=AYopGv2ZRVn3zsU8_km6KOvEHDbXiTPCVuYVI7bWvdA,120166
|
137
143
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
138
144
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
139
|
-
vellum/client/core/client_wrapper.py,sha256=
|
145
|
+
vellum/client/core/client_wrapper.py,sha256=3ZqkR_DngkaI-fY5PAgWW2c7RZ88oONDwDkWfxAKLBc,1869
|
140
146
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
141
147
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
142
148
|
vellum/client/core/http_client.py,sha256=Z77OIxIbL4OAB2IDqjRq_sYa5yNYAWfmdhdCSSvh6Y4,19552
|
@@ -1499,8 +1505,8 @@ vellum/workflows/edges/__init__.py,sha256=wSkmAnz9xyi4vZwtDbKxwlplt2skD7n3NsxkvR
|
|
1499
1505
|
vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
|
1500
1506
|
vellum/workflows/emitters/__init__.py,sha256=YyOgaoLtVW8eFNEWODzCYb0HzL0PoSeNRf4diJ1Y0dk,80
|
1501
1507
|
vellum/workflows/emitters/base.py,sha256=D5SADKIvnbgKwIBgYm77jaqvpo1o0rz4MmuX_muRqQU,359
|
1502
|
-
vellum/workflows/environment/__init__.py,sha256=
|
1503
|
-
vellum/workflows/environment/environment.py,sha256=
|
1508
|
+
vellum/workflows/environment/__init__.py,sha256=TJz0m9dwIs6YOwCTeuN0HHsU-ecyjc1OJXx4AFy83EQ,121
|
1509
|
+
vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5ijVwJpEPTeIJ4_Q,471
|
1504
1510
|
vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
|
1505
1511
|
vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
|
1506
1512
|
vellum/workflows/events/__init__.py,sha256=6pxxceJo2dcaRkWtkDAYlUQZ-PHBQSZytIoyuUK48Qw,759
|
@@ -1604,11 +1610,11 @@ vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMD
|
|
1604
1610
|
vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
|
1605
1611
|
vellum/workflows/nodes/displayable/bases/utils.py,sha256=ckMUenSsNkiYmSw6FmjSMHYaCk8Y8_sUjL6lkFFEqts,5412
|
1606
1612
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1607
|
-
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=
|
1613
|
+
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=Qh4SPafzdRKbVKQH3h9SgH4vKeQQjvHAfP8ttUxLA2M,10304
|
1608
1614
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1609
1615
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1610
1616
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1611
|
-
vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py,sha256=
|
1617
|
+
vellum/workflows/nodes/displayable/code_execution_node/tests/test_node.py,sha256=47W5fPLpDcaKhCVuauKOwcivx1NfhpbsRMPrs-WBnlY,38441
|
1612
1618
|
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=VRTKms59vrSR9mDk99cojParZVAP4lzjEeDwDNXU1tk,3837
|
1613
1619
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1614
1620
|
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=71ZUNfTiD7t2Kai2ypw0tmv1lSf1brQaHAQD-SeUrGE,1101
|
@@ -1653,8 +1659,8 @@ vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha2
|
|
1653
1659
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
|
1654
1660
|
vellum/workflows/nodes/experimental/tool_calling_node/__init__.py,sha256=S7OzT3I4cyOU5Beoz87nPwCejCMP2FsHBFL8OcVmxJ4,118
|
1655
1661
|
vellum/workflows/nodes/experimental/tool_calling_node/node.py,sha256=FkhaJccpCbx2be_IZ5V2v6Lo-jPJ0WgSC5tveLvAW4A,5774
|
1656
|
-
vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py,sha256=
|
1657
|
-
vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=
|
1662
|
+
vellum/workflows/nodes/experimental/tool_calling_node/tests/test_node.py,sha256=7x_o81vT7gWtVw3zDppcWnlJbakgxx_oI1esqhs2gpI,4551
|
1663
|
+
vellum/workflows/nodes/experimental/tool_calling_node/utils.py,sha256=iiB_Tm3zvElispx_DhnW4eQH1MnK-Y9k44X_PSpp7p8,9923
|
1658
1664
|
vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
|
1659
1665
|
vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1660
1666
|
vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
|
@@ -1668,7 +1674,7 @@ vellum/workflows/ports/port.py,sha256=j_qiZlpx-a1cK5E7sxXwPcb_9NS-KUM-JoP8mgqg32
|
|
1668
1674
|
vellum/workflows/ports/utils.py,sha256=cWJ9xX1KrHBTiU3xe6t7Rs0yaOy9RV18GMtHaAshAsc,3094
|
1669
1675
|
vellum/workflows/references/__init__.py,sha256=glHFC1VfXmcbNvH5VzFbkT03d8_D7MMcvEcsUBrzLIs,591
|
1670
1676
|
vellum/workflows/references/constant.py,sha256=6yUT4q1sMj1hkI_tzzQ9AYcmeeDYFUNCqUq_W2DN0S8,540
|
1671
|
-
vellum/workflows/references/environment_variable.py,sha256
|
1677
|
+
vellum/workflows/references/environment_variable.py,sha256=evpxiBKzBk74JzxBXWkfTrZe4Kx-fuUG1W6XjtXzaUw,700
|
1672
1678
|
vellum/workflows/references/execution_count.py,sha256=JILHqt8ELdc9ct-WsVCA5X-rKiP1rmJODw-XTf4kpHI,722
|
1673
1679
|
vellum/workflows/references/external_input.py,sha256=c_4SojTpykCSbGS1Pjmx9FfquyYGMPksoj0AbrWv7Go,2064
|
1674
1680
|
vellum/workflows/references/input.py,sha256=3INu-TLTi4dziWmva6LO3WvgDlPzsjayUx61cVvqLJA,325
|
@@ -1720,8 +1726,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1720
1726
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1721
1727
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=fROqff6AZpCIzaSwOKSdtYy4XR0UZQ6ejxL3RJOSJVs,20447
|
1722
1728
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1723
|
-
vellum_ai-0.14.
|
1724
|
-
vellum_ai-0.14.
|
1725
|
-
vellum_ai-0.14.
|
1726
|
-
vellum_ai-0.14.
|
1727
|
-
vellum_ai-0.14.
|
1729
|
+
vellum_ai-0.14.71.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1730
|
+
vellum_ai-0.14.71.dist-info/METADATA,sha256=C5GX4tfVPU2-YXu_9tu4RToI1a6SafllfrsjW6SiM9c,5556
|
1731
|
+
vellum_ai-0.14.71.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1732
|
+
vellum_ai-0.14.71.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1733
|
+
vellum_ai-0.14.71.dist-info/RECORD,,
|
vellum_cli/__init__.py
CHANGED
@@ -362,9 +362,12 @@ def images() -> None:
|
|
362
362
|
"This field does not push multiple local tags of the passed in image.",
|
363
363
|
)
|
364
364
|
@click.option("--workspace", type=str, help="The specific Workspace config to use when pushing")
|
365
|
-
|
365
|
+
@click.option("--source", type=str, help="Path to Dockerfile to build before pushing")
|
366
|
+
def image_push(
|
367
|
+
image: str, tag: Optional[List[str]] = None, workspace: Optional[str] = None, source: Optional[str] = None
|
368
|
+
) -> None:
|
366
369
|
"""Push Docker image to Vellum"""
|
367
|
-
image_push_command(image, tag, workspace)
|
370
|
+
image_push_command(image, tag, workspace, source)
|
368
371
|
|
369
372
|
|
370
373
|
@workflows.command(name="init")
|
vellum_cli/image_push.py
CHANGED
@@ -17,10 +17,33 @@ from vellum_cli.logger import handle_cli_error, load_cli_logger
|
|
17
17
|
_SUPPORTED_ARCHITECTURE = "amd64"
|
18
18
|
|
19
19
|
|
20
|
-
def image_push_command(
|
20
|
+
def image_push_command(
|
21
|
+
image: str, tags: Optional[List[str]] = None, workspace: Optional[str] = None, source: Optional[str] = None
|
22
|
+
) -> None:
|
21
23
|
load_dotenv(dotenv_path=os.path.join(os.getcwd(), ".env"))
|
22
24
|
logger = load_cli_logger()
|
23
25
|
config = load_vellum_cli_config()
|
26
|
+
|
27
|
+
if source:
|
28
|
+
logger.info(f"Building Docker image from Dockerfile: {source}")
|
29
|
+
|
30
|
+
if not os.path.exists(source):
|
31
|
+
handle_cli_error(logger, "Dockerfile not found", f"Dockerfile does not exist: {source}")
|
32
|
+
|
33
|
+
source_dir = os.path.dirname(source)
|
34
|
+
dockerfile_name = os.path.basename(source)
|
35
|
+
|
36
|
+
build_result = subprocess.run(
|
37
|
+
["docker", "buildx", "build", "-f", dockerfile_name, "--platform=linux/amd64", "-t", image, "."],
|
38
|
+
cwd=source_dir,
|
39
|
+
stdout=subprocess.PIPE,
|
40
|
+
stderr=subprocess.PIPE,
|
41
|
+
)
|
42
|
+
|
43
|
+
if build_result.returncode != 0:
|
44
|
+
handle_cli_error(logger, "Docker build failed", build_result.stderr.decode("utf-8"))
|
45
|
+
|
46
|
+
logger.info("Docker build completed successfully")
|
24
47
|
workspace_config = next((w for w in config.workspaces if w.name == workspace), DEFAULT_WORKSPACE_CONFIG)
|
25
48
|
|
26
49
|
api_key = os.getenv(workspace_config.api_key, None)
|