vellum-ai 0.10.7__py3-none-any.whl → 0.10.8__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/events/types.py +1 -1
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py +1 -0
- vellum/workflows/nodes/core/templating_node/node.py +5 -0
- vellum/workflows/nodes/displayable/api_node/node.py +1 -1
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +1 -2
- vellum/workflows/nodes/displayable/code_execution_node/node.py +1 -2
- vellum/workflows/nodes/displayable/code_execution_node/utils.py +13 -2
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +10 -3
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +6 -1
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +1 -2
- vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +1 -2
- vellum/workflows/runner/runner.py +43 -1
- vellum/workflows/types/__init__.py +5 -0
- {vellum_ai-0.10.7.dist-info → vellum_ai-0.10.8.dist-info}/METADATA +1 -1
- {vellum_ai-0.10.7.dist-info → vellum_ai-0.10.8.dist-info}/RECORD +24 -24
- vellum_cli/__init__.py +23 -4
- vellum_cli/pull.py +28 -13
- vellum_cli/tests/test_pull.py +45 -2
- vellum_ee/workflows/display/nodes/base_node_display.py +1 -1
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +17 -2
- {vellum_ai-0.10.7.dist-info → vellum_ai-0.10.8.dist-info}/LICENSE +0 -0
- {vellum_ai-0.10.7.dist-info → vellum_ai-0.10.8.dist-info}/WHEEL +0 -0
- {vellum_ai-0.10.7.dist-info → vellum_ai-0.10.8.dist-info}/entry_points.txt +0 -0
@@ -17,7 +17,7 @@ class BaseClientWrapper:
|
|
17
17
|
headers: typing.Dict[str, str] = {
|
18
18
|
"X-Fern-Language": "Python",
|
19
19
|
"X-Fern-SDK-Name": "vellum-ai",
|
20
|
-
"X-Fern-SDK-Version": "0.10.
|
20
|
+
"X-Fern-SDK-Version": "0.10.8",
|
21
21
|
}
|
22
22
|
headers["X_API_KEY"] = self.api_key
|
23
23
|
return headers
|
vellum/workflows/events/types.py
CHANGED
@@ -18,6 +18,7 @@ class InlineSubworkflowNode(BaseSubworkflowNode[StateType], Generic[StateType, W
|
|
18
18
|
Used to execute a Subworkflow defined inline.
|
19
19
|
|
20
20
|
subworkflow: Type["BaseWorkflow[WorkflowInputsType, InnerStateType]"] - The Subworkflow to execute
|
21
|
+
subworkflow_inputs: ClassVar[EntityInputsInterface] = {}
|
21
22
|
"""
|
22
23
|
|
23
24
|
subworkflow: Type["BaseWorkflow[WorkflowInputsType, InnerStateType]"]
|
@@ -82,6 +82,11 @@ class TemplatingNode(BaseNode[StateType], Generic[StateType, _OutputType], metac
|
|
82
82
|
jinja_custom_filters: Mapping[str, Callable[[Union[str, bytes]], bool]] = _DEFAULT_JINJA_CUSTOM_FILTERS
|
83
83
|
|
84
84
|
class Outputs(BaseNode.Outputs):
|
85
|
+
"""
|
86
|
+
The outputs of the TemplatingNode.
|
87
|
+
|
88
|
+
result: _OutputType - The result of the template rendering
|
89
|
+
"""
|
85
90
|
# We use our mypy plugin to override the _OutputType with the actual output type
|
86
91
|
# for downstream references to this output.
|
87
92
|
result: _OutputType # type: ignore[valid-type]
|
@@ -8,7 +8,7 @@ from vellum.workflows.references.vellum_secret import VellumSecretReference
|
|
8
8
|
class APINode(BaseAPINode):
|
9
9
|
"""
|
10
10
|
Used to execute an API call. This node exists to be backwards compatible with Vellum's API Node, and for most cases,
|
11
|
-
you should extend from `
|
11
|
+
you should extend from `BaseAPINode` directly.
|
12
12
|
|
13
13
|
url: str - The URL to send the request to.
|
14
14
|
method: APIRequestMethod - The HTTP method to use for the request.
|
@@ -11,7 +11,6 @@ from vellum import (
|
|
11
11
|
RawPromptExecutionOverridesRequest,
|
12
12
|
StringInputRequest,
|
13
13
|
)
|
14
|
-
|
15
14
|
from vellum.workflows.constants import LATEST_RELEASE_TAG, OMIT
|
16
15
|
from vellum.workflows.errors import VellumErrorCode
|
17
16
|
from vellum.workflows.exceptions import NodeException
|
@@ -26,7 +25,7 @@ class BasePromptDeploymentNode(BasePromptNode, Generic[StateType]):
|
|
26
25
|
prompt_inputs: EntityInputsInterface - The inputs for the Prompt
|
27
26
|
deployment: Union[UUID, str] - Either the Prompt Deployment's UUID or its name.
|
28
27
|
release_tag: str - The release tag to use for the Prompt Execution
|
29
|
-
external_id: Optional[str] -
|
28
|
+
external_id: Optional[str] - Optionally include a unique identifier for tracking purposes. Must be unique within a given Prompt Deployment.
|
30
29
|
expand_meta: Optional[PromptDeploymentExpandMetaRequest] - Expandable execution fields to include in the response
|
31
30
|
raw_overrides: Optional[RawPromptExecutionOverridesRequest] - The raw overrides to use for the Prompt Execution
|
32
31
|
expand_raw: Optional[Sequence[str]] - Expandable raw fields to include in the response
|
@@ -67,9 +67,8 @@ class CodeExecutionNode(BaseNode[StateType], Generic[StateType, _OutputType], me
|
|
67
67
|
|
68
68
|
filepath: str - The path to the script to execute.
|
69
69
|
code_inputs: EntityInputsInterface - The inputs for the custom script.
|
70
|
-
output_type: VellumVariableType = "STRING" - The type of the output from the custom script.
|
71
70
|
runtime: CodeExecutionRuntime = "PYTHON_3_12" - The runtime to use for the custom script.
|
72
|
-
packages: Optional[Sequence[
|
71
|
+
packages: Optional[Sequence[CodeExecutionPackage]] = None - The packages to use for the custom script.
|
73
72
|
request_options: Optional[RequestOptions] = None - The request options to use for the custom script.
|
74
73
|
"""
|
75
74
|
|
@@ -2,9 +2,20 @@ import os
|
|
2
2
|
from typing import Union
|
3
3
|
|
4
4
|
|
5
|
+
def get_project_root() -> str:
|
6
|
+
current_dir = os.getcwd()
|
7
|
+
while current_dir != '/':
|
8
|
+
if ".git" in os.listdir(current_dir):
|
9
|
+
return current_dir
|
10
|
+
current_dir = os.path.dirname(current_dir)
|
11
|
+
raise FileNotFoundError("Project root not found.")
|
12
|
+
|
5
13
|
def read_file_from_path(filepath: str) -> Union[str, None]:
|
6
|
-
|
14
|
+
project_root = get_project_root()
|
15
|
+
relative_filepath = os.path.join(project_root, filepath)
|
16
|
+
|
17
|
+
if not os.path.exists(relative_filepath):
|
7
18
|
return None
|
8
19
|
|
9
|
-
with open(
|
20
|
+
with open(relative_filepath, 'r') as file:
|
10
21
|
return file.read()
|
@@ -9,16 +9,23 @@ from vellum.workflows.types.generics import StateType
|
|
9
9
|
|
10
10
|
class InlinePromptNode(BaseInlinePromptNode[StateType]):
|
11
11
|
"""
|
12
|
-
Used to execute
|
12
|
+
Used to execute a Prompt defined inline.
|
13
13
|
|
14
14
|
prompt_inputs: EntityInputsInterface - The inputs for the Prompt
|
15
15
|
ml_model: str - Either the ML Model's UUID or its name.
|
16
|
-
blocks: List[
|
16
|
+
blocks: List[PromptBlock] - The blocks that make up the Prompt
|
17
|
+
functions: Optional[List[FunctionDefinition]] - The functions to include in the Prompt
|
17
18
|
parameters: PromptParameters - The parameters for the Prompt
|
18
|
-
expand_meta: Optional[
|
19
|
+
expand_meta: Optional[AdHocExpandMeta] - Expandable execution fields to include in the response
|
20
|
+
request_options: Optional[RequestOptions] - The request options to use for the Prompt Execution
|
19
21
|
"""
|
20
22
|
|
21
23
|
class Outputs(BaseInlinePromptNode.Outputs):
|
24
|
+
"""
|
25
|
+
The outputs of the InlinePromptNode.
|
26
|
+
|
27
|
+
text: str - The result of the Prompt Execution
|
28
|
+
"""
|
22
29
|
text: str
|
23
30
|
|
24
31
|
def run(self) -> Iterator[BaseOutput]:
|
@@ -14,7 +14,7 @@ class PromptDeploymentNode(BasePromptDeploymentNode[StateType]):
|
|
14
14
|
prompt_inputs: EntityInputsInterface - The inputs for the Prompt
|
15
15
|
deployment: Union[UUID, str] - Either the Prompt Deployment's UUID or its name.
|
16
16
|
release_tag: str - The release tag to use for the Prompt Execution
|
17
|
-
external_id: Optional[str] -
|
17
|
+
external_id: Optional[str] - Optionally include a unique identifier for tracking purposes. Must be unique within a given Prompt Deployment.
|
18
18
|
expand_meta: Optional[PromptDeploymentExpandMetaRequest] - Expandable execution fields to include in the response
|
19
19
|
raw_overrides: Optional[RawPromptExecutionOverridesRequest] - The raw overrides to use for the Prompt Execution
|
20
20
|
expand_raw: Optional[Sequence[str]] - Expandable raw fields to include in the response
|
@@ -23,6 +23,11 @@ class PromptDeploymentNode(BasePromptDeploymentNode[StateType]):
|
|
23
23
|
"""
|
24
24
|
|
25
25
|
class Outputs(BasePromptDeploymentNode.Outputs):
|
26
|
+
"""
|
27
|
+
The outputs of the PromptDeploymentNode.
|
28
|
+
|
29
|
+
text: str - The result of the Prompt Execution
|
30
|
+
"""
|
26
31
|
text: str
|
27
32
|
|
28
33
|
def run(self) -> Iterator[BaseOutput]:
|
@@ -12,7 +12,6 @@ from vellum import (
|
|
12
12
|
WorkflowRequestStringInputRequest,
|
13
13
|
)
|
14
14
|
from vellum.core import RequestOptions
|
15
|
-
|
16
15
|
from vellum.workflows.constants import LATEST_RELEASE_TAG, OMIT
|
17
16
|
from vellum.workflows.errors import VellumErrorCode
|
18
17
|
from vellum.workflows.exceptions import NodeException
|
@@ -28,7 +27,7 @@ class SubworkflowDeploymentNode(BaseSubworkflowNode[StateType], Generic[StateTyp
|
|
28
27
|
subworkflow_inputs: EntityInputsInterface - The inputs for the Subworkflow
|
29
28
|
deployment: Union[UUID, str] - Either the Workflow Deployment's UUID or its name.
|
30
29
|
release_tag: str = LATEST_RELEASE_TAG - The release tag to use for the Workflow Execution
|
31
|
-
external_id: Optional[str] = OMIT -
|
30
|
+
external_id: Optional[str] = OMIT - Optionally include a unique identifier for tracking purposes. Must be unique within a given Workflow Deployment.
|
32
31
|
expand_meta: Optional[WorkflowExpandMetaRequest] = OMIT - Expandable execution fields to include in the respownse
|
33
32
|
metadata: Optional[Dict[str, Optional[Any]]] = OMIT - The metadata to use for the Workflow Execution
|
34
33
|
request_options: Optional[RequestOptions] = None - The request options to use for the Workflow Execution
|
@@ -8,7 +8,6 @@ from vellum import (
|
|
8
8
|
PromptOutput,
|
9
9
|
StringVellumValue,
|
10
10
|
)
|
11
|
-
|
12
11
|
from vellum.workflows.constants import OMIT
|
13
12
|
from vellum.workflows.inputs import BaseInputs
|
14
13
|
from vellum.workflows.nodes import PromptDeploymentNode
|
@@ -65,7 +64,7 @@ def test_text_prompt_deployment_node__basic(vellum_client):
|
|
65
64
|
assert text_output.name == "text"
|
66
65
|
assert text_output.value == "Hello, world!"
|
67
66
|
|
68
|
-
# AND we should have made the expected call to
|
67
|
+
# AND we should have made the expected call to stream the prompt execution
|
69
68
|
vellum_client.execute_prompt_stream.assert_called_once_with(
|
70
69
|
expand_meta=OMIT,
|
71
70
|
expand_raw=OMIT,
|
@@ -28,7 +28,7 @@ from vellum.workflows.events.node import (
|
|
28
28
|
NodeExecutionRejectedBody,
|
29
29
|
NodeExecutionStreamingBody,
|
30
30
|
)
|
31
|
-
from vellum.workflows.events.types import BaseEvent
|
31
|
+
from vellum.workflows.events.types import BaseEvent, ParentContext, WorkflowParentContext
|
32
32
|
from vellum.workflows.events.utils import is_terminal_event
|
33
33
|
from vellum.workflows.events.workflow import (
|
34
34
|
WorkflowExecutionFulfilledBody,
|
@@ -71,6 +71,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
71
71
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
72
72
|
external_inputs: Optional[ExternalInputsArg] = None,
|
73
73
|
cancel_signal: Optional[ThreadingEvent] = None,
|
74
|
+
parent_context: Optional[ParentContext] = None,
|
74
75
|
):
|
75
76
|
if state and external_inputs:
|
76
77
|
raise ValueError("Can only run a Workflow providing one of state or external inputs, not both")
|
@@ -115,6 +116,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
115
116
|
|
116
117
|
self._active_nodes_by_execution_id: Dict[UUID, BaseNode[StateType]] = {}
|
117
118
|
self._cancel_signal = cancel_signal
|
119
|
+
self._parent_context = parent_context
|
118
120
|
|
119
121
|
setattr(
|
120
122
|
self._initial_state,
|
@@ -143,6 +145,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
143
145
|
node_definition=node.__class__,
|
144
146
|
inputs=node._inputs,
|
145
147
|
),
|
148
|
+
parent=WorkflowParentContext(
|
149
|
+
span_id=span_id,
|
150
|
+
workflow_definition=self.workflow.__class__,
|
151
|
+
parent=self._parent_context
|
152
|
+
)
|
146
153
|
),
|
147
154
|
)
|
148
155
|
)
|
@@ -190,6 +197,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
190
197
|
output=BaseOutput(name=output.name),
|
191
198
|
invoked_ports=invoked_ports,
|
192
199
|
),
|
200
|
+
parent=WorkflowParentContext(
|
201
|
+
span_id=span_id,
|
202
|
+
workflow_definition=self.workflow.__class__,
|
203
|
+
parent=self._parent_context
|
204
|
+
)
|
193
205
|
),
|
194
206
|
)
|
195
207
|
)
|
@@ -214,6 +226,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
214
226
|
output=output,
|
215
227
|
invoked_ports=invoked_ports,
|
216
228
|
),
|
229
|
+
parent=WorkflowParentContext(
|
230
|
+
span_id=span_id,
|
231
|
+
workflow_definition=self.workflow.__class__,
|
232
|
+
parent=self._parent_context,
|
233
|
+
)
|
217
234
|
),
|
218
235
|
)
|
219
236
|
)
|
@@ -233,6 +250,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
233
250
|
output=output,
|
234
251
|
invoked_ports=invoked_ports,
|
235
252
|
),
|
253
|
+
parent=WorkflowParentContext(
|
254
|
+
span_id=span_id,
|
255
|
+
workflow_definition=self.workflow.__class__,
|
256
|
+
parent=self._parent_context,
|
257
|
+
)
|
236
258
|
),
|
237
259
|
)
|
238
260
|
)
|
@@ -259,6 +281,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
259
281
|
outputs=outputs,
|
260
282
|
invoked_ports=invoked_ports,
|
261
283
|
),
|
284
|
+
parent=WorkflowParentContext(
|
285
|
+
span_id=span_id,
|
286
|
+
workflow_definition=self.workflow.__class__,
|
287
|
+
parent=self._parent_context,
|
288
|
+
)
|
262
289
|
),
|
263
290
|
)
|
264
291
|
)
|
@@ -273,6 +300,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
273
300
|
node_definition=node.__class__,
|
274
301
|
error=e.error,
|
275
302
|
),
|
303
|
+
parent=WorkflowParentContext(
|
304
|
+
span_id=span_id,
|
305
|
+
workflow_definition=self.workflow.__class__,
|
306
|
+
parent=self._parent_context,
|
307
|
+
)
|
276
308
|
),
|
277
309
|
)
|
278
310
|
)
|
@@ -292,6 +324,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
292
324
|
code=VellumErrorCode.INTERNAL_ERROR,
|
293
325
|
),
|
294
326
|
),
|
327
|
+
parent=WorkflowParentContext(
|
328
|
+
span_id=span_id,
|
329
|
+
workflow_definition=self.workflow.__class__,
|
330
|
+
parent=self._parent_context
|
331
|
+
)
|
295
332
|
),
|
296
333
|
)
|
297
334
|
)
|
@@ -387,6 +424,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
387
424
|
workflow_definition=self.workflow.__class__,
|
388
425
|
inputs=self._initial_state.meta.workflow_inputs,
|
389
426
|
),
|
427
|
+
parent=self._parent_context,
|
390
428
|
)
|
391
429
|
|
392
430
|
def _stream_workflow_event(self, output: BaseOutput) -> WorkflowExecutionStreamingEvent:
|
@@ -397,6 +435,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
397
435
|
workflow_definition=self.workflow.__class__,
|
398
436
|
output=output,
|
399
437
|
),
|
438
|
+
parent=self._parent_context
|
400
439
|
)
|
401
440
|
|
402
441
|
def _fulfill_workflow_event(self, outputs: OutputsType) -> WorkflowExecutionFulfilledEvent:
|
@@ -407,6 +446,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
407
446
|
workflow_definition=self.workflow.__class__,
|
408
447
|
outputs=outputs,
|
409
448
|
),
|
449
|
+
parent=self._parent_context,
|
410
450
|
)
|
411
451
|
|
412
452
|
def _reject_workflow_event(self, error: VellumError) -> WorkflowExecutionRejectedEvent:
|
@@ -417,6 +457,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
417
457
|
workflow_definition=self.workflow.__class__,
|
418
458
|
error=error,
|
419
459
|
),
|
460
|
+
parent=self._parent_context,
|
420
461
|
)
|
421
462
|
|
422
463
|
def _resume_workflow_event(self) -> WorkflowExecutionResumedEvent:
|
@@ -436,6 +477,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
436
477
|
workflow_definition=self.workflow.__class__,
|
437
478
|
external_inputs=external_inputs,
|
438
479
|
),
|
480
|
+
parent=self._parent_context,
|
439
481
|
)
|
440
482
|
|
441
483
|
def _stream(self) -> None:
|
@@ -1,21 +1,21 @@
|
|
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=E2_T4MuUkfobYqla03ci2tRWQ7ZsaZA6wU340OCWRJ4,2788
|
4
4
|
vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
|
5
5
|
vellum_cli/config.py,sha256=urqMGQUkTntzdx-JV0P32FZVbqRZqgI-yFVmGPVblNI,3613
|
6
6
|
vellum_cli/image_push.py,sha256=lCQhkQu-IlIMHNSynmEl5KUzO_dHW27NTAFWnyvPpcs,4419
|
7
7
|
vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
|
8
|
-
vellum_cli/pull.py,sha256=
|
8
|
+
vellum_cli/pull.py,sha256=UApkIEq5BVq8Si_ZePyv5MMFUAspFetpec5Ix88WFOQ,3866
|
9
9
|
vellum_cli/push.py,sha256=HhXHqLvWKf3CUZJ3yIm-KeoBkgk73EXqVtGgWYcBcVk,5089
|
10
10
|
vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
|
11
|
-
vellum_cli/tests/test_pull.py,sha256=
|
11
|
+
vellum_cli/tests/test_pull.py,sha256=gIkbpd4l_yUmIoW8k3wrTpp6h7OFbB0KXdijIjAgffU,7416
|
12
12
|
vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
14
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
15
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
16
|
vellum_ee/workflows/display/base.py,sha256=yYH86aTPfOy7Zbzj9YBzU-yLUX3GBHVNxKqJFy7_wxk,1797
|
17
17
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=5XOcZJXYUgaLS55QgRJzyQ_W1tpeprjnYAeYVezqoGw,160
|
18
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
18
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=gmGGOXHydc158aS55JOHZtYvta6jj4ZCuue-9n8KvFY,5942
|
19
19
|
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=a62tpKcX0LdyZM2clwoGwpUfH3HMBbX1qiA0FFb_nk4,1649
|
20
20
|
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=A036wKuBjhtBGJKdkQSq4v1Rcm0cXHropJxKPuGWAsk,907
|
21
21
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -24,7 +24,7 @@ vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6m
|
|
24
24
|
vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
|
25
25
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=jQgm0dsQAlxZ0tYR_cv5pX-6wHMPQfFwmhI3DQ29S9Y,1432
|
26
26
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=awjKut2m7HoEmqewRfdR1dw8ufA0Q5mVG8V8jhaHlKw,8572
|
27
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
27
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=MASV7u0X4eiS3SzRWeBcbWZ_YgNlwwg5cM2vaFWjpqk,3915
|
28
28
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=v9g263oEtyL6ejp5ZfLrVfrcqU9gZwzuUI4yBuOScbI,12983
|
29
29
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=2HsghUtPBOQ-4sN-2jDOnbEuIwcsilDKO3f2o1WlYgw,2897
|
30
30
|
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=lr4d2uV3Lq8d22b5LCKbWMz_nU7Q0fvffcNQ7zx5Ygc,2163
|
@@ -71,7 +71,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
|
71
71
|
vellum/client/__init__.py,sha256=o4m7iRZWEV8rP3GkdaztHAjNmjxjWERlarviFoHzuKI,110927
|
72
72
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
73
73
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
74
|
-
vellum/client/core/client_wrapper.py,sha256
|
74
|
+
vellum/client/core/client_wrapper.py,sha256=-M3uhAr1iTDcPBsJsI4SD1DfT1LMZ1qdWYe2eEbN-N4,1890
|
75
75
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
76
76
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
77
77
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -1194,7 +1194,7 @@ vellum/workflows/events/__init__.py,sha256=vLwQuykMmbv0izdUvsamouRQKbmKX_r9Poo77
|
|
1194
1194
|
vellum/workflows/events/node.py,sha256=YQVWrE8LD5IxRTz_e0-0bXMhk3RZ75ZKTvAJZqH8dP0,5270
|
1195
1195
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1196
1196
|
vellum/workflows/events/tests/test_event.py,sha256=BbAeTohMdfAdpBea9fbi5nDXX6UQ7xASMv9jNuwOmDU,12704
|
1197
|
-
vellum/workflows/events/types.py,sha256=
|
1197
|
+
vellum/workflows/events/types.py,sha256=9apSwzmjVtuSDxEP2NhF8HbGGOP2BkMaqnOy__YH-oY,2863
|
1198
1198
|
vellum/workflows/events/utils.py,sha256=OwtE8dHOCX01jvLyoS1l18tYQ4ob0YJcUhUorKWLJh0,232
|
1199
1199
|
vellum/workflows/events/workflow.py,sha256=kPjZTh5hzCsSrVKLkXQNwzxhnUp3X4GkFA5veGatGlQ,4353
|
1200
1200
|
vellum/workflows/exceptions.py,sha256=Dc7mxstsaMDRmS91QEOiZCbZ1ZIRacnm0l5lQmC6WkA,401
|
@@ -1243,7 +1243,7 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
|
|
1243
1243
|
vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
|
1244
1244
|
vellum/workflows/nodes/core/error_node/node.py,sha256=hqBPHoLnhNrK9ITIaEzpnk47XYDbG6cmObz7oe78Ceg,944
|
1245
1245
|
vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
|
1246
|
-
vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=
|
1246
|
+
vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=mWugLOYnVmji-dSf8Rfizs_XKKfKWSskMbn6TRMDbaY,3063
|
1247
1247
|
vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
|
1248
1248
|
vellum/workflows/nodes/core/map_node/node.py,sha256=aPhV3niv_jWSwrZ2CwiRg0CDOM-09Fa6QqOPYNJMgRc,6206
|
1249
1249
|
vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1255,7 +1255,7 @@ vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=zANiu9-d-uIOP9t
|
|
1255
1255
|
vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
|
1256
1256
|
vellum/workflows/nodes/core/templating_node/custom_filters.py,sha256=Q0DahYRHP4KfaUXDt9XxN-DFLBrAxlv90yaVqxScoUw,264
|
1257
1257
|
vellum/workflows/nodes/core/templating_node/exceptions.py,sha256=cDp140PP4OnInW4qAvg3KqiSiF70C71UyEAKRBR1Abo,46
|
1258
|
-
vellum/workflows/nodes/core/templating_node/node.py,sha256=
|
1258
|
+
vellum/workflows/nodes/core/templating_node/node.py,sha256=uxdOk_vyb5ONoOWG4xMDo3_eAZS_JxnZi-cMlq2Fc4k,4499
|
1259
1259
|
vellum/workflows/nodes/core/templating_node/render.py,sha256=OpJp0NAH6qcEL6K9lxR0qjpFb75TYNttJR5iCos8tmg,1792
|
1260
1260
|
vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=L6F3Gw9doguj1TSKmAns-mzXvoRuRivaCFe3mhjo13E,551
|
1261
1261
|
vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
|
@@ -1264,7 +1264,7 @@ vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW
|
|
1264
1264
|
vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=u06GmVGln5lg-65YYFAmjlKwxuXbP8bKA8Qf_Zbq7ak,3764
|
1265
1265
|
vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
|
1266
1266
|
vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
|
1267
|
-
vellum/workflows/nodes/displayable/api_node/node.py,sha256
|
1267
|
+
vellum/workflows/nodes/displayable/api_node/node.py,sha256=mnoncJtxo5YhuFCR3_axpvCqrGQKLShvfU6xJO7Fa8I,2047
|
1268
1268
|
vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
|
1269
1269
|
vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
|
1270
1270
|
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=YQNoO5xgjd44EzOTe0EVAxWgMLoaWGx_68fxgoEBqto,2487
|
@@ -1273,15 +1273,15 @@ vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=et_cMMc
|
|
1273
1273
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
1274
1274
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
|
1275
1275
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=vbl6LRCrmlxFURcFGFMAEBJjgNGPB5q9AnQ8UITxYuI,4869
|
1276
|
-
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=
|
1276
|
+
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=KsKU9SNgjd1feiylSNS33DE0jKsJbYsaepF5wpCUzRU,4440
|
1277
1277
|
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=z8IQg-J46AbRMgFi92M08A220Wf7gU0xE3634ii3T1E,3565
|
1278
1278
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1279
|
-
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=
|
1279
|
+
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=zK-gxWmox8QZ84J11faUmasRozNKDIBv_86Gjq8uj7M,7975
|
1280
1280
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1281
1281
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1282
1282
|
vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
|
1283
1283
|
vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=pvkvMOIL94vDP3KUrQh0OF1lELjEFJ6HIDEz5kUqbzo,3377
|
1284
|
-
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=
|
1284
|
+
vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=JAoa0AUIDUHKuNVlsxlTD0RT5rX9K_7GAEACGz4XJas,613
|
1285
1285
|
vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
|
1286
1286
|
vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=SWfsEQ7G_y3yEnxzMhjtjHF4xZvFdFTds77LrFZHGUU,1020
|
1287
1287
|
vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
|
@@ -1289,21 +1289,21 @@ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=iH3ZPOstPku_
|
|
1289
1289
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1290
1290
|
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=vctOgn1gUYGIClknGciUjmDRFKlcEbIRZYvzgBaMiVo,3918
|
1291
1291
|
vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
|
1292
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=
|
1292
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=M4pUl2RO0a_094oCrtCmgo0rr_wKT_F3KN4y1eDFm4Y,2112
|
1293
1293
|
vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
|
1294
1294
|
vellum/workflows/nodes/displayable/merge_node/node.py,sha256=ZyPvcTgfPOneOm5Dc2kUOoPkwNJqwRPZSj232akXynA,324
|
1295
1295
|
vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
|
1296
1296
|
vellum/workflows/nodes/displayable/note_node/node.py,sha256=8rwP7RS1OOyQJ-ZuZBXTCtT2ZW8J6eGD59iKmq_pB24,258
|
1297
1297
|
vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
|
1298
|
-
vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=
|
1298
|
+
vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=1GzSTUFiqjly7Uz-xSsEI5a4NZNv8ZEI_1C2oYwQKEg,2513
|
1299
1299
|
vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
|
1300
1300
|
vellum/workflows/nodes/displayable/search_node/node.py,sha256=k7_S5yWFGZrIV1R5BsFIFSkOvmnbJK39pNmZD8XLCX4,1310
|
1301
1301
|
vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha256=9yYM6001YZeqI1VOk1QuEM_yrffk_EdsO7qaPzINKds,92
|
1302
|
-
vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=
|
1302
|
+
vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=JcMRX0dFYj3OETzkB7u3J6VFfRftYygHlFvrY266GYc,6776
|
1303
1303
|
vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1304
1304
|
vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=UwNCIrq2gDpObcosrpiIHFdHZLWarmlS7ez8GanIBDc,4649
|
1305
1305
|
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=AZtodUoX_Fl_ZXDinutAxlsDsfcxEYS0nFL0mcBylW8,6955
|
1306
|
-
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=
|
1306
|
+
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=t4ctc6MCwtvOOV4MG-xm-1w1A-ik0--_1es6yJ1qklU,2510
|
1307
1307
|
vellum/workflows/nodes/utils.py,sha256=zY0b5WjJtGwVPPLY3ffHUdRREPvyoNwmJDigz5jQRAI,812
|
1308
1308
|
vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfvh-ms1QE,94
|
1309
1309
|
vellum/workflows/outputs/base.py,sha256=aOll71CH_g1RaVO1wl038BqpWH70cD3XXSRxzH0YoRA,8002
|
@@ -1325,7 +1325,7 @@ vellum/workflows/references/workflow_input.py,sha256=epspVRZ9n_nxoTxI5Am3GDd2fpU
|
|
1325
1325
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1326
1326
|
vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
|
1327
1327
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1328
|
-
vellum/workflows/runner/runner.py,sha256=
|
1328
|
+
vellum/workflows/runner/runner.py,sha256=zqVjt4r7BuMou5oVFUglMPGshmQitUPfASBvATsfxGk,26770
|
1329
1329
|
vellum/workflows/runner/types.py,sha256=UQIGqOuCDgxEQpoJr4ut3wAnAjp4scDWhNhEhYFyLrw,466
|
1330
1330
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1331
1331
|
vellum/workflows/state/base.py,sha256=gm4pun9BzYaZbW8I1j7EriUIlAzqQkKT3IBbXPh3FkA,12663
|
@@ -1334,7 +1334,7 @@ vellum/workflows/state/encoder.py,sha256=kRrqwD0vFCiSRZR3rg8Sjkh8sDEerQQhlvmdSYQ
|
|
1334
1334
|
vellum/workflows/state/store.py,sha256=VYGBQgN1bpd1as5eGiouV_7scg8QsRs4_1aqZAGIsRQ,793
|
1335
1335
|
vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1336
1336
|
vellum/workflows/state/tests/test_state.py,sha256=BQjcdREIK1MPuGhivRUgpynVJLftjEpH9RG3cRKxQEY,3310
|
1337
|
-
vellum/workflows/types/__init__.py,sha256=
|
1337
|
+
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
1338
1338
|
vellum/workflows/types/core.py,sha256=llsHFE3XKnVEk_pYoK0s9WUdeninSU5Kmoi7dU4GX0c,1804
|
1339
1339
|
vellum/workflows/types/generics.py,sha256=ZkfoRhWs042i5IjA99v2wIhmh1u-Wieo3LzosgGWJVk,600
|
1340
1340
|
vellum/workflows/types/stack.py,sha256=RDSGLkcV612ge8UuAH9TZiEGXxJt0Av2-H5rfzrTVVI,1014
|
@@ -1350,8 +1350,8 @@ vellum/workflows/utils/vellum_variables.py,sha256=wbYejKwjy23ITDRfdGW4d181buvCbZ
|
|
1350
1350
|
vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528t75s,683
|
1351
1351
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1352
1352
|
vellum/workflows/workflows/base.py,sha256=QxIm0zCic8P-y0NNLdqgC1YKTu-3TmMJ-wH1nUylguA,13689
|
1353
|
-
vellum_ai-0.10.
|
1354
|
-
vellum_ai-0.10.
|
1355
|
-
vellum_ai-0.10.
|
1356
|
-
vellum_ai-0.10.
|
1357
|
-
vellum_ai-0.10.
|
1353
|
+
vellum_ai-0.10.8.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1354
|
+
vellum_ai-0.10.8.dist-info/METADATA,sha256=n5dQCMNsh-FaCOh5YMeDVzfusigZuus_UEjWSmFnK2Q,5128
|
1355
|
+
vellum_ai-0.10.8.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
1356
|
+
vellum_ai-0.10.8.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1357
|
+
vellum_ai-0.10.8.dist-info/RECORD,,
|
vellum_cli/__init__.py
CHANGED
@@ -42,11 +42,30 @@ def push(
|
|
42
42
|
|
43
43
|
@main.command()
|
44
44
|
@click.argument("module", required=False)
|
45
|
-
@click.option(
|
46
|
-
|
47
|
-
|
45
|
+
@click.option(
|
46
|
+
"--include-json",
|
47
|
+
is_flag=True,
|
48
|
+
help="Include the JSON representation of the Workflow in the pull response. Should only be used for debugging purposes.",
|
49
|
+
)
|
50
|
+
@click.option("--workflow-sandbox-id", type=str, help="Pull the Workflow from a specific Sandbox ID")
|
51
|
+
@click.option(
|
52
|
+
"--exclude-code",
|
53
|
+
is_flag=True,
|
54
|
+
help="Exclude the code definition of the Workflow from the pull response. Should only be used for debugging purposes.",
|
55
|
+
)
|
56
|
+
def pull(
|
57
|
+
module: Optional[str],
|
58
|
+
include_json: Optional[bool],
|
59
|
+
workflow_sandbox_id: Optional[str],
|
60
|
+
exclude_code: Optional[bool],
|
61
|
+
) -> None:
|
48
62
|
"""Pull Workflow from Vellum"""
|
49
|
-
pull_command(
|
63
|
+
pull_command(
|
64
|
+
module=module,
|
65
|
+
include_json=include_json,
|
66
|
+
workflow_sandbox_id=workflow_sandbox_id,
|
67
|
+
exclude_code=exclude_code,
|
68
|
+
)
|
50
69
|
|
51
70
|
|
52
71
|
@main.group(aliases=["images", "image"])
|
vellum_cli/pull.py
CHANGED
@@ -7,28 +7,38 @@ from typing import Optional
|
|
7
7
|
from dotenv import load_dotenv
|
8
8
|
|
9
9
|
from vellum.workflows.vellum_client import create_vellum_client
|
10
|
-
from vellum_cli.config import load_vellum_cli_config
|
10
|
+
from vellum_cli.config import WorkflowConfig, load_vellum_cli_config
|
11
11
|
from vellum_cli.logger import load_cli_logger
|
12
12
|
|
13
13
|
|
14
14
|
def pull_command(
|
15
|
-
module: Optional[str]
|
15
|
+
module: Optional[str] = None,
|
16
|
+
workflow_sandbox_id: Optional[str] = None,
|
17
|
+
include_json: Optional[bool] = None,
|
18
|
+
exclude_code: Optional[bool] = None,
|
16
19
|
) -> None:
|
17
20
|
load_dotenv()
|
18
21
|
logger = load_cli_logger()
|
19
22
|
config = load_vellum_cli_config()
|
20
23
|
|
21
|
-
if not config.workflows:
|
22
|
-
raise ValueError("No Workflows found in project to pull.")
|
23
|
-
|
24
|
-
if len(config.workflows) > 1 and not module:
|
25
|
-
raise ValueError("Multiple workflows found in project to pull. Pulling only a single workflow is supported.")
|
26
|
-
|
27
24
|
workflow_config = (
|
28
|
-
next((w for w in config.workflows if w.module == module), None)
|
25
|
+
next((w for w in config.workflows if w.module == module), None)
|
26
|
+
if module
|
27
|
+
else (config.workflows[0] if config.workflows else None)
|
29
28
|
)
|
29
|
+
save_lock_file = False
|
30
30
|
if workflow_config is None:
|
31
|
-
|
31
|
+
if module:
|
32
|
+
raise ValueError(f"No workflow config for '{module}' found in project to pull.")
|
33
|
+
elif workflow_sandbox_id:
|
34
|
+
workflow_config = WorkflowConfig(
|
35
|
+
workflow_sandbox_id=workflow_sandbox_id,
|
36
|
+
module=f"workflow_{workflow_sandbox_id.split('-')[0]}",
|
37
|
+
)
|
38
|
+
config.workflows.append(workflow_config)
|
39
|
+
save_lock_file = True
|
40
|
+
else:
|
41
|
+
raise ValueError("No workflow config found in project to pull from.")
|
32
42
|
|
33
43
|
if not workflow_config.workflow_sandbox_id:
|
34
44
|
raise ValueError("No workflow sandbox ID found in project to pull from.")
|
@@ -36,10 +46,10 @@ def pull_command(
|
|
36
46
|
logger.info(f"Pulling workflow into {workflow_config.module}")
|
37
47
|
client = create_vellum_client()
|
38
48
|
query_parameters = {}
|
39
|
-
if legacy_module:
|
40
|
-
query_parameters["legacyModule"] = legacy_module
|
41
49
|
if include_json:
|
42
50
|
query_parameters["include_json"] = include_json
|
51
|
+
if exclude_code:
|
52
|
+
query_parameters["exclude_code"] = exclude_code
|
43
53
|
|
44
54
|
response = client.workflows.pull(
|
45
55
|
workflow_config.workflow_sandbox_id,
|
@@ -81,6 +91,11 @@ def pull_command(
|
|
81
91
|
target.write(source.read().decode("utf-8"))
|
82
92
|
|
83
93
|
if include_json:
|
84
|
-
logger.warning(
|
94
|
+
logger.warning(
|
95
|
+
"The pulled JSON representation of the Workflow should be used for debugging purposely only. Its schema should be considered unstable and subject to change at any time."
|
96
|
+
)
|
97
|
+
|
98
|
+
if save_lock_file:
|
99
|
+
config.save()
|
85
100
|
|
86
101
|
logger.info(f"Successfully pulled Workflow into {workflow_config.module}")
|
vellum_cli/tests/test_pull.py
CHANGED
@@ -69,8 +69,33 @@ def test_pull(vellum_client, mock_module):
|
|
69
69
|
pull_command(module)
|
70
70
|
|
71
71
|
# THEN the workflow.py file is written to the module directory
|
72
|
-
|
73
|
-
|
72
|
+
workflow_py = os.path.join(temp_dir, *module.split("."), "workflow.py")
|
73
|
+
assert os.path.exists(workflow_py)
|
74
|
+
with open(workflow_py) as f:
|
75
|
+
assert f.read() == "print('hello')"
|
76
|
+
|
77
|
+
|
78
|
+
def test_pull__sandbox_id_with_no_config(vellum_client):
|
79
|
+
# GIVEN a workflow sandbox id
|
80
|
+
workflow_sandbox_id = "87654321-0000-0000-0000-000000000000"
|
81
|
+
|
82
|
+
# AND the workflow pull API call returns a zip file
|
83
|
+
vellum_client.workflows.pull.return_value = iter([zip_file_map({"workflow.py": "print('hello')"})])
|
84
|
+
|
85
|
+
# AND we are currently in a new directory
|
86
|
+
current_dir = os.getcwd()
|
87
|
+
temp_dir = tempfile.mkdtemp()
|
88
|
+
os.chdir(temp_dir)
|
89
|
+
|
90
|
+
# WHEN the user runs the pull command with the workflow sandbox id and no module
|
91
|
+
pull_command(workflow_sandbox_id=workflow_sandbox_id)
|
92
|
+
os.chdir(current_dir)
|
93
|
+
|
94
|
+
# THEN the pull api is called with exclude_code=True
|
95
|
+
vellum_client.workflows.pull.assert_called_once()
|
96
|
+
workflow_py = os.path.join(temp_dir, "workflow_87654321", "workflow.py")
|
97
|
+
assert os.path.exists(workflow_py)
|
98
|
+
with open(workflow_py) as f:
|
74
99
|
assert f.read() == "print('hello')"
|
75
100
|
|
76
101
|
|
@@ -168,3 +193,21 @@ def test_pull__include_json(vellum_client, mock_module):
|
|
168
193
|
vellum_client.workflows.pull.assert_called_once()
|
169
194
|
call_args = vellum_client.workflows.pull.call_args.kwargs
|
170
195
|
assert call_args["request_options"]["additional_query_parameters"] == {"include_json": True}
|
196
|
+
|
197
|
+
|
198
|
+
def test_pull__exclude_code(vellum_client, mock_module):
|
199
|
+
# GIVEN a module on the user's filesystem
|
200
|
+
_, module = mock_module
|
201
|
+
|
202
|
+
# AND the workflow pull API call returns a zip file
|
203
|
+
vellum_client.workflows.pull.return_value = iter(
|
204
|
+
[zip_file_map({"workflow.py": "print('hello')", "workflow.json": "{}"})]
|
205
|
+
)
|
206
|
+
|
207
|
+
# WHEN the user runs the pull command
|
208
|
+
pull_command(module, exclude_code=True)
|
209
|
+
|
210
|
+
# THEN the pull api is called with exclude_code=True
|
211
|
+
vellum_client.workflows.pull.assert_called_once()
|
212
|
+
call_args = vellum_client.workflows.pull.call_args.kwargs
|
213
|
+
assert call_args["request_options"]["additional_query_parameters"] == {"exclude_code": True}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from functools import cached_property
|
2
2
|
import inspect
|
3
3
|
from uuid import UUID
|
4
|
-
from typing import TYPE_CHECKING, Any, Dict, Generic, Optional, Type, TypeVar, get_args, get_origin
|
4
|
+
from typing import TYPE_CHECKING, Any, Dict, Generic, Optional, Type, TypeVar, cast, get_args, get_origin
|
5
5
|
|
6
6
|
from vellum.workflows.nodes.bases.base import BaseNode
|
7
7
|
from vellum.workflows.nodes.utils import get_wrapped_node, has_wrapped_node
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from uuid import UUID
|
2
|
-
from typing import ClassVar, Generic, Optional, TypeVar
|
2
|
+
from typing import ClassVar, Dict, Generic, Optional, TypeVar
|
3
3
|
|
4
4
|
from vellum.workflows.nodes.displayable.code_execution_node import CodeExecutionNode
|
5
5
|
from vellum.workflows.nodes.displayable.code_execution_node.utils import read_file_from_path
|
@@ -20,6 +20,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
20
20
|
output_id: ClassVar[Optional[UUID]] = None
|
21
21
|
log_output_id: ClassVar[Optional[UUID]] = None
|
22
22
|
|
23
|
+
node_input_ids_by_name: ClassVar[Dict[str, UUID]] = {}
|
24
|
+
|
23
25
|
def serialize(
|
24
26
|
self, display_context: WorkflowDisplayContext, error_output_id: Optional[UUID] = None, **kwargs
|
25
27
|
) -> JsonObject:
|
@@ -27,6 +29,19 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
27
29
|
node_id = self.node_id
|
28
30
|
|
29
31
|
code = read_file_from_path(raise_if_descriptor(node.filepath))
|
32
|
+
code_inputs = raise_if_descriptor(node.code_inputs)
|
33
|
+
|
34
|
+
inputs = [
|
35
|
+
create_node_input(
|
36
|
+
node_id=node_id,
|
37
|
+
input_name=variable_name,
|
38
|
+
value=variable_value,
|
39
|
+
display_context=display_context,
|
40
|
+
input_id=self.node_input_ids_by_name.get(variable_name),
|
41
|
+
)
|
42
|
+
for variable_name, variable_value in code_inputs.items()
|
43
|
+
]
|
44
|
+
|
30
45
|
code_node_input = create_node_input(
|
31
46
|
node_id=node_id,
|
32
47
|
input_name="code",
|
@@ -41,7 +56,7 @@ class BaseCodeExecutionNodeDisplay(BaseNodeVellumDisplay[_CodeExecutionNodeType]
|
|
41
56
|
display_context=display_context,
|
42
57
|
input_id=self.runtime_input_id,
|
43
58
|
)
|
44
|
-
inputs
|
59
|
+
inputs.extend([code_node_input, runtime_node_input])
|
45
60
|
|
46
61
|
packages = raise_if_descriptor(node.packages)
|
47
62
|
|
File without changes
|
File without changes
|
File without changes
|