vellum-ai 1.0.5__py3-none-any.whl → 1.0.7__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 +0 -8
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/types/__init__.py +0 -8
- vellum/client/types/organization_read.py +1 -2
- vellum/workflows/events/context.py +111 -0
- vellum/workflows/integrations/__init__.py +0 -0
- vellum/workflows/integrations/composio_service.py +138 -0
- vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py +8 -2
- vellum/workflows/nodes/displayable/bases/api_node/node.py +36 -9
- vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +124 -0
- vellum/workflows/nodes/displayable/tool_calling_node/node.py +2 -2
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +63 -58
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +147 -2
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +61 -41
- vellum/workflows/types/definition.py +4 -2
- vellum/workflows/utils/functions.py +29 -2
- vellum/workflows/utils/tests/test_functions.py +115 -1
- {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.7.dist-info}/METADATA +1 -3
- {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.7.dist-info}/RECORD +29 -33
- vellum_cli/push.py +11 -2
- vellum_cli/tests/test_push.py +57 -1
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +16 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +3 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py +8 -2
- vellum/client/types/name_enum.py +0 -7
- vellum/client/types/organization_limit_config.py +0 -25
- vellum/client/types/quota.py +0 -22
- vellum/client/types/vembda_service_tier_enum.py +0 -5
- vellum/types/name_enum.py +0 -3
- vellum/types/organization_limit_config.py +0 -3
- vellum/types/quota.py +0 -3
- vellum/types/vembda_service_tier_enum.py +0 -3
- vellum/workflows/nodes/displayable/tool_calling_node/composio_service.py +0 -83
- {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.7.dist-info}/LICENSE +0 -0
- {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.7.dist-info}/WHEEL +0 -0
- {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.7.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
import dataclasses
|
2
2
|
import inspect
|
3
|
-
from typing import TYPE_CHECKING, Any, Callable, Dict, Literal, Optional, Type, Union, get_args, get_origin
|
3
|
+
from typing import TYPE_CHECKING, Annotated, Any, Callable, Dict, Literal, Optional, Type, Union, get_args, get_origin
|
4
4
|
|
5
5
|
from pydantic import BaseModel
|
6
6
|
from pydantic_core import PydanticUndefined
|
@@ -53,6 +53,21 @@ def compile_annotation(annotation: Optional[Any], defs: dict[str, Any]) -> dict:
|
|
53
53
|
item_type = get_args(annotation)[0]
|
54
54
|
return {"type": "array", "items": compile_annotation(item_type, defs)}
|
55
55
|
|
56
|
+
if get_origin(annotation) is tuple:
|
57
|
+
args = get_args(annotation)
|
58
|
+
if len(args) == 2 and args[1] is Ellipsis:
|
59
|
+
# Tuple[int, ...] with homogeneous items
|
60
|
+
return {"type": "array", "items": compile_annotation(args[0], defs)}
|
61
|
+
else:
|
62
|
+
# Tuple[int, str] with fixed length items
|
63
|
+
result = {
|
64
|
+
"type": "array",
|
65
|
+
"prefixItems": [compile_annotation(arg, defs) for arg in args],
|
66
|
+
"minItems": len(args),
|
67
|
+
"maxItems": len(args),
|
68
|
+
}
|
69
|
+
return result
|
70
|
+
|
56
71
|
if dataclasses.is_dataclass(annotation):
|
57
72
|
if annotation.__name__ not in defs:
|
58
73
|
properties = {}
|
@@ -127,7 +142,19 @@ def compile_function_definition(function: Callable) -> FunctionDefinition:
|
|
127
142
|
required = []
|
128
143
|
defs: dict[str, Any] = {}
|
129
144
|
for param in signature.parameters.values():
|
130
|
-
|
145
|
+
# Check if parameter uses Annotated type hint
|
146
|
+
if get_origin(param.annotation) is Annotated:
|
147
|
+
args = get_args(param.annotation)
|
148
|
+
actual_type = args[0]
|
149
|
+
# Extract description from metadata
|
150
|
+
description = args[1] if len(args) > 1 and isinstance(args[1], str) else None
|
151
|
+
|
152
|
+
properties[param.name] = compile_annotation(actual_type, defs)
|
153
|
+
if description:
|
154
|
+
properties[param.name]["description"] = description
|
155
|
+
else:
|
156
|
+
properties[param.name] = compile_annotation(param.annotation, defs)
|
157
|
+
|
131
158
|
if param.default is inspect.Parameter.empty:
|
132
159
|
required.append(param.name)
|
133
160
|
else:
|
@@ -2,7 +2,7 @@ import pytest
|
|
2
2
|
from dataclasses import dataclass
|
3
3
|
from enum import Enum
|
4
4
|
from unittest.mock import Mock
|
5
|
-
from typing import Dict, List, Literal, Optional, Union
|
5
|
+
from typing import Annotated, Dict, List, Literal, Optional, Tuple, Union
|
6
6
|
|
7
7
|
from pydantic import BaseModel
|
8
8
|
|
@@ -612,3 +612,117 @@ def test_compile_function_definition__literal_type_not_in_map():
|
|
612
612
|
compiled_function = compile_function_definition(my_function)
|
613
613
|
assert isinstance(compiled_function.parameters, dict)
|
614
614
|
assert compiled_function.parameters["properties"]["a"] == {"enum": [MyEnum.FOO, MyEnum.BAR]}
|
615
|
+
|
616
|
+
|
617
|
+
def test_compile_function_definition__annotated_descriptions():
|
618
|
+
# GIVEN a function with annotated parameters that include descriptions
|
619
|
+
def my_function(
|
620
|
+
bar: Annotated[str, "My bar parameter"],
|
621
|
+
other: Annotated[int, "My other parameter"],
|
622
|
+
regular_param: str,
|
623
|
+
optional_param: Annotated[bool, "Optional boolean parameter"] = True,
|
624
|
+
):
|
625
|
+
"""Test function with annotated parameters."""
|
626
|
+
pass
|
627
|
+
|
628
|
+
# WHEN compiling the function
|
629
|
+
compiled_function = compile_function_definition(my_function)
|
630
|
+
|
631
|
+
# THEN it should return the compiled function definition with descriptions
|
632
|
+
assert compiled_function == FunctionDefinition(
|
633
|
+
name="my_function",
|
634
|
+
description="Test function with annotated parameters.",
|
635
|
+
parameters={
|
636
|
+
"type": "object",
|
637
|
+
"properties": {
|
638
|
+
"bar": {"type": "string", "description": "My bar parameter"},
|
639
|
+
"other": {"type": "integer", "description": "My other parameter"},
|
640
|
+
"regular_param": {"type": "string"},
|
641
|
+
"optional_param": {"type": "boolean", "description": "Optional boolean parameter", "default": True},
|
642
|
+
},
|
643
|
+
"required": ["bar", "other", "regular_param"],
|
644
|
+
},
|
645
|
+
)
|
646
|
+
|
647
|
+
|
648
|
+
def test_compile_function_definition__annotated_without_description():
|
649
|
+
# GIVEN a function with annotated parameters but no description metadata
|
650
|
+
def my_function(param: Annotated[str, None]):
|
651
|
+
pass
|
652
|
+
|
653
|
+
# WHEN compiling the function
|
654
|
+
compiled_function = compile_function_definition(my_function)
|
655
|
+
|
656
|
+
# THEN it should return the compiled function definition without description
|
657
|
+
assert compiled_function == FunctionDefinition(
|
658
|
+
name="my_function",
|
659
|
+
parameters={
|
660
|
+
"type": "object",
|
661
|
+
"properties": {
|
662
|
+
"param": {"type": "string"},
|
663
|
+
},
|
664
|
+
"required": ["param"],
|
665
|
+
},
|
666
|
+
)
|
667
|
+
|
668
|
+
|
669
|
+
def test_compile_function_definition__annotated_complex_types():
|
670
|
+
# GIVEN a function with annotated types
|
671
|
+
def my_function(
|
672
|
+
location: Annotated[Literal["New York", "Portland"], "The location you found"],
|
673
|
+
items: Annotated[List[str], "List of string items"],
|
674
|
+
config: Annotated[Dict[str, int], "Configuration mapping"],
|
675
|
+
):
|
676
|
+
pass
|
677
|
+
|
678
|
+
# WHEN compiling the function
|
679
|
+
compiled_function = compile_function_definition(my_function)
|
680
|
+
|
681
|
+
# THEN it should return the compiled function definition with descriptions for complex types
|
682
|
+
assert compiled_function == FunctionDefinition(
|
683
|
+
name="my_function",
|
684
|
+
parameters={
|
685
|
+
"type": "object",
|
686
|
+
"properties": {
|
687
|
+
"location": {
|
688
|
+
"type": "string",
|
689
|
+
"enum": ["New York", "Portland"],
|
690
|
+
"description": "The location you found",
|
691
|
+
},
|
692
|
+
"items": {"type": "array", "items": {"type": "string"}, "description": "List of string items"},
|
693
|
+
"config": {
|
694
|
+
"type": "object",
|
695
|
+
"additionalProperties": {"type": "integer"},
|
696
|
+
"description": "Configuration mapping",
|
697
|
+
},
|
698
|
+
},
|
699
|
+
"required": ["location", "items", "config"],
|
700
|
+
},
|
701
|
+
)
|
702
|
+
|
703
|
+
|
704
|
+
@pytest.mark.parametrize(
|
705
|
+
"annotation,expected_schema",
|
706
|
+
[
|
707
|
+
(
|
708
|
+
Tuple[int, ...],
|
709
|
+
{"type": "array", "items": {"type": "integer"}},
|
710
|
+
),
|
711
|
+
(
|
712
|
+
Tuple[int, str],
|
713
|
+
{
|
714
|
+
"type": "array",
|
715
|
+
"prefixItems": [{"type": "integer"}, {"type": "string"}],
|
716
|
+
"minItems": 2,
|
717
|
+
"maxItems": 2,
|
718
|
+
},
|
719
|
+
),
|
720
|
+
],
|
721
|
+
)
|
722
|
+
def test_compile_function_definition__tuples(annotation, expected_schema):
|
723
|
+
def my_function(a: annotation): # type: ignore
|
724
|
+
pass
|
725
|
+
|
726
|
+
compiled_function = compile_function_definition(my_function)
|
727
|
+
assert isinstance(compiled_function.parameters, dict)
|
728
|
+
assert compiled_function.parameters["properties"]["a"] == expected_schema
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: vellum-ai
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.7
|
4
4
|
Summary:
|
5
5
|
License: MIT
|
6
6
|
Requires-Python: >=3.9,<4.0
|
@@ -22,8 +22,6 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
22
|
Classifier: Typing :: Typed
|
23
23
|
Requires-Dist: Jinja2 (>=3.1.0,<4.0.0)
|
24
24
|
Requires-Dist: click (>=8.1.7,<9.0.0)
|
25
|
-
Requires-Dist: composio-client (>=1.5.0,<2.0.0)
|
26
|
-
Requires-Dist: composio-core (>=0.7.20,<1.0.0)
|
27
25
|
Requires-Dist: docker (>=7.1.0,<8.0.0)
|
28
26
|
Requires-Dist: httpx (>=0.21.2)
|
29
27
|
Requires-Dist: openai (>=1.0.0,<2.0.0)
|
@@ -8,7 +8,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
|
10
10
|
vellum_cli/pull.py,sha256=udYyPlJ6VKDdh78rApNJOZgxHl82fcV6iGnRPSdX1LY,14750
|
11
|
-
vellum_cli/push.py,sha256=
|
11
|
+
vellum_cli/push.py,sha256=d1947A_QwFKSZyDimK6dEK1abf_o8e1uzjpI_A_SCwM,11459
|
12
12
|
vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
vellum_cli/tests/conftest.py,sha256=wx3PlJjVB0HRf5dr2b_idOIw27WPPl0J0FNbhIJJaVk,1689
|
14
14
|
vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
|
@@ -18,7 +18,7 @@ vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ
|
|
18
18
|
vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
|
19
19
|
vellum_cli/tests/test_ping.py,sha256=b3aQLd-N59_8w2rRiWqwpB1rlHaKEYVbAj1Y3hi7A-g,2605
|
20
20
|
vellum_cli/tests/test_pull.py,sha256=hxMbW_j0weDDrkzVGpvLpFcwNQdn-fxTv4wBHeYizzc,49904
|
21
|
-
vellum_cli/tests/test_push.py,sha256=
|
21
|
+
vellum_cli/tests/test_push.py,sha256=H9ZU0_E-I1F98SBvj-I_1ooe3RzOlhMTTmEFg6CRrYY,40384
|
22
22
|
vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
23
23
|
vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -36,7 +36,7 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
|
|
36
36
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
37
37
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=lGS-C9cd-nlYVZuaXmArJUJFdwPUMLNJwf1bpa7Ufys,9400
|
38
38
|
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=FHhPoGmmny4Xcxi2pm12Sk3ZOREanWEVrOWcjRhncH4,6337
|
39
|
-
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=
|
39
|
+
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=zG0u5Wvvo8B6yM0JSWtDdLxsULus3VD3cxYVOHRAgAU,4635
|
40
40
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=OEw8QRPliL4P8J6oEZdQH8Oc-0u7aFa_Jqx0RyL6F-M,11656
|
41
41
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=YhMsi2TG1zSR8E7IpxzzSncOyVLcvqTuGa3mr4RqHd8,2364
|
42
42
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=zo-nalsuayMqeb2GwR2OB9SFK3y2U5aG-rtwrsjdasQ,3089
|
@@ -53,7 +53,7 @@ vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=w
|
|
53
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_api_node.py,sha256=DQAtsabvn6BE6xWwKNHzMOppzoy1-1dssNnrwbHUdRU,1490
|
56
|
-
vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=
|
56
|
+
vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=JFjhOABsFwR1LHZBSU5O7uzPdAuvkOvc0qNDsEH_CSY,6021
|
57
57
|
vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWMpJ3EN_DPjHsr9ODJWCRVcUa5hZBn-5T2GiHU,1665
|
58
58
|
vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py,sha256=SKOYan-dxY4gsO0R4JyQUyWrABHBN8XImKw9Eeo4wGo,3535
|
59
59
|
vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
|
@@ -94,9 +94,9 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_
|
|
94
94
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=XWrhHg_acLsRHwjstBAii9Pmes9oXFtAUWSAVF1oSBc,11225
|
95
95
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=V8b6gKghLlO7PJI8xeNdnfn8aII0W_IFQvSQBQM62UQ,7721
|
96
96
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=hDWtKXmGI1CKhTwTNqpu_d5RkE5n7SolMLtgd87KqTI,3856
|
97
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=
|
97
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=gonapBCyDDt3qc7U02PCuKyPS8f3YiSAZ7QD86CH1Fw,3794
|
98
98
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=4t1lkN2nsZF6lFqP6QnskUQWJlhasF8C2_f6atzk8ZY,26298
|
99
|
-
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=
|
99
|
+
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=B0rDsCvO24qPp0gkmj8SdTDY5CxZYkvKwknsKBuAPyA,10017
|
100
100
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=mova0sPD3evHiHIN1O0VynxlCp-uOcEIKve5Pd_oCDg,4069
|
101
101
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
|
102
102
|
vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=J4ouI8KxbMfxQP2Zq_9cWMGYgbjCWmKzjCJEtnSJb0I,5829
|
@@ -140,12 +140,12 @@ vellum_ee/workflows/tests/test_display_meta.py,sha256=PkXJVnMZs9GNooDkd59n4YTBAX
|
|
140
140
|
vellum_ee/workflows/tests/test_serialize_module.py,sha256=EVrCRAP0lpvd0GIDlg2tnGfJzDNooNDXPfGFPLAqmbI,1870
|
141
141
|
vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
|
142
142
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
143
|
-
vellum/__init__.py,sha256=
|
143
|
+
vellum/__init__.py,sha256=tD6Fm-ml3pDVFPucRvSr5p0uRoEodHXxs6FHATqQU5o,43103
|
144
144
|
vellum/client/README.md,sha256=Dle5iytCXxP1pNeNd7uZyhFo0rl7tp7vU7s8gmi10OQ,4863
|
145
145
|
vellum/client/__init__.py,sha256=KmkyOgReuTsjmXF3WC_dPQ9QqJgYrB3Sr8_LcSUIQyI,125258
|
146
146
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
147
147
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
148
|
-
vellum/client/core/client_wrapper.py,sha256=
|
148
|
+
vellum/client/core/client_wrapper.py,sha256=4HIoFVgVHLgCMAKnGSlXru4ZVIHjc4LSqpYHg9GPlAI,2383
|
149
149
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
150
150
|
vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
|
151
151
|
vellum/client/core/http_client.py,sha256=cKs2w0ybDBk1wHQf-fTALm_MmvaMe3cZKcYJxqmCxkE,19539
|
@@ -215,7 +215,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
|
|
215
215
|
vellum/client/resources/workspace_secrets/client.py,sha256=l1FOj0f-IB5_oQ7iWiHopFK3lDXBqiaIc9g10W9PHFU,8381
|
216
216
|
vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
217
217
|
vellum/client/resources/workspaces/client.py,sha256=61eFS8USOtHf4cFoT3dZmAMs6KGAVPbXjAolws2ftsQ,3683
|
218
|
-
vellum/client/types/__init__.py,sha256=
|
218
|
+
vellum/client/types/__init__.py,sha256=rmRNYcVM3VMP28jEp-ChnFQKPgHJxSLoA_07CSL_jyc,65257
|
219
219
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
220
220
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
221
221
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=oDG60TpwK1YNSKhRsBbiP2O3ZF9PKR-M9chGIfKw4R4,1004
|
@@ -429,7 +429,6 @@ vellum/client/types/metric_node_result.py,sha256=YdKq1DZiBD1RBtjyMejImylv3BqrwY8
|
|
429
429
|
vellum/client/types/ml_model_read.py,sha256=Vr5KjaS2Tca0GXsltfSYQpuyGYpgIahPEFfS6HfFGSo,706
|
430
430
|
vellum/client/types/ml_model_usage.py,sha256=WcZ2F1hfxyTwe-spOVwv-qJYDjs4hf9sn7BF2abawPo,910
|
431
431
|
vellum/client/types/ml_model_usage_wrapper.py,sha256=Vi7urVmTn1E_aZV6TxnW-qjDayRv7A_6JDk84KqAIa0,645
|
432
|
-
vellum/client/types/name_enum.py,sha256=5y6CNh1LNmWC_CTje_rD-N53Z57PckS9avbCxmqjAMk,210
|
433
432
|
vellum/client/types/named_scenario_input_chat_history_variable_value_request.py,sha256=aVZmAxu-47c34NyhSkfi9tQqIPy29cdJ7Pb4MIgKeNw,862
|
434
433
|
vellum/client/types/named_scenario_input_json_variable_value_request.py,sha256=UgnKv70zFviv1kl4nM7aM7IFA-7xyDOtglW4Y3GBZ28,757
|
435
434
|
vellum/client/types/named_scenario_input_request.py,sha256=Pi8l377OHvKBwvPu9slZ1omf_NJ9S1mCQ5Wr-Ux5KVg,611
|
@@ -501,8 +500,7 @@ vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py,sha256=T_-P7qGj
|
|
501
500
|
vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py,sha256=-lwNeWj7ExP-JLncUp1Uyd20FxweVIDu-aEnenPB98A,841
|
502
501
|
vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py,sha256=c4vNlR6lRvUjq-67M06sroDMNMG_qC4JUBqwmKEJQ2I,812
|
503
502
|
vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py,sha256=FdpkkNBGgRwfqFjBwpfH4t2zKIM0pIYminX2iZQUzvY,841
|
504
|
-
vellum/client/types/
|
505
|
-
vellum/client/types/organization_read.py,sha256=c5Wl5KY6plC7DuPJq6zAK_UTH2XVhT7H8OdEtxLqN98,854
|
503
|
+
vellum/client/types/organization_read.py,sha256=QDFpX4pZCjGSRXZ6FF65SDzRxFqkI87DEEUXtaVoTAs,837
|
506
504
|
vellum/client/types/paginated_container_image_read_list.py,sha256=7lwIgs1q7Z0xDYPGWPnjSNC1kU_peu79CotzaaQfRdA,801
|
507
505
|
vellum/client/types/paginated_deployment_release_tag_read_list.py,sha256=hp7D74CxPY14dEPRZ-fnTCwp63upxkYquL1e74oYXh4,826
|
508
506
|
vellum/client/types/paginated_document_index_read_list.py,sha256=bO7pm3KCZi5LDO17YXgr_lUF9SRdAfMu6wOutX91ANw,797
|
@@ -542,7 +540,6 @@ vellum/client/types/prompt_request_json_input.py,sha256=vLhwvCWL_yjVfDzT4921xK4Q
|
|
542
540
|
vellum/client/types/prompt_request_string_input.py,sha256=8GSFhtN3HeYssbDRY7B5SCh5Qrp67340D9c3oINpCmw,714
|
543
541
|
vellum/client/types/prompt_settings.py,sha256=gITevU-SWiStXFKLfpwG5dQJ-bic5CxnM0OHsT9KR0s,635
|
544
542
|
vellum/client/types/prompt_version_build_config_sandbox.py,sha256=SXU62bAueVpoWo178bLIMYi8aNVpsBGTtOQxHcg6Dmo,678
|
545
|
-
vellum/client/types/quota.py,sha256=3NXzWkznGopK9AdoltadaF-BzfGFbC_WYbvqulweilc,672
|
546
543
|
vellum/client/types/raw_prompt_execution_overrides_request.py,sha256=x4Chkm_NxXySOEyA6s6J_mhhiM91KCcQbu6pQETB8RI,927
|
547
544
|
vellum/client/types/reducto_chunker_config.py,sha256=by_Dj0hZPkLQAf7l1KAudRB8X2XnlfHiRTsyiR-DTRY,654
|
548
545
|
vellum/client/types/reducto_chunker_config_request.py,sha256=RnulU2a_PUtvRE2qhARQhsCkWI--K_MYkobzLNRGEz4,661
|
@@ -740,7 +737,6 @@ vellum/client/types/vellum_variable.py,sha256=BDcccISJsycsrW3E5A5RTIOfxS_83ofkle
|
|
740
737
|
vellum/client/types/vellum_variable_extensions.py,sha256=PsrRo0STOKhxrkSFRrOXCPlf1x5Uxpy3vVMJz02O20E,685
|
741
738
|
vellum/client/types/vellum_variable_type.py,sha256=epYV-PY0NkvUntKzgzqelWMq9Dzmh7Y32c19GB_2mh0,411
|
742
739
|
vellum/client/types/vellum_workflow_execution_event.py,sha256=H8rP3_6a6LTvemoHfsmI2THpTRf8PYrZQcjoeTzf-44,934
|
743
|
-
vellum/client/types/vembda_service_tier_enum.py,sha256=zIQq6j0BNu1niKkK_G4a_hE5kqkZ5s43k4g5Zj2qiAI,161
|
744
740
|
vellum/client/types/workflow_deployment_event_executions_response.py,sha256=_X9hfsfpCf7DaQpfg83AAcbadZxEVi1NKNf2PZ7PRY8,1190
|
745
741
|
vellum/client/types/workflow_deployment_history_item.py,sha256=w5yqAtmYWw8kTljYEVBa8-fLxKsrBA8Img7IC3GjZG4,1226
|
746
742
|
vellum/client/types/workflow_deployment_parent_context.py,sha256=QwGpZnSNX6RCfkjbxmfln8QefrP8lFHkZ1DAC-oj9-Q,1699
|
@@ -1130,7 +1126,6 @@ vellum/types/metric_node_result.py,sha256=Q_bUgbdRnSP26nEcJ-vZD7k2oLIcThN3JjW9hX
|
|
1130
1126
|
vellum/types/ml_model_read.py,sha256=d_CPwZ3bhXtC8c5jwXkuNVvobDqPI-I_byZ6WnVla1Q,151
|
1131
1127
|
vellum/types/ml_model_usage.py,sha256=Q-7_W6GfL8rMnqjhSiZirw8oB60GFc0p_mNYdZdlMjY,152
|
1132
1128
|
vellum/types/ml_model_usage_wrapper.py,sha256=anoup7KWug4Mrt-JhsB_S1zuKcdq9ncXsz3y8t_I52g,160
|
1133
|
-
vellum/types/name_enum.py,sha256=YrE8Nx14GVcIUZgM_ackw2n9qYXTX0wQywYGKUdUOSY,147
|
1134
1129
|
vellum/types/named_scenario_input_chat_history_variable_value_request.py,sha256=Sfwba1cvocP8UR6CCDEjE7HsI5Xs6Dopk1W88Zf1ng8,194
|
1135
1130
|
vellum/types/named_scenario_input_json_variable_value_request.py,sha256=1kZ4Y7TttH8O897rmtkEIMraql5dTIyEVvFZn0I5Py8,186
|
1136
1131
|
vellum/types/named_scenario_input_request.py,sha256=E7TcL4YRw7dcEyMEws3AsiCw7GSHnrXpktBKOoVSytA,166
|
@@ -1202,7 +1197,6 @@ vellum/types/open_ai_vectorizer_text_embedding_3_small.py,sha256=5gsPjLdttszz8Nq
|
|
1202
1197
|
vellum/types/open_ai_vectorizer_text_embedding_3_small_request.py,sha256=kqph8wL-8Cn6vVoJMEYIkFc4kvERvF3pzHjUQxFZAOM,187
|
1203
1198
|
vellum/types/open_ai_vectorizer_text_embedding_ada_002.py,sha256=VTile8qzbXfjXgALK7Lr58U4sWGcEOWJ830gdHNpJhY,179
|
1204
1199
|
vellum/types/open_ai_vectorizer_text_embedding_ada_002_request.py,sha256=345s9jJCbxvgIWb_ejW2pVWOz51d4NnkiyWB4J0qQpE,187
|
1205
|
-
vellum/types/organization_limit_config.py,sha256=wJoKIE_HPe0jbUVQx18QCnNVdAkhK05TAZxu8uSPtQY,163
|
1206
1200
|
vellum/types/organization_read.py,sha256=3VdzuCxr_jNaXSL8P_Imk6vNK6BaJ6b1TX1IHKMiQ_Y,155
|
1207
1201
|
vellum/types/paginated_container_image_read_list.py,sha256=dKnIbX8_sYqWo6tS0W694jojAWKybB8pe9Zw8-hvlo8,173
|
1208
1202
|
vellum/types/paginated_deployment_release_tag_read_list.py,sha256=B-fCqNhU5KiYqIvnrybZr7MZCyOBmihHkrDsEhEzOjg,180
|
@@ -1243,7 +1237,6 @@ vellum/types/prompt_request_json_input.py,sha256=OlXiUPchxe184SWbmIvbmARpY9YWPi8
|
|
1243
1237
|
vellum/types/prompt_request_string_input.py,sha256=1V-fTtuyhEw5H4EpqIkCqX7aHGJivUzzc_LMeszPjnc,165
|
1244
1238
|
vellum/types/prompt_settings.py,sha256=6_AzrH73lBHSDxKxidI6zhDjAeWh_nZcaIGlrzJhypU,153
|
1245
1239
|
vellum/types/prompt_version_build_config_sandbox.py,sha256=thz3Ty7FMZr1NWrrtPS1QN32kPpZo9hg9VIN6c6biuc,173
|
1246
|
-
vellum/types/quota.py,sha256=hhIYDiHDilEV0FJ7LSD-TTzLaDL0kfuJIA9tReithZg,143
|
1247
1240
|
vellum/types/raw_prompt_execution_overrides_request.py,sha256=NvCoHH8ehO0UortbDuDQvwOdxQzXw0_PMGsJc7DtvoA,176
|
1248
1241
|
vellum/types/reducto_chunker_config.py,sha256=6hu2m_WTavxTfKs46BWZGiuOsLE4HYgoP-VdDGS6KTI,160
|
1249
1242
|
vellum/types/reducto_chunker_config_request.py,sha256=KjIZYQu27OIA--0e6RjgUwWmY3iE8s9rlehdhfZRzhQ,168
|
@@ -1441,7 +1434,6 @@ vellum/types/vellum_variable.py,sha256=rmjuD8hMydLF480--5tWlHbvu6qNaz0Hs9bSrJ8DP
|
|
1441
1434
|
vellum/types/vellum_variable_extensions.py,sha256=wwKDv_yxtP7gQmfz5HF3zab-FOLt-0OMUYIsHgvrOC0,164
|
1442
1435
|
vellum/types/vellum_variable_type.py,sha256=d3Zkf0ued1QrO90CMGTUnlyg2xT8nKGM4Nv6-L6W_Pg,158
|
1443
1436
|
vellum/types/vellum_workflow_execution_event.py,sha256=EI7XANl17nOtYskD9b4FmdejkKsK7cFDwe9asr2xGC8,169
|
1444
|
-
vellum/types/vembda_service_tier_enum.py,sha256=IMC8Ftntkplp7lt1OIqPZjFP_1C3t0-EbspoyWXgFQ4,162
|
1445
1437
|
vellum/types/workflow_deployment_event_executions_response.py,sha256=375mHiA7sucHeFSr0LlaLcVgV7F2QicMZaQiOrC5yOg,183
|
1446
1438
|
vellum/types/workflow_deployment_history_item.py,sha256=dp5pwzOVO83KPwAbYeO3NXlKKHswGa0MTGX82nIhAIg,170
|
1447
1439
|
vellum/types/workflow_deployment_parent_context.py,sha256=kB0eeRXagHqRnuDVA9B8aDlvBZVOmQ702JYXD8evh24,172
|
@@ -1551,6 +1543,7 @@ vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5i
|
|
1551
1543
|
vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
|
1552
1544
|
vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
|
1553
1545
|
vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
|
1546
|
+
vellum/workflows/events/context.py,sha256=81367zwg23PUBsrDJyF0rbcswNOIMTwWveAjmqy9GcM,4501
|
1554
1547
|
vellum/workflows/events/node.py,sha256=n3JdlCmeZ6tFTu_x5tu1oSCe5EBE8B1Cy3CzSWK5B08,5453
|
1555
1548
|
vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
|
1556
1549
|
vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1603,6 +1596,8 @@ vellum/workflows/inputs/__init__.py,sha256=AbFEteIYEvCb14fM3EK7bhM-40-6s494rSlIh
|
|
1603
1596
|
vellum/workflows/inputs/base.py,sha256=w3owT5B3rLBmIj-v-jL2l-HD4yd3hXK9RmHVd557BpA,5126
|
1604
1597
|
vellum/workflows/inputs/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1605
1598
|
vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbbxkxnpIEJ4FBaYBk,2206
|
1599
|
+
vellum/workflows/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1600
|
+
vellum/workflows/integrations/composio_service.py,sha256=p3V9l7OlOV1zZK9aIgvfhLiDsxbxeSVZJ3MBSedo7Pw,5008
|
1606
1601
|
vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
|
1607
1602
|
vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
|
1608
1603
|
vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
|
@@ -1637,10 +1632,12 @@ vellum/workflows/nodes/displayable/__init__.py,sha256=zH7SFotr4i8sO-r5_k53yPipQw
|
|
1637
1632
|
vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
|
1638
1633
|
vellum/workflows/nodes/displayable/api_node/node.py,sha256=F7ucsuEmrVYlTKMIoi60fFJ_ELYgGuc7jEmJCEyQczw,2956
|
1639
1634
|
vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1640
|
-
vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=
|
1635
|
+
vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=DZQGyq-iI9P9qvM5qtIUzb6fubyLnlJ3WbHwMUFsRs8,9527
|
1641
1636
|
vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
|
1642
1637
|
vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
|
1643
|
-
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=
|
1638
|
+
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=iUtdPsbJs1jwo3V5bA6qGab56z3K44_VOpLR5MDXzBQ,6640
|
1639
|
+
vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1640
|
+
vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py,sha256=Pf51DIyhtUxx-pCu0zJYDB4Z5_IW5mRwkJIoPT53_9I,3894
|
1644
1641
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
|
1645
1642
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=EJsGaz8Umss6-JWGGYbJp93ZHx3IlZQWAySlHAdNYtY,4466
|
1646
1643
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
@@ -1698,14 +1695,13 @@ vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha2
|
|
1698
1695
|
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
|
1699
1696
|
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=dc3EEn1sOICpr3GdS8eyeFtExaGwWWcw9eHSdkRhQJU,2584
|
1700
1697
|
vellum/workflows/nodes/displayable/tool_calling_node/__init__.py,sha256=3n0-ysmFKsr40CVxPthc0rfJgqVJeZuUEsCmYudLVRg,117
|
1701
|
-
vellum/workflows/nodes/displayable/tool_calling_node/
|
1702
|
-
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=BRA6YRCEOk0Nw3DCIT13WY7WCZ7Gx30s-egJe_md0FA,6504
|
1698
|
+
vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=KRI1NMgXZTUgQqq9uOA9W_D8k8sy7ZAq6v53-YVno1k,6545
|
1703
1699
|
vellum/workflows/nodes/displayable/tool_calling_node/state.py,sha256=oQg_GAtc349nPB5BL_oeDYYD7q1qSDPAqjj8iA8OoAw,215
|
1704
1700
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1705
|
-
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=
|
1701
|
+
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=UV0vZpU7-_tHcwnIq36WKwHrJXNurU4bdC3rfaw8eoU,4804
|
1706
1702
|
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=raY_E5-EgtYNXEPbO2I-Ythe4YeuFdGsXGZ_BAN98uI,7979
|
1707
|
-
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=
|
1708
|
-
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=
|
1703
|
+
vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=Ku_fUUoqQFeKLZ6o1DPCi7ax9PdkbaxkEEj6rAwjytM,7858
|
1704
|
+
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=uRZGCJA3FBRt1ZPQWOF2R8D49aajrW4Yjxvn3kIcrAQ,16545
|
1709
1705
|
vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrraiBHDLKTlnBa51ZiE,284
|
1710
1706
|
vellum/workflows/nodes/experimental/__init__.py,sha256=jCQgvZEknXKfuNhGSOou4XPfrPqZ1_XBj5F0n0fgiWM,106
|
1711
1707
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
|
@@ -1753,7 +1749,7 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
|
|
1753
1749
|
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
1754
1750
|
vellum/workflows/types/code_execution_node_wrappers.py,sha256=3MNIoFZKzVzNS5qFLVuDwMV17QJw72zo7NRf52yMq5A,3074
|
1755
1751
|
vellum/workflows/types/core.py,sha256=6MW_BRLcx4oEJpItQWQa64xfCrsk76suZSsMKKEsJLg,1314
|
1756
|
-
vellum/workflows/types/definition.py,sha256=
|
1752
|
+
vellum/workflows/types/definition.py,sha256=K1evpjoxHpZysx8HBcA-IY0fS_p1afS4QcvG2HZ-r0o,3815
|
1757
1753
|
vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
|
1758
1754
|
vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
|
1759
1755
|
vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1761,11 +1757,11 @@ vellum/workflows/types/tests/test_definition.py,sha256=c3GczPtWxuH3BOULwZacxYTQl
|
|
1761
1757
|
vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
|
1762
1758
|
vellum/workflows/types/utils.py,sha256=mTctHITBybpt4855x32oCKALBEcMNLn-9cCmfEKgJHQ,6498
|
1763
1759
|
vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1764
|
-
vellum/workflows/utils/functions.py,sha256=
|
1760
|
+
vellum/workflows/utils/functions.py,sha256=ksvyxPWTbsldlXSlqh20e_1hl9GHipWwggYLfp3NRiE,8735
|
1765
1761
|
vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
|
1766
1762
|
vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
|
1767
1763
|
vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1768
|
-
vellum/workflows/utils/tests/test_functions.py,sha256=
|
1764
|
+
vellum/workflows/utils/tests/test_functions.py,sha256=uaxjsIdtTQdz3r0ACbBegDx-5LMAYyVsI83VgxUlE8o,23520
|
1769
1765
|
vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwqsYs37PseyLhxw,402
|
1770
1766
|
vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
|
1771
1767
|
vellum/workflows/utils/tests/test_vellum_variables.py,sha256=vbnKgm41aB5OXlO-ZIPbhQ6xDiZkT8KMxCLqz4zocWY,1791
|
@@ -1778,8 +1774,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
|
|
1778
1774
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1779
1775
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
|
1780
1776
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1781
|
-
vellum_ai-1.0.
|
1782
|
-
vellum_ai-1.0.
|
1783
|
-
vellum_ai-1.0.
|
1784
|
-
vellum_ai-1.0.
|
1785
|
-
vellum_ai-1.0.
|
1777
|
+
vellum_ai-1.0.7.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1778
|
+
vellum_ai-1.0.7.dist-info/METADATA,sha256=-x_ul0guh3O6FHWJQn5INiN0RWn4W4IBRFk_JZgcUGQ,5554
|
1779
|
+
vellum_ai-1.0.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1780
|
+
vellum_ai-1.0.7.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1781
|
+
vellum_ai-1.0.7.dist-info/RECORD,,
|
vellum_cli/push.py
CHANGED
@@ -16,6 +16,7 @@ from vellum.resources.workflows.client import OMIT
|
|
16
16
|
from vellum.workflows.vellum_client import create_vellum_client
|
17
17
|
from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
|
18
18
|
from vellum_cli.logger import handle_cli_error, load_cli_logger
|
19
|
+
from vellum_ee.workflows.display.nodes.utils import to_kebab_case
|
19
20
|
from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
|
20
21
|
|
21
22
|
|
@@ -131,9 +132,10 @@ def push_command(
|
|
131
132
|
)
|
132
133
|
|
133
134
|
try:
|
135
|
+
module_name = workflow_config.module.split(".")[-1]
|
134
136
|
deployment_config = WorkflowPushDeploymentConfigRequest(
|
135
137
|
label=deployment_label or cli_deployment_config.label,
|
136
|
-
name=deployment_name or cli_deployment_config.name,
|
138
|
+
name=deployment_name or cli_deployment_config.name or to_kebab_case(module_name),
|
137
139
|
description=deployment_description or cli_deployment_config.description,
|
138
140
|
release_tags=release_tags or cli_deployment_config.release_tags,
|
139
141
|
)
|
@@ -274,7 +276,14 @@ Visit at: {base_url}/workflow-sandboxes/{response.workflow_sandbox_id}"""
|
|
274
276
|
workflow_config.workflow_sandbox_id = response.workflow_sandbox_id
|
275
277
|
|
276
278
|
if not workflow_config.deployments and response.workflow_deployment_id:
|
277
|
-
|
279
|
+
stored_deployment_config = WorkflowDeploymentConfig(
|
280
|
+
id=UUID(response.workflow_deployment_id),
|
281
|
+
label=deployment_config.label if deploy else None,
|
282
|
+
name=deployment_config.name if deploy else None,
|
283
|
+
description=deployment_config.description if deploy else None,
|
284
|
+
release_tags=deployment_config.release_tags if deploy else None,
|
285
|
+
)
|
286
|
+
workflow_config.deployments.append(stored_deployment_config)
|
278
287
|
|
279
288
|
config.save()
|
280
289
|
logger.info("Updated vellum.lock.json file.")
|
vellum_cli/tests/test_push.py
CHANGED
@@ -13,6 +13,7 @@ from vellum.client.core.api_error import ApiError
|
|
13
13
|
from vellum.client.types.workflow_push_response import WorkflowPushResponse
|
14
14
|
from vellum.utils.uuid import is_valid_uuid
|
15
15
|
from vellum_cli import main as cli_main
|
16
|
+
from vellum_ee.workflows.display.nodes.utils import to_kebab_case
|
16
17
|
|
17
18
|
|
18
19
|
def _extract_tar_gz(tar_gz_bytes: bytes) -> dict[str, str]:
|
@@ -391,7 +392,9 @@ def test_push__deployment(mock_module, vellum_client, base_command):
|
|
391
392
|
assert json.loads(call_args["exec_config"])["workflow_raw_data"]["definition"]["name"] == "ExampleWorkflow"
|
392
393
|
assert is_valid_uuid(call_args["workflow_sandbox_id"])
|
393
394
|
assert call_args["artifact"].name == expected_artifact_name
|
394
|
-
|
395
|
+
expected_deployment_name = to_kebab_case(module.split(".")[-1])
|
396
|
+
deployment_config = json.loads(call_args["deployment_config"])
|
397
|
+
assert deployment_config["name"] == expected_deployment_name
|
395
398
|
|
396
399
|
extracted_files = _extract_tar_gz(call_args["artifact"].read())
|
397
400
|
assert extracted_files["workflow.py"] == workflow_py_file_content
|
@@ -1039,3 +1042,56 @@ def test_push__deploy_with_release_tags_success(mock_module, vellum_client):
|
|
1039
1042
|
# AND should show success message
|
1040
1043
|
assert "Successfully pushed" in result.output
|
1041
1044
|
assert "Updated vellum.lock.json file." in result.output
|
1045
|
+
|
1046
|
+
|
1047
|
+
def test_push__deploy_stores_deployment_config_in_lock_file(mock_module, vellum_client):
|
1048
|
+
# GIVEN a single workflow
|
1049
|
+
temp_dir = mock_module.temp_dir
|
1050
|
+
module = mock_module.module
|
1051
|
+
|
1052
|
+
# AND a workflow exists in the module successfully
|
1053
|
+
_ensure_workflow_py(temp_dir, module)
|
1054
|
+
|
1055
|
+
# AND the push API call returns successfully with a deployment
|
1056
|
+
workflow_deployment_id = str(uuid4())
|
1057
|
+
vellum_client.workflows.push.return_value = WorkflowPushResponse(
|
1058
|
+
workflow_sandbox_id=str(uuid4()),
|
1059
|
+
workflow_deployment_id=workflow_deployment_id,
|
1060
|
+
)
|
1061
|
+
|
1062
|
+
# WHEN calling `vellum workflows push --deploy` for the first time
|
1063
|
+
runner = CliRunner()
|
1064
|
+
result = runner.invoke(cli_main, ["workflows", "push", module, "--deploy"])
|
1065
|
+
|
1066
|
+
# THEN it should succeed
|
1067
|
+
assert result.exit_code == 0, result.output
|
1068
|
+
|
1069
|
+
# AND the deployment config should be stored in the lock file with the deployment ID and module name
|
1070
|
+
with open(os.path.join(temp_dir, "vellum.lock.json")) as f:
|
1071
|
+
lock_data = json.loads(f.read())
|
1072
|
+
assert len(lock_data["workflows"][0]["deployments"]) == 1
|
1073
|
+
deployment = lock_data["workflows"][0]["deployments"][0]
|
1074
|
+
assert str(deployment["id"]) == workflow_deployment_id
|
1075
|
+
assert deployment["name"] == "test-push-deploy-stores-deployment-config-in-lock-file"
|
1076
|
+
assert deployment.get("label") is None
|
1077
|
+
assert deployment.get("description") is None
|
1078
|
+
assert deployment.get("release_tags") is None
|
1079
|
+
|
1080
|
+
# AND when we do a second push
|
1081
|
+
vellum_client.workflows.push.reset_mock()
|
1082
|
+
vellum_client.workflows.push.return_value = WorkflowPushResponse(
|
1083
|
+
workflow_sandbox_id=str(uuid4()),
|
1084
|
+
workflow_deployment_id=workflow_deployment_id,
|
1085
|
+
)
|
1086
|
+
|
1087
|
+
result = runner.invoke(cli_main, ["workflows", "push", module, "--deploy"])
|
1088
|
+
|
1089
|
+
# THEN it should succeed
|
1090
|
+
assert result.exit_code == 0, result.output
|
1091
|
+
|
1092
|
+
# AND we should have called the push API with the module name as deployment name
|
1093
|
+
vellum_client.workflows.push.assert_called_once()
|
1094
|
+
call_args = vellum_client.workflows.push.call_args.kwargs
|
1095
|
+
deployment_config_str = call_args["deployment_config"]
|
1096
|
+
deployment_config = json.loads(deployment_config_str)
|
1097
|
+
assert deployment_config["name"] == "test-push-deploy-stores-deployment-config-in-lock-file"
|
@@ -40,6 +40,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeDisplay[_CodeExecutionNodeType], Gene
|
|
40
40
|
node_filepath=node_file_path,
|
41
41
|
script_filepath=filepath,
|
42
42
|
)
|
43
|
+
if not file_code:
|
44
|
+
raise Exception(f"Filepath '{filepath}' of node {node.__name__} does not exist")
|
43
45
|
code_value = file_code
|
44
46
|
else:
|
45
47
|
code_value = ""
|
@@ -153,3 +153,19 @@ def test_serialize_node__with_unresolved_secret_references(vellum_client):
|
|
153
153
|
# warnings = list(workflow_display.errors)
|
154
154
|
# assert len(warnings) == 1
|
155
155
|
# assert "Failed to resolve secret reference 'MY_API_KEY'" in str(warnings[0])
|
156
|
+
|
157
|
+
|
158
|
+
def test_serialize_node__with_non_exist_code_input_path():
|
159
|
+
# GIVEN a code node with a non-existent code input path
|
160
|
+
class MyNode(CodeExecutionNode):
|
161
|
+
filepath = "non_existent_file.py"
|
162
|
+
|
163
|
+
# AND a workflow with the code node
|
164
|
+
class Workflow(BaseWorkflow):
|
165
|
+
graph = MyNode
|
166
|
+
|
167
|
+
# WHEN we serialize the workflow
|
168
|
+
workflow_display = get_workflow_display(workflow_class=Workflow)
|
169
|
+
with pytest.raises(Exception) as exc_info:
|
170
|
+
workflow_display.serialize()
|
171
|
+
assert "Filepath 'non_existent_file.py' of node MyNode does not exist" in str(exc_info.value)
|
@@ -54,6 +54,9 @@ def test_serialize_workflow():
|
|
54
54
|
"action": "GITHUB_CREATE_AN_ISSUE",
|
55
55
|
"description": "Create a new issue in a GitHub repository",
|
56
56
|
"display_name": "Create GitHub Issue",
|
57
|
+
"parameters": None,
|
58
|
+
"version": None,
|
59
|
+
"tags": None,
|
57
60
|
}
|
58
61
|
|
59
62
|
# AND the rest of the node structure should be correct
|
@@ -140,13 +140,19 @@ def test_serialize_workflow():
|
|
140
140
|
"description": "\n Get the current weather in a given location.\n ",
|
141
141
|
"parameters": {
|
142
142
|
"type": "object",
|
143
|
-
"properties": {
|
143
|
+
"properties": {
|
144
|
+
"location": {
|
145
|
+
"type": "string",
|
146
|
+
"description": "The location to get the weather for",
|
147
|
+
},
|
148
|
+
"unit": {"type": "string", "description": "The unit of temperature"},
|
149
|
+
},
|
144
150
|
"required": ["location", "unit"],
|
145
151
|
},
|
146
152
|
"forced": None,
|
147
153
|
"strict": None,
|
148
154
|
},
|
149
|
-
"src": 'import math\n\n\ndef get_current_weather(location: str, unit: str) -> str:\n """\n Get the current weather in a given location.\n """\n return f"The current weather in {location} is sunny with a temperature of {get_temperature(70.1)} degrees {unit}."\n\n\ndef get_temperature(temperature: float) -> int:\n """\n Get the temperature in a given location.\n """\n return math.floor(temperature)\n', # noqa: E501
|
155
|
+
"src": 'import math\nfrom typing import Annotated\n\n\ndef get_current_weather(\n location: Annotated[str, "The location to get the weather for"], unit: Annotated[str, "The unit of temperature"]\n) -> str:\n """\n Get the current weather in a given location.\n """\n return f"The current weather in {location} is sunny with a temperature of {get_temperature(70.1)} degrees {unit}."\n\n\ndef get_temperature(temperature: float) -> int:\n """\n Get the temperature in a given location.\n """\n return math.floor(temperature)\n', # noqa: E501
|
150
156
|
}
|
151
157
|
],
|
152
158
|
},
|