vellum-ai 1.0.5__py3-none-any.whl → 1.0.6__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.
Files changed (32) hide show
  1. vellum/__init__.py +0 -8
  2. vellum/client/core/client_wrapper.py +2 -2
  3. vellum/client/types/__init__.py +0 -8
  4. vellum/client/types/organization_read.py +1 -2
  5. vellum/workflows/events/context.py +111 -0
  6. vellum/workflows/integrations/__init__.py +0 -0
  7. vellum/workflows/integrations/composio_service.py +138 -0
  8. vellum/workflows/nodes/displayable/bases/api_node/node.py +27 -9
  9. vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
  10. vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +47 -0
  11. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +63 -58
  12. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +49 -38
  13. vellum/workflows/types/definition.py +4 -2
  14. {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.6.dist-info}/METADATA +1 -3
  15. {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.6.dist-info}/RECORD +23 -27
  16. vellum_cli/push.py +11 -2
  17. vellum_cli/tests/test_push.py +57 -1
  18. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -0
  19. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +16 -0
  20. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +3 -0
  21. vellum/client/types/name_enum.py +0 -7
  22. vellum/client/types/organization_limit_config.py +0 -25
  23. vellum/client/types/quota.py +0 -22
  24. vellum/client/types/vembda_service_tier_enum.py +0 -5
  25. vellum/types/name_enum.py +0 -3
  26. vellum/types/organization_limit_config.py +0 -3
  27. vellum/types/quota.py +0 -3
  28. vellum/types/vembda_service_tier_enum.py +0 -3
  29. vellum/workflows/nodes/displayable/tool_calling_node/composio_service.py +0 -83
  30. {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.6.dist-info}/LICENSE +0 -0
  31. {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.6.dist-info}/WHEEL +0 -0
  32. {vellum_ai-1.0.5.dist-info → vellum_ai-1.0.6.dist-info}/entry_points.txt +0 -0
@@ -1,72 +1,65 @@
1
1
  import pytest
2
2
  from unittest.mock import Mock, patch
3
3
 
4
- from vellum.workflows.nodes.displayable.tool_calling_node.composio_service import ComposioService, ConnectionInfo
4
+ from vellum.workflows.integrations.composio_service import ComposioService, ConnectionInfo
5
5
 
6
6
 
7
7
  @pytest.fixture
8
- def mock_composio_client():
9
- """Mock the Composio client completely"""
10
- with patch("vellum.workflows.nodes.displayable.tool_calling_node.composio_service.ComposioClient") as mock_composio:
11
- yield mock_composio.return_value
8
+ def mock_requests():
9
+ """Mock requests module"""
10
+ with patch("vellum.workflows.integrations.composio_service.requests") as mock_requests:
11
+ yield mock_requests
12
12
 
13
13
 
14
14
  @pytest.fixture
15
15
  def mock_connected_accounts_response():
16
- """Mock response for connected accounts"""
17
- mock_item1 = Mock()
18
- mock_item1.id = "conn-123"
19
- mock_item1.toolkit.slug = "github"
20
- mock_item1.status = "ACTIVE"
21
- mock_item1.created_at = "2023-01-01T00:00:00Z"
22
- mock_item1.updated_at = "2023-01-15T10:30:00Z"
23
-
24
- mock_item2 = Mock()
25
- mock_item2.id = "conn-456"
26
- mock_item2.toolkit.slug = "slack"
27
- mock_item2.status = "ACTIVE"
28
- mock_item2.created_at = "2023-01-01T00:00:00Z"
29
- mock_item2.updated_at = "2023-01-10T08:00:00Z"
30
-
31
- mock_response = Mock()
32
- mock_response.items = [mock_item1, mock_item2]
33
-
34
- return mock_response
16
+ """Mock response for connected accounts API"""
17
+ return {
18
+ "items": [
19
+ {
20
+ "id": "conn-123",
21
+ "toolkit": {"slug": "github"},
22
+ "status": "ACTIVE",
23
+ "created_at": "2023-01-01T00:00:00Z",
24
+ "updated_at": "2023-01-15T10:30:00Z",
25
+ },
26
+ {
27
+ "id": "conn-456",
28
+ "toolkit": {"slug": "slack"},
29
+ "status": "ACTIVE",
30
+ "created_at": "2023-01-01T00:00:00Z",
31
+ "updated_at": "2023-01-10T08:00:00Z",
32
+ },
33
+ ]
34
+ }
35
35
 
