vellum-ai 1.4.2__py3-none-any.whl → 1.5.0__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 +14 -0
- vellum/client/__init__.py +3 -0
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/reference.md +160 -0
- vellum/client/resources/__init__.py +2 -0
- vellum/client/resources/integrations/__init__.py +4 -0
- vellum/client/resources/integrations/client.py +260 -0
- vellum/client/resources/integrations/raw_client.py +267 -0
- vellum/client/types/__init__.py +12 -0
- vellum/client/types/components_schemas_composio_execute_tool_request.py +5 -0
- vellum/client/types/components_schemas_composio_execute_tool_response.py +5 -0
- vellum/client/types/components_schemas_composio_tool_definition.py +5 -0
- vellum/client/types/composio_execute_tool_request.py +24 -0
- vellum/client/types/composio_execute_tool_response.py +24 -0
- vellum/client/types/composio_tool_definition.py +26 -0
- vellum/client/types/vellum_error_code_enum.py +2 -0
- vellum/client/types/vellum_sdk_error.py +1 -0
- vellum/client/types/workflow_event_error.py +1 -0
- vellum/resources/integrations/__init__.py +3 -0
- vellum/resources/integrations/client.py +3 -0
- vellum/resources/integrations/raw_client.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_request.py +3 -0
- vellum/types/components_schemas_composio_execute_tool_response.py +3 -0
- vellum/types/components_schemas_composio_tool_definition.py +3 -0
- vellum/types/composio_execute_tool_request.py +3 -0
- vellum/types/composio_execute_tool_response.py +3 -0
- vellum/types/composio_tool_definition.py +3 -0
- vellum/workflows/runner/runner.py +132 -110
- vellum/workflows/utils/functions.py +6 -1
- vellum/workflows/utils/tests/test_functions.py +40 -0
- vellum/workflows/workflows/base.py +19 -5
- vellum/workflows/workflows/tests/test_base_workflow.py +54 -0
- {vellum_ai-1.4.2.dist-info → vellum_ai-1.5.0.dist-info}/METADATA +1 -1
- {vellum_ai-1.4.2.dist-info → vellum_ai-1.5.0.dist-info}/RECORD +39 -19
- vellum_ai-1.5.0.dist-info/entry_points.txt +4 -0
- vellum_ee/assets/node-definitions.json +483 -0
- vellum_ee/scripts/generate_node_definitions.py +89 -0
- vellum_ai-1.4.2.dist-info/entry_points.txt +0 -3
- {vellum_ai-1.4.2.dist-info → vellum_ai-1.5.0.dist-info}/LICENSE +0 -0
- {vellum_ai-1.4.2.dist-info → vellum_ai-1.5.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
import json
|
2
|
+
import logging
|
3
|
+
import os
|
4
|
+
from typing import Any, Dict, List, Optional, Type
|
5
|
+
|
6
|
+
from vellum.workflows.nodes.bases.base import BaseNode
|
7
|
+
import vellum.workflows.nodes.displayable as displayable_module
|
8
|
+
from vellum.workflows.vellum_client import create_vellum_client
|
9
|
+
from vellum_ee.workflows.display.nodes.get_node_display_class import get_node_display_class
|
10
|
+
from vellum_ee.workflows.display.types import WorkflowDisplayContext
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
|
15
|
+
def create_display_context_with_client() -> WorkflowDisplayContext:
|
16
|
+
"""Create a WorkflowDisplayContext with Vellum client for serialization."""
|
17
|
+
client = create_vellum_client()
|
18
|
+
return WorkflowDisplayContext(client=client)
|
19
|
+
|
20
|
+
|
21
|
+
def get_all_displayable_node_classes() -> List[Type[BaseNode]]:
|
22
|
+
"""Get all displayable node classes dynamically from the displayable module."""
|
23
|
+
node_classes = []
|
24
|
+
for class_name in displayable_module.__all__:
|
25
|
+
node_class = getattr(displayable_module, class_name)
|
26
|
+
node_classes.append(node_class)
|
27
|
+
return node_classes
|
28
|
+
|
29
|
+
|
30
|
+
def clean_node_definition(definition: Dict[str, Any]) -> Dict[str, Any]:
|
31
|
+
"""Remove unwanted fields from a successfully serialized node definition."""
|
32
|
+
fields_to_remove = ["inputs", "data", "type", "adornments", "should_file_merge"]
|
33
|
+
cleaned = {k: v for k, v in definition.items() if k not in fields_to_remove}
|
34
|
+
return cleaned
|
35
|
+
|
36
|
+
|
37
|
+
def serialize_node_definition(
|
38
|
+
node_class: Type[BaseNode], display_context: WorkflowDisplayContext
|
39
|
+
) -> Optional[Dict[str, Any]]:
|
40
|
+
"""Serialize a single node definition, returning None if it fails."""
|
41
|
+
try:
|
42
|
+
display_class = get_node_display_class(node_class)
|
43
|
+
display_instance = display_class()
|
44
|
+
definition = display_instance.serialize(display_context)
|
45
|
+
return clean_node_definition(definition)
|
46
|
+
except Exception as e:
|
47
|
+
logger.info(f"Warning: Failed to serialize {node_class.__name__}: {e}")
|
48
|
+
return None
|
49
|
+
|
50
|
+
|
51
|
+
def main() -> None:
|
52
|
+
"""Main function to generate node definitions."""
|
53
|
+
logger.info("Generating node definitions...")
|
54
|
+
|
55
|
+
display_context = create_display_context_with_client()
|
56
|
+
node_classes = get_all_displayable_node_classes()
|
57
|
+
|
58
|
+
successful_nodes = []
|
59
|
+
errors = []
|
60
|
+
|
61
|
+
for node_class in node_classes:
|
62
|
+
logger.info(f"Serializing {node_class.__name__}...")
|
63
|
+
definition = serialize_node_definition(node_class, display_context)
|
64
|
+
|
65
|
+
if definition is not None:
|
66
|
+
successful_nodes.append(definition)
|
67
|
+
else:
|
68
|
+
try:
|
69
|
+
display_class = get_node_display_class(node_class)
|
70
|
+
display_instance = display_class()
|
71
|
+
display_instance.serialize(display_context)
|
72
|
+
except Exception as e:
|
73
|
+
errors.append({"node": node_class.__name__, "error": str(e)})
|
74
|
+
|
75
|
+
result = {"nodes": successful_nodes, "errors": errors}
|
76
|
+
|
77
|
+
output_path = "ee/vellum_ee/assets/node-definitions.json"
|
78
|
+
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
79
|
+
|
80
|
+
with open(output_path, "w") as f:
|
81
|
+
json.dump(result, f, indent=2)
|
82
|
+
|
83
|
+
logger.info(
|
84
|
+
f"Generated {len(successful_nodes)} successful node definitions and {len(errors)} errors in {output_path}"
|
85
|
+
)
|
86
|
+
|
87
|
+
|
88
|
+
if __name__ == "__main__":
|
89
|
+
main()
|
File without changes
|
File without changes
|