36
36
 
37
37
  @pytest.fixture
38
- def mock_composio_core_client():
39
- """Mock the composio-core Composio client"""
40
- with patch("vellum.workflows.nodes.displayable.tool_calling_node.composio_service.Composio") as mock_composio:
41
- yield mock_composio.return_value
38
+ def mock_tool_execution_response():
39
+ """Mock response for tool execution API"""
40
+ return {
41
+ "data": {"items": [], "total": 0},
42
+ "successful": True,
43
+ "error": None,
44
+ }
42
45
 
43
46
 
44
47
  @pytest.fixture
45
- def mock_action():
46
- """Mock the Action class and specific actions"""
47
- with patch("vellum.workflows.nodes.displayable.tool_calling_node.composio_service.Action") as mock_action_class:
48
- # Mock a specific action
49
- mock_hackernews_action = Mock()
50
- mock_action_class.HACKERNEWS_GET_USER = mock_hackernews_action
51
- mock_action_class.GITHUB_GET_USER = Mock()
52
- yield mock_action_class
53
-
54
-
55
- @pytest.fixture
56
- def composio_service(mock_composio_client, mock_composio_core_client):
57
- """Create ComposioService with mocked clients"""
48
+ def composio_service():
49
+ """Create ComposioService with test API key"""
58
50
  return ComposioService(api_key="test-key")
59
51
 
60
52
 
61
53
  class TestComposioAccountService:
62
54
  """Test suite for ComposioAccountService"""
63
55
 
64
- def test_get_user_connections_success(
65
- self, composio_service, mock_composio_client, mock_connected_accounts_response
66
- ):
56
+ def test_get_user_connections_success(self, composio_service, mock_requests, mock_connected_accounts_response):
67
57
  """Test successful retrieval of user connections"""
68
- # GIVEN the Composio client returns a valid response with two connections
69
- mock_composio_client.connected_accounts.list.return_value = mock_connected_accounts_response
58
+ # GIVEN the requests mock returns a valid response with two connections
59
+ mock_response = Mock()
60
+ mock_response.json.return_value = mock_connected_accounts_response
61
+ mock_response.raise_for_status.return_value = None
62
+ mock_requests.get.return_value = mock_response
70
63
 
71
64
  # WHEN we request user connections
72
65
  result = composio_service.get_user_connections()
@@ -86,14 +79,21 @@ class TestComposioAccountService:
86
79
  assert result[1].created_at == "2023-01-01T00:00:00Z"
87
80
  assert result[1].updated_at == "2023-01-10T08:00:00Z"
88
81
 
89
- mock_composio_client.connected_accounts.list.assert_called_once()
82
+ # Verify the correct API endpoint was called
83
+ mock_requests.get.assert_called_once_with(
84
+ "https://backend.composio.dev/api/v3/connected_accounts",
85
+ headers={"x-api-key": "test-key", "Content-Type": "application/json"},
86
+ params={},
87
+ timeout=30,
88
+ )
90
89
 
91
- def test_get_user_connections_empty_response(self, composio_service, mock_composio_client):
90
+ def test_get_user_connections_empty_response(self, composio_service, mock_requests):
92
91
  """Test handling of empty connections response"""
93
- # GIVEN the Composio client returns an empty response
92
+ # GIVEN the requests mock returns an empty response
94
93
  mock_response = Mock()
95
- mock_response.items = []
96
- mock_composio_client.connected_accounts.list.return_value = mock_response
94
+ mock_response.json.return_value = {"items": []}
95
+ mock_response.raise_for_status.return_value = None
96
+ mock_requests.get.return_value = mock_response
97
97
 
98
98
  # WHEN we request user connections
99
99
  result = composio_service.get_user_connections()
@@ -105,18 +105,23 @@ class TestComposioAccountService:
105
105
  class TestComposioCoreService:
106
106
  """Test suite for ComposioCoreService"""
107
107
 
108
- def test_execute_tool_success(self, composio_service, mock_composio_core_client, mock_action):
108
+ def test_execute_tool_success(self, composio_service, mock_requests, mock_tool_execution_response):
109
109
  """Test executing a tool with complex argument structure"""
110
110
  # GIVEN complex arguments and a mock response
111
111
  complex_args = {"filters": {"status": "active"}, "limit": 10, "sort": "created_at"}
112
- expected_result = {"items": [], "total": 0}
113
- mock_composio_core_client.actions.execute.return_value = expected_result
112
+ mock_response = Mock()
113
+ mock_response.json.return_value = mock_tool_execution_response
114
+ mock_response.raise_for_status.return_value = None
115
+ mock_requests.post.return_value = mock_response
114
116
 
115
117
  # WHEN we execute a tool with complex arguments
116
118
  result = composio_service.execute_tool("HACKERNEWS_GET_USER", complex_args)
117
119
 
118
- # THEN the arguments are passed through correctly
119
- mock_composio_core_client.actions.execute.assert_called_once_with(
120
- mock_action.HACKERNEWS_GET_USER, params=complex_args
120
+ # THEN the arguments are passed through correctly and we get the expected result
121
+ mock_requests.post.assert_called_once_with(
122
+ "https://backend.composio.dev/api/v3/tools/execute/HACKERNEWS_GET_USER",
123
+ headers={"x-api-key": "test-key", "Content-Type": "application/json"},
124
+ json={"arguments": complex_args},
125
+ timeout=30,
121
126
  )
122
- assert result == expected_result
127
+ assert result == {"items": [], "total": 0}
@@ -1,12 +1,13 @@
1
1
  import json
2
- import os
3
- from typing import Any, Callable, Iterator, List, Optional, Type, cast
2
+ import logging
3
+ from typing import Any, Callable, Iterator, List, Optional, Type, Union, cast
4
4
 
5
5
  from pydash import snake_case
6
6
 
7
7
  from vellum import ChatMessage, PromptBlock
8
8
  from vellum.client.types.function_call_chat_message_content import FunctionCallChatMessageContent
9
9
  from vellum.client.types.function_call_chat_message_content_value import FunctionCallChatMessageContentValue
10
+ from vellum.client.types.function_definition import FunctionDefinition
10
11
  from vellum.client.types.prompt_output import PromptOutput
11
12
  from vellum.client.types.prompt_parameters import PromptParameters
12
13
  from vellum.client.types.string_chat_message_content import StringChatMessageContent
@@ -15,11 +16,11 @@ from vellum.workflows.errors.types import WorkflowErrorCode
15
16
  from vellum.workflows.exceptions import NodeException
16
17
  from vellum.workflows.expressions.concat import ConcatExpression
17
18
  from vellum.workflows.inputs import BaseInputs
19
+ from vellum.workflows.integrations.composio_service import ComposioService
18
20
  from vellum.workflows.nodes.bases import BaseNode
19
21
  from vellum.workflows.nodes.core.inline_subworkflow_node.node import InlineSubworkflowNode
20
22
  from vellum.workflows.nodes.displayable.inline_prompt_node.node import InlinePromptNode
21
23
  from vellum.workflows.nodes.displayable.subworkflow_deployment_node.node import SubworkflowDeploymentNode
22
- from vellum.workflows.nodes.displayable.tool_calling_node.composio_service import ComposioService
23
24
  from vellum.workflows.nodes.displayable.tool_calling_node.state import ToolCallingState
24
25
  from vellum.workflows.outputs.base import BaseOutput
25
26
  from vellum.workflows.ports.port import Port
@@ -33,6 +34,9 @@ from vellum.workflows.types.generics import is_workflow_class
33
34
  CHAT_HISTORY_VARIABLE = "chat_history"
34
35
 
35
36
 
37
+ logger = logging.getLogger(__name__)
38
+
39
+
36
40
  class FunctionCallNodeMixin:
37
41
  """Mixin providing common functionality for nodes that handle function calls."""
38
42
 
@@ -176,29 +180,9 @@ class ComposioNode(BaseNode[ToolCallingState], FunctionCallNodeMixin):
176
180
  # Extract arguments from function call
177
181
  arguments = self._extract_function_arguments()
178
182
 
179
- # HACK: Use first Composio API key found in environment variables
180
- composio_api_key = None
181
- common_env_var_names = ["COMPOSIO_API_KEY", "COMPOSIO_KEY"]
182
-
183
- for env_var_name in common_env_var_names:
184
- value = os.environ.get(env_var_name)
185
- if value:
186
- composio_api_key = value
187
- break
188
-
189
- if not composio_api_key:
190
- raise NodeException(
191
- message=(
192
- "No Composio API key found in environment variables. "
193
- "Please ensure one of these environment variables is set: "
194
- )
195
- + ", ".join(common_env_var_names),
196
- code=WorkflowErrorCode.NODE_EXECUTION,
197
- )
198
-
199
183
  try:
200
184
  # Execute using ComposioService
201
- composio_service = ComposioService(api_key=composio_api_key)
185
+ composio_service = ComposioService()
202
186
  result = composio_service.execute_tool(tool_name=self.composio_tool.action, arguments=arguments)
203
187
  except Exception as e:
204
188
  raise NodeException(
@@ -212,21 +196,41 @@ class ComposioNode(BaseNode[ToolCallingState], FunctionCallNodeMixin):
212
196
  yield from []
213
197
 
214
198
 
215
- def create_composio_wrapper_function(tool_def: ComposioToolDefinition):
216
- """Create a real Python function that wraps the Composio tool for prompt layer compatibility."""
199
+ def _hydrate_composio_tool_definition(tool_def: ComposioToolDefinition) -> ComposioToolDefinition:
200
+ """Hydrate a ComposioToolDefinition with detailed information from the Composio API.
201
+
202
+ Args:
203
+ tool_def: The basic ComposioToolDefinition to enhance
217
204
 
218
- def wrapper_function(**kwargs):
219
- # This should never be called due to routing, but satisfies introspection
220
- raise RuntimeError(
221
- f"ComposioToolDefinition wrapper for '{tool_def.action}' should not be called directly. "
222
- f"Execution should go through ComposioNode. This suggests a routing issue."
205
+ Returns:
206
+ ComposioToolDefinition with detailed parameters and description
207
+ """
208
+ try:
209
+ composio_service = ComposioService()
210
+ tool_details = composio_service.get_tool_by_slug(tool_def.action)
211
+
212
+ # Extract toolkit information from API response
213
+ toolkit_info = tool_details.get("toolkit", {})
214
+ toolkit_slug = (
215
+ toolkit_info.get("slug", tool_def.toolkit) if isinstance(toolkit_info, dict) else tool_def.toolkit
223
216
  )
224
217
 
225
- # Set proper function attributes for prompt layer introspection
226
- wrapper_function.__name__ = tool_def.name
227
- wrapper_function.__doc__ = tool_def.description
218
+ # Create a version of the tool definition with proper field extraction
219
+ return ComposioToolDefinition(
220
+ type=tool_def.type,
221
+ toolkit=toolkit_slug.upper() if toolkit_slug else tool_def.toolkit,
222
+ action=tool_details.get("slug", tool_def.action),
223
+ description=tool_details.get("description", tool_def.description),
224
+ display_name=tool_details.get("name", tool_def.display_name),
225
+ parameters=tool_details.get("input_parameters", tool_def.parameters),
226
+ version=tool_details.get("version", tool_def.version),
227
+ tags=tool_details.get("tags", tool_def.tags),
228
+ )
228
229
 
229
- return wrapper_function
230
+ except Exception as e:
231
+ # If hydration fails (including no API key), log and return original
232
+ logger.warning(f"Failed to enhance Composio tool '{tool_def.action}': {e}")
233
+ return tool_def
230
234
 
231
235
 
232
236
  def create_tool_router_node(
@@ -240,12 +244,19 @@ def create_tool_router_node(
240
244
  if functions and len(functions) > 0:
241
245
  # Create dynamic ports and convert functions in a single loop
242
246
  Ports = type("Ports", (), {})
243
- prompt_functions = []
247
+ prompt_functions: List[Union[Tool, FunctionDefinition]] = []
244
248
 
245
249
  for function in functions:
246
- # Convert ComposioToolDefinition to wrapper function for prompt layer
247
250
  if isinstance(function, ComposioToolDefinition):
248
- prompt_functions.append(create_composio_wrapper_function(function))
251
+ # Get Composio tool details and hydrate the function definition
252
+ enhanced_function = _hydrate_composio_tool_definition(function)
253
+ prompt_functions.append(
254
+ FunctionDefinition(
255
+ name=enhanced_function.name,
256
+ description=enhanced_function.description,
257
+ parameters=enhanced_function.parameters,
258
+ )
259
+ )
249
260
  else:
250
261
  prompt_functions.append(function)
251
262
 
@@ -2,7 +2,7 @@ import importlib
2
2
  import inspect
3
3
  from types import FrameType
4
4
  from uuid import UUID
5
- from typing import Annotated, Any, Dict, Literal, Optional, Union
5
+ from typing import Annotated, Any, Dict, List, Literal, Optional, Union
6
6
 
7
7
  from pydantic import BeforeValidator
8
8
 
@@ -109,8 +109,10 @@ class ComposioToolDefinition(UniversalBaseModel):
109
109
  action: str # Specific action like "GITHUB_CREATE_AN_ISSUE"
110
110
  description: str
111
111
 
112
- # Optional cached metadata
113
112
  display_name: Optional[str] = None
113
+ parameters: Optional[Dict[str, Any]] = None
114
+ version: Optional[str] = None
115
+ tags: Optional[List[str]] = None
114
116
 
115
117
  @property
116
118
  def name(self) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.0.5
3
+ Version: 1.0.6
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=3icrAKRu2ZbOvtVsk-m6pSM9Hau4MrmtMje-fKHMt8A,10940
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=wk9jQTV565TeukR0Vz-2AUQyJa3VlOJrmWxkSTX_Ptw,37860
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=6lavdBw297GwAQqyxjnPUtx5pHv6k5V9Vkuq7s2D0TM,4508
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=ZasoqG8FmqnZDj2FfL5BGPq9fafOTJqV_4xjOKLi1gc,5434
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,7 +94,7 @@ 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=esCCiOXM7Syb9tFyVdZTu95lnP8yiADfBPXw-oUy4zk,3719
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
99
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=1hoakUkh5kHZYIfY1moJBZYzXgAafkgWsIf4lmZ12vg,9521
100
100
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=mova0sPD3evHiHIN1O0VynxlCp-uOcEIKve5Pd_oCDg,4069
@@ -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=v-QZCDKBW8F_J5j4iE7eSjcrhHQA2JeBDB6Hxn8mnEI,43273
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=70UredlOjsMiKycnRj65YT1Wa5H3gtf4_h3_2Ip7LOs,2383
148
+ vellum/client/core/client_wrapper.py,sha256=QsKeKLYWV6cj1EDrHG6sVVmh4h2ol3aw7P3Lckn25Wk,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=zNkFXLVQBQSKVO_yBZ8PGzmAwuwGEOqZ1apSQAuly8E,65526
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/organization_limit_config.py,sha256=-RXRY_Rpt8hHbJtNxJZvfKo1cUEnlvvGCRhk401jLU0,956
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
@@ -1640,7 +1635,9 @@ vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBS
1640
1635
  vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=qp6v-MrgpNVDt16Kp0EOyeQx3LpzflTlaNSL1EYZ1nE,9185
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=JDYe21Ou8WGkVRxO5RYdW10yld-IYv3Ugt13L8f6-s0,5247
1638
+ vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=jkv803kEPlK4lrzk2oWU0J3t6vyFeQkI9ap9RCb1qt0,6183
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=Z39BZn-QgGNCKcwbOwhMpAopwgX6J3v7ulCA6TKyphE,1587
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/composio_service.py,sha256=C53hgStA-BHe7EFu4j_N650LqsLBOiMovs_nGW8J7nc,2669
1702
1698
  vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=BRA6YRCEOk0Nw3DCIT13WY7WCZ7Gx30s-egJe_md0FA,6504
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=BOb4LTAELS-cX5xPH8fH4E2CKl1IBBjiOBYhQl51PpI,4758
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
1703
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=aCK4TDcD4TcgoYbOs712qFiNCVRVffCb5HZCZQGDiUc,2449
1708
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=Vbdt6wsQozK6PWJq5chtda9pwasjNpx7IE0IMkWPSak,15622
1704
+ vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=fOoAr_TTZ5Sjuc2GSyKz87vnfx-RZ6B7BxtQmPdxqfE,16191
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=Oq2E5Ae6AsvqAOLWzP0k6H5M7su00JZP_QFhlV2rz7s,3721
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
@@ -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.5.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1782
- vellum_ai-1.0.5.dist-info/METADATA,sha256=FIbEOXz7OKYnan91KlabwU9Z_BqNdMXNgKp11ZA8olI,5649
1783
- vellum_ai-1.0.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1784
- vellum_ai-1.0.5.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1785
- vellum_ai-1.0.5.dist-info/RECORD,,
1777
+ vellum_ai-1.0.6.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1778
+ vellum_ai-1.0.6.dist-info/METADATA,sha256=EmLX2EVjbQ5g5W-PpqXN-5TPUhFu6L5KXLRLSB0st_s,5554
1779
+ vellum_ai-1.0.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1780
+ vellum_ai-1.0.6.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1781
+ vellum_ai-1.0.6.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
- workflow_config.deployments.append(WorkflowDeploymentConfig(id=UUID(response.workflow_deployment_id)))
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.")