vellum-ai 1.5.5__py3-none-any.whl → 1.6.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.
Files changed (39) hide show
  1. vellum/__init__.py +2 -0
  2. vellum/client/core/client_wrapper.py +2 -2
  3. vellum/client/types/__init__.py +2 -0
  4. vellum/client/types/composio_tool_definition.py +1 -0
  5. vellum/client/types/integration_auth_config_integration.py +23 -0
  6. vellum/client/types/integration_auth_config_integration_credential.py +1 -1
  7. vellum/client/types/integration_read.py +1 -1
  8. vellum/client/types/named_test_case_audio_variable_value.py +1 -1
  9. vellum/client/types/named_test_case_audio_variable_value_request.py +1 -1
  10. vellum/client/types/named_test_case_document_variable_value.py +1 -1
  11. vellum/client/types/named_test_case_document_variable_value_request.py +1 -1
  12. vellum/client/types/named_test_case_image_variable_value.py +1 -1
  13. vellum/client/types/named_test_case_image_variable_value_request.py +1 -1
  14. vellum/client/types/named_test_case_video_variable_value.py +1 -1
  15. vellum/client/types/named_test_case_video_variable_value_request.py +1 -1
  16. vellum/client/types/slim_composio_tool_definition.py +1 -0
  17. vellum/client/types/slim_integration_auth_config_read.py +3 -1
  18. vellum/client/types/slim_integration_read.py +1 -1
  19. vellum/client/types/test_case_audio_variable_value.py +1 -1
  20. vellum/client/types/test_case_document_variable_value.py +1 -1
  21. vellum/client/types/test_case_image_variable_value.py +1 -1
  22. vellum/client/types/test_case_video_variable_value.py +1 -1
  23. vellum/client/types/tool_definition_integration.py +1 -1
  24. vellum/types/integration_auth_config_integration.py +3 -0
  25. vellum/workflows/errors/types.py +3 -0
  26. vellum/workflows/integrations/tests/test_vellum_integration_service.py +84 -0
  27. vellum/workflows/integrations/vellum_integration_service.py +34 -2
  28. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +1 -1
  29. vellum/workflows/ports/port.py +4 -1
  30. vellum/workflows/ports/tests/test_port.py +45 -0
  31. vellum/workflows/types/definition.py +1 -1
  32. vellum/workflows/types/tests/test_definition.py +4 -4
  33. vellum/workflows/utils/functions.py +1 -1
  34. {vellum_ai-1.5.5.dist-info → vellum_ai-1.6.0.dist-info}/METADATA +1 -1
  35. {vellum_ai-1.5.5.dist-info → vellum_ai-1.6.0.dist-info}/RECORD +39 -36
  36. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +1 -1
  37. {vellum_ai-1.5.5.dist-info → vellum_ai-1.6.0.dist-info}/LICENSE +0 -0
  38. {vellum_ai-1.5.5.dist-info → vellum_ai-1.6.0.dist-info}/WHEEL +0 -0
  39. {vellum_ai-1.5.5.dist-info → vellum_ai-1.6.0.dist-info}/entry_points.txt +0 -0
vellum/__init__.py CHANGED
@@ -222,6 +222,7 @@ from .client.types import (
222
222
  InitiatedWorkflowNodeResultEvent,
223
223
  InstructorVectorizerConfig,
224
224
  InstructorVectorizerConfigRequest,
225
+ IntegrationAuthConfigIntegration,
225
226
  IntegrationAuthConfigIntegrationCredential,
226
227
  IntegrationCredentialAccessType,
227
228
  IntegrationName,
@@ -961,6 +962,7 @@ __all__ = [
961
962
  "InitiatedWorkflowNodeResultEvent",
962
963
  "InstructorVectorizerConfig",
963
964
  "InstructorVectorizerConfigRequest",
965
+ "IntegrationAuthConfigIntegration",
964
966
  "IntegrationAuthConfigIntegrationCredential",
965
967
  "IntegrationCredentialAccessType",
966
968
  "IntegrationName",
@@ -27,10 +27,10 @@ class BaseClientWrapper:
27
27
 
28
28
  def get_headers(self) -> typing.Dict[str, str]:
29
29
  headers: typing.Dict[str, str] = {
30
- "User-Agent": "vellum-ai/1.5.5",
30
+ "User-Agent": "vellum-ai/1.6.0",
31
31
  "X-Fern-Language": "Python",
32
32
  "X-Fern-SDK-Name": "vellum-ai",
33
- "X-Fern-SDK-Version": "1.5.5",
33
+ "X-Fern-SDK-Version": "1.6.0",
34
34
  **(self.get_custom_headers() or {}),
35
35
  }
36
36
  if self._api_version is not None:
@@ -230,6 +230,7 @@ from .initiated_prompt_execution_meta import InitiatedPromptExecutionMeta
230
230
  from .initiated_workflow_node_result_event import InitiatedWorkflowNodeResultEvent
231
231
  from .instructor_vectorizer_config import InstructorVectorizerConfig
232
232
  from .instructor_vectorizer_config_request import InstructorVectorizerConfigRequest
233
+ from .integration_auth_config_integration import IntegrationAuthConfigIntegration
233
234
  from .integration_auth_config_integration_credential import IntegrationAuthConfigIntegrationCredential
234
235
  from .integration_credential_access_type import IntegrationCredentialAccessType
235
236
  from .integration_name import IntegrationName
@@ -935,6 +936,7 @@ __all__ = [
935
936
  "InitiatedWorkflowNodeResultEvent",
936
937
  "InstructorVectorizerConfig",
937
938
  "InstructorVectorizerConfigRequest",
939
+ "IntegrationAuthConfigIntegration",
938
940
  "IntegrationAuthConfigIntegrationCredential",
939
941
  "IntegrationCredentialAccessType",
940
942
  "IntegrationName",
@@ -15,6 +15,7 @@ class ComposioToolDefinition(UniversalBaseModel):
15
15
  provider: typing.Literal["COMPOSIO"] = "COMPOSIO"
16
16
  integration: ToolDefinitionIntegration
17
17
  name: str
18
+ label: str
18
19
  description: str
19
20
  input_parameters: typing.Dict[str, typing.Optional[typing.Any]]
20
21
  output_parameters: typing.Dict[str, typing.Optional[typing.Any]]
@@ -0,0 +1,23 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .integration_name import IntegrationName
8
+ from .integration_provider import IntegrationProvider
9
+
10
+
11
+ class IntegrationAuthConfigIntegration(UniversalBaseModel):
12
+ id: str
13
+ provider: IntegrationProvider = "COMPOSIO"
14
+ name: IntegrationName
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow
@@ -7,7 +7,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
7
 
8
8
 
9
9
  class IntegrationAuthConfigIntegrationCredential(UniversalBaseModel):
10
- id: typing.Optional[str] = None
10
+ id: str
11
11
 
12
12
  if IS_PYDANTIC_V2:
13
13
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -10,7 +10,7 @@ from .integration_provider import IntegrationProvider
10
10
 
11
11
 
12
12
  class IntegrationRead(UniversalBaseModel):
13
- id: typing.Optional[str] = None
13
+ id: str
14
14
  label: typing.Optional[str] = None
15
15
  icon_url: str
16
16
  name: IntegrationName
@@ -13,7 +13,7 @@ class NamedTestCaseAudioVariableValue(UniversalBaseModel):
13
13
  """
14
14
 
15
15
  type: typing.Literal["AUDIO"] = "AUDIO"
16
- value: VellumAudio
16
+ value: typing.Optional[VellumAudio] = None
17
17
  name: str
18
18
 
19
19
  if IS_PYDANTIC_V2:
@@ -13,7 +13,7 @@ class NamedTestCaseAudioVariableValueRequest(UniversalBaseModel):
13
13
  """
14
14
 
15
15
  type: typing.Literal["AUDIO"] = "AUDIO"
16
- value: VellumAudioRequest
16
+ value: typing.Optional[VellumAudioRequest] = None
17
17
  name: str
18
18
 
19
19
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_document import VellumDocument
9
9
 
10
10
  class NamedTestCaseDocumentVariableValue(UniversalBaseModel):
11
11
  type: typing.Literal["DOCUMENT"] = "DOCUMENT"
12
- value: VellumDocument
12
+ value: typing.Optional[VellumDocument] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_document_request import VellumDocumentRequest
9
9
 
10
10
  class NamedTestCaseDocumentVariableValueRequest(UniversalBaseModel):
11
11
  type: typing.Literal["DOCUMENT"] = "DOCUMENT"
12
- value: VellumDocumentRequest
12
+ value: typing.Optional[VellumDocumentRequest] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_image import VellumImage
9
9
 
10
10
  class NamedTestCaseImageVariableValue(UniversalBaseModel):
11
11
  type: typing.Literal["IMAGE"] = "IMAGE"
12
- value: VellumImage
12
+ value: typing.Optional[VellumImage] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_image_request import VellumImageRequest
9
9
 
10
10
  class NamedTestCaseImageVariableValueRequest(UniversalBaseModel):
11
11
  type: typing.Literal["IMAGE"] = "IMAGE"
12
- value: VellumImageRequest
12
+ value: typing.Optional[VellumImageRequest] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_video import VellumVideo
9
9
 
10
10
  class NamedTestCaseVideoVariableValue(UniversalBaseModel):
11
11
  type: typing.Literal["VIDEO"] = "VIDEO"
12
- value: VellumVideo
12
+ value: typing.Optional[VellumVideo] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -9,7 +9,7 @@ from .vellum_video_request import VellumVideoRequest
9
9
 
10
10
  class NamedTestCaseVideoVariableValueRequest(UniversalBaseModel):
11
11
  type: typing.Literal["VIDEO"] = "VIDEO"
12
- value: VellumVideoRequest
12
+ value: typing.Optional[VellumVideoRequest] = None
13
13
  name: str
14
14
 
15
15
  if IS_PYDANTIC_V2:
@@ -11,6 +11,7 @@ class SlimComposioToolDefinition(UniversalBaseModel):
11
11
  provider: typing.Literal["COMPOSIO"] = "COMPOSIO"
12
12
  integration: ToolDefinitionIntegration
13
13
  name: str
14
+ label: str
14
15
  description: str
15
16
 
16
17
  if IS_PYDANTIC_V2:
@@ -4,6 +4,7 @@ import typing
4
4
 
5
5
  import pydantic
6
6
  from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .integration_auth_config_integration import IntegrationAuthConfigIntegration
7
8
  from .integration_auth_config_integration_credential import IntegrationAuthConfigIntegrationCredential
8
9
  from .integration_credential_access_type import IntegrationCredentialAccessType
9
10
 
@@ -13,7 +14,8 @@ class SlimIntegrationAuthConfigRead(UniversalBaseModel):
13
14
  A slim representation of an Integration Auth Config.
14
15
  """
15
16
 
16
- id: typing.Optional[str] = None
17
+ id: str
18
+ integration: IntegrationAuthConfigIntegration
17
19
  integration_credentials: typing.Optional[typing.List[IntegrationAuthConfigIntegrationCredential]] = None
18
20
  default_access_type: typing.Optional[IntegrationCredentialAccessType] = None
19
21
 
@@ -9,7 +9,7 @@ from .integration_provider import IntegrationProvider
9
9
 
10
10
 
11
11
  class SlimIntegrationRead(UniversalBaseModel):
12
- id: typing.Optional[str] = None
12
+ id: str
13
13
  label: typing.Optional[str] = None
14
14
  icon_url: str
15
15
  name: IntegrationName
@@ -15,7 +15,7 @@ class TestCaseAudioVariableValue(UniversalBaseModel):
15
15
  variable_id: str
16
16
  name: typing.Optional[str] = None
17
17
  type: typing.Literal["AUDIO"] = "AUDIO"
18
- value: VellumAudio
18
+ value: typing.Optional[VellumAudio] = None
19
19
 
20
20
  if IS_PYDANTIC_V2:
21
21
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -15,7 +15,7 @@ class TestCaseDocumentVariableValue(UniversalBaseModel):
15
15
  variable_id: str
16
16
  name: typing.Optional[str] = None
17
17
  type: typing.Literal["DOCUMENT"] = "DOCUMENT"
18
- value: VellumDocument
18
+ value: typing.Optional[VellumDocument] = None
19
19
 
20
20
  if IS_PYDANTIC_V2:
21
21
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -15,7 +15,7 @@ class TestCaseImageVariableValue(UniversalBaseModel):
15
15
  variable_id: str
16
16
  name: typing.Optional[str] = None
17
17
  type: typing.Literal["IMAGE"] = "IMAGE"
18
- value: VellumImage
18
+ value: typing.Optional[VellumImage] = None
19
19
 
20
20
  if IS_PYDANTIC_V2:
21
21
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -15,7 +15,7 @@ class TestCaseVideoVariableValue(UniversalBaseModel):
15
15
  variable_id: str
16
16
  name: typing.Optional[str] = None
17
17
  type: typing.Literal["VIDEO"] = "VIDEO"
18
- value: VellumVideo
18
+ value: typing.Optional[VellumVideo] = None
19
19
 
20
20
  if IS_PYDANTIC_V2:
21
21
  model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -9,7 +9,7 @@ from .integration_provider import IntegrationProvider
9
9
 
10
10
 
11
11
  class ToolDefinitionIntegration(UniversalBaseModel):
12
- id: typing.Optional[str] = None
12
+ id: str
13
13
  provider: IntegrationProvider = "COMPOSIO"
14
14
  name: IntegrationName
15
15
 
@@ -0,0 +1,3 @@
1
+ # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
+
3
+ from vellum.client.types.integration_auth_config_integration import *
@@ -21,6 +21,7 @@ class WorkflowErrorCode(Enum):
21
21
  INTERNAL_ERROR = "INTERNAL_ERROR"
22
22
  NODE_EXECUTION = "NODE_EXECUTION"
23
23
  PROVIDER_CREDENTIALS_UNAVAILABLE = "PROVIDER_CREDENTIALS_UNAVAILABLE"
24
+ INTEGRATION_CREDENTIALS_UNAVAILABLE = "INTEGRATION_CREDENTIALS_UNAVAILABLE"
24
25
  PROVIDER_ERROR = "PROVIDER_ERROR"
25
26
  USER_DEFINED_ERROR = "USER_DEFINED_ERROR"
26
27
  WORKFLOW_CANCELLED = "WORKFLOW_CANCELLED"
@@ -92,6 +93,8 @@ _WORKFLOW_ERROR_CODE_TO_VELLUM_ERROR_CODE: Dict[WorkflowErrorCode, VellumErrorCo
92
93
  WorkflowErrorCode.INTERNAL_ERROR: "INTERNAL_SERVER_ERROR",
93
94
  WorkflowErrorCode.NODE_EXECUTION: "USER_DEFINED_ERROR",
94
95
  WorkflowErrorCode.PROVIDER_ERROR: "PROVIDER_ERROR",
96
+ WorkflowErrorCode.PROVIDER_CREDENTIALS_UNAVAILABLE: "PROVIDER_CREDENTIALS_UNAVAILABLE",
97
+ WorkflowErrorCode.INTEGRATION_CREDENTIALS_UNAVAILABLE: "PROVIDER_CREDENTIALS_UNAVAILABLE",
95
98
  WorkflowErrorCode.USER_DEFINED_ERROR: "USER_DEFINED_ERROR",
96
99
  WorkflowErrorCode.WORKFLOW_CANCELLED: "REQUEST_TIMEOUT",
97
100
  }
@@ -19,6 +19,7 @@ def test_vellum_integration_service_get_tool_definition_success(vellum_client):
19
19
  provider="COMPOSIO",
20
20
  name="GITHUB",
21
21
  ),
22
+ label="GITHUB_CREATE_AN_ISSUE",
22
23
  name="GITHUB_CREATE_AN_ISSUE",
23
24
  description="Create a new issue in a GitHub repository",
24
25
  input_parameters={
@@ -211,3 +212,86 @@ def test_vellum_integration_service_multiple_tool_executions(vellum_client):
211
212
 
212
213
  # AND the API should have been called twice
213
214
  assert mock_client.integrations.execute_integration_tool.call_count == 2
215
+
216
+
217
+ def test_vellum_integration_service_execute_tool_structured_403_error(vellum_client):
218
+ """Test that structured 403 responses with integration details are properly parsed"""
219
+ from vellum.client.core.api_error import ApiError
220
+ from vellum.workflows.errors.types import WorkflowErrorCode
221
+
222
+ mock_client = vellum_client
223
+ mock_client.integrations = mock.MagicMock()
224
+
225
+ # Mock structured 403 response matching PR #14857 format
226
+ structured_error_body = {
227
+ "message": "You must authenticate with this integration before you can execute this tool.",
228
+ "integration": {
229
+ "id": "550e8400-e29b-41d4-a716-446655440000",
230
+ "provider": "COMPOSIO",
231
+ "name": "GITHUB",
232
+ },
233
+ }
234
+
235
+ mock_client.integrations.execute_integration_tool.side_effect = ApiError(
236
+ status_code=403,
237
+ body=structured_error_body,
238
+ )
239
+
240
+ service = VellumIntegrationService(client=mock_client)
241
+
242
+ # WHEN we attempt to execute a tool without credentials
243
+ with pytest.raises(NodeException) as exc_info:
244
+ service.execute_tool(
245
+ integration="GITHUB",
246
+ provider="COMPOSIO",
247
+ tool_name="GITHUB_CREATE_AN_ISSUE",
248
+ arguments={"repo": "user/repo"},
249
+ )
250
+
251
+ # THEN it should raise NodeException with INTEGRATION_CREDENTIALS_UNAVAILABLE code
252
+ assert exc_info.value.code == WorkflowErrorCode.INTEGRATION_CREDENTIALS_UNAVAILABLE
253
+
254
+ # AND the error message should match the backend response
255
+ assert "You must authenticate with this integration" in exc_info.value.message
256
+
257
+ # AND raw_data should contain integration details nested under "integration" key
258
+ assert exc_info.value.raw_data is not None
259
+ assert exc_info.value.raw_data["integration"]["id"] == "550e8400-e29b-41d4-a716-446655440000"
260
+ assert exc_info.value.raw_data["integration"]["name"] == "GITHUB"
261
+ assert exc_info.value.raw_data["integration"]["provider"] == "COMPOSIO"
262
+
263
+
264
+ def test_vellum_integration_service_execute_tool_legacy_403_error(vellum_client):
265
+ """Test backward compatibility with legacy 403 responses (before PR #14857)"""
266
+ from vellum.client.core.api_error import ApiError
267
+ from vellum.workflows.errors.types import WorkflowErrorCode
268
+
269
+ mock_client = vellum_client
270
+ mock_client.integrations = mock.MagicMock()
271
+
272
+ # Mock legacy 403 response format (just detail field)
273
+ legacy_error_body = {"detail": "You do not have permission to execute this tool."}
274
+
275
+ mock_client.integrations.execute_integration_tool.side_effect = ApiError(
276
+ status_code=403,
277
+ body=legacy_error_body,
278
+ )
279
+
280
+ service = VellumIntegrationService(client=mock_client)
281
+
282
+ with pytest.raises(NodeException) as exc_info:
283
+ service.execute_tool(
284
+ integration="GITHUB",
285
+ provider="COMPOSIO",
286
+ tool_name="GITHUB_CREATE_AN_ISSUE",
287
+ arguments={"repo": "user/repo"},
288
+ )
289
+
290
+ # THEN it should use the generic PROVIDER_CREDENTIALS_UNAVAILABLE code
291
+ assert exc_info.value.code == WorkflowErrorCode.PROVIDER_CREDENTIALS_UNAVAILABLE
292
+
293
+ # AND the message should match the legacy format
294
+ assert "You do not have permission" in exc_info.value.message
295
+
296
+ # AND raw_data should be None (no integration details available)
297
+ assert exc_info.value.raw_data is None
@@ -1,5 +1,6 @@
1
1
  from typing import Any, Dict, Optional
2
2
 
3
+ from vellum.client.core.api_error import ApiError
3
4
  from vellum.workflows.constants import VellumIntegrationProviderType
4
5
  from vellum.workflows.errors.types import WorkflowErrorCode
5
6
  from vellum.workflows.exceptions import NodeException
@@ -47,7 +48,7 @@ class VellumIntegrationService:
47
48
 
48
49
  return VellumIntegrationToolDetails(
49
50
  provider=VellumIntegrationProviderType(response.provider),
50
- integration=integration,
51
+ integration_name=integration,
51
52
  name=response.name,
52
53
  description=response.description,
53
54
  parameters=response.input_parameters,
@@ -78,7 +79,8 @@ class VellumIntegrationService:
78
79
  Dict containing the execution result data
79
80
 
80
81
  Raises:
81
- NodeException: If the tool execution fails
82
+ NodeException: If the tool execution fails, including credential errors
83
+ with integration details in raw_data
82
84
  """
83
85
  try:
84
86
  response = self._client.integrations.execute_integration_tool(
@@ -90,7 +92,37 @@ class VellumIntegrationService:
90
92
 
91
93
  # Return the data from the response
92
94
  return response.data
95
+ except ApiError as e:
96
+ # Handle structured 403 credential error responses
97
+ if e.status_code == 403 and isinstance(e.body, dict):
98
+ if "integration" in e.body and "message" in e.body:
99
+ integration_details = e.body["integration"]
100
+ error_message = e.body["message"]
101
+
102
+ # Keep integration details nested under "integration" key to keep raw_data raw
103
+ # and allow for future expansion
104
+ raw_data = {
105
+ "integration": integration_details,
106
+ }
107
+
108
+ raise NodeException(
109
+ message=error_message,
110
+ code=WorkflowErrorCode.INTEGRATION_CREDENTIALS_UNAVAILABLE,
111
+ raw_data=raw_data,
112
+ ) from e
113
+ else:
114
+ # Fallback for generic 403 responses
115
+ raise NodeException(
116
+ message=e.body.get("detail", "You do not have permission to execute this tool."),
117
+ code=WorkflowErrorCode.PROVIDER_CREDENTIALS_UNAVAILABLE,
118
+ ) from e
119
+ # Generic server error
120
+ raise NodeException(
121
+ message=f"Failed to execute tool {tool_name}: {str(e)}",
122
+ code=WorkflowErrorCode.INTERNAL_ERROR,
123
+ ) from e
93
124
  except Exception as e:
125
+ # Catch-all for non-API errors
94
126
  error_message = f"Failed to execute tool {tool_name}: {str(e)}"
95
127
  raise NodeException(
96
128
  message=error_message,
@@ -275,7 +275,7 @@ class VellumIntegrationNode(BaseNode[ToolCallingState], FunctionCallNodeMixin):
275
275
  try:
276
276
  vellum_service = VellumIntegrationService()
277
277
  result = vellum_service.execute_tool(
278
- integration=self.vellum_integration_tool.integration,
278
+ integration=self.vellum_integration_tool.integration_name,
279
279
  provider=self.vellum_integration_tool.provider.value,
280
280
  tool_name=self.vellum_integration_tool.name,
281
281
  arguments=arguments,
@@ -96,7 +96,10 @@ class Port:
96
96
  if self._condition is None:
97
97
  return False
98
98
 
99
- value = self._condition.resolve(state)
99
+ if isinstance(self._condition, BaseDescriptor):
100
+ value = self._condition.resolve(state)
101
+ else:
102
+ value = self._condition
100
103
  return bool(value)
101
104
  except InvalidExpressionException as e:
102
105
  raise NodeException(
@@ -0,0 +1,45 @@
1
+ import pytest
2
+ from unittest.mock import Mock
3
+
4
+ from vellum.workflows.ports.port import Port
5
+ from vellum.workflows.state.base import BaseState
6
+ from vellum.workflows.types.core import ConditionType
7
+
8
+
9
+ @pytest.mark.parametrize(
10
+ "condition_value,expected",
11
+ [
12
+ # Truthy values
13
+ (True, True),
14
+ (1, True),
15
+ ("hello", True),
16
+ ([1, 2, 3], True),
17
+ ({"key": "value"}, True),
18
+ (1.5, True),
19
+ (-1, True),
20
+ # Falsy values
21
+ (False, False),
22
+ (0, False),
23
+ ("", False),
24
+ ([], False),
25
+ ({}, False),
26
+ (0.0, False),
27
+ (None, False),
28
+ ],
29
+ )
30
+ def test_port_on_if_with_non_descriptor_values(condition_value, expected):
31
+ """Test that Port.on_if() correctly handles non-descriptor values."""
32
+
33
+ # Given a port with a non-descriptor value
34
+ port = Port.on_if(condition_value)
35
+
36
+ # Then the port properties should be correct
37
+ assert port._condition_type == ConditionType.IF
38
+ assert port._condition == condition_value
39
+
40
+ # When we resolve the condition
41
+ mock_state = Mock(spec=BaseState)
42
+ result = port.resolve_condition(mock_state)
43
+
44
+ # Then the result should be correct
45
+ assert result == expected
@@ -170,7 +170,7 @@ class VellumIntegrationToolDefinition(UniversalBaseModel):
170
170
 
171
171
  # Core identification
172
172
  provider: VellumIntegrationProviderType
173
- integration: str # "GITHUB", "SLACK", etc.
173
+ integration_name: str # "GITHUB", "SLACK", etc.
174
174
  name: str # Specific action like "GITHUB_CREATE_AN_ISSUE"
175
175
 
176
176
  # Required for tool base consistency
@@ -155,14 +155,14 @@ def test_vellum_integration_tool_definition_creation():
155
155
  """Test that VellumIntegrationToolDefinition can be created with required fields."""
156
156
  vellum_tool = VellumIntegrationToolDefinition(
157
157
  provider=VellumIntegrationProviderType.COMPOSIO,
158
- integration="GITHUB",
158
+ integration_name="GITHUB",
159
159
  name="create_issue",
160
160
  description="Create a new issue in a GitHub repository",
161
161
  )
162
162
 
163
163
  assert vellum_tool.type == "VELLUM_INTEGRATION"
164
164
  assert vellum_tool.provider == VellumIntegrationProviderType.COMPOSIO
165
- assert vellum_tool.integration == "GITHUB"
165
+ assert vellum_tool.integration_name == "GITHUB"
166
166
  assert vellum_tool.name == "create_issue"
167
167
  assert vellum_tool.description == "Create a new issue in a GitHub repository"
168
168
 
@@ -171,13 +171,13 @@ def test_vellum_integration_tool_definition_with_different_provider():
171
171
  """Test VellumIntegrationToolDefinition with a different provider."""
172
172
  vellum_tool = VellumIntegrationToolDefinition(
173
173
  provider=VellumIntegrationProviderType.COMPOSIO,
174
- integration="SLACK",
174
+ integration_name="SLACK",
175
175
  name="send_message",
176
176
  description="Send a message to a Slack channel",
177
177
  )
178
178
 
179
179
  assert vellum_tool.type == "VELLUM_INTEGRATION"
180
180
  assert vellum_tool.provider == VellumIntegrationProviderType.COMPOSIO
181
- assert vellum_tool.integration == "SLACK"
181
+ assert vellum_tool.integration_name == "SLACK"
182
182
  assert vellum_tool.name == "send_message"
183
183
  assert vellum_tool.description == "Send a message to a Slack channel"
@@ -335,7 +335,7 @@ def compile_vellum_integration_tool_definition(tool_def: VellumIntegrationToolDe
335
335
  try:
336
336
  service = VellumIntegrationService()
337
337
  tool_details = service.get_tool_definition(
338
- integration=tool_def.integration,
338
+ integration=tool_def.integration_name,
339
339
  provider=tool_def.provider.value,
340
340
  tool_name=tool_def.name,
341
341
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.5.5
3
+ Version: 1.6.0
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0
@@ -105,7 +105,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling
105
105
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_mcp_serialization.py,sha256=QhQbijeCnFeX1i3SMjHJg2WVAEt5JEO3dhFRv-mofdA,2458
106
106
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_parent_input.py,sha256=__LX4cuzbyZp_1wc-SI8X_J0tnhOkCEmRVUWLKI5aQM,4578
107
107
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=5yaoN5aM6VZZtsleQcSWpbNyWLE1nTnMF6KbLmCrlc8,10437
108
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py,sha256=A04hk1sQek6fs2Xd9a1ICc_L6uqIr8lx6f_djxbLKjs,2846
108
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py,sha256=zvLgIIgKTjAV5ObvqfoR7U-HSdOnGgOKxcCLoq5-Jvk,2851
109
109
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=XIZZr5POo2NLn2uEWm9EC3rejeBMoO4X-JtzTH6mvp4,4074
110
110
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=pLCyMScV88DTBXRH7jXaXOEA1GBq8NIipCUFwIAWnwI,2771
111
111
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=exT7U-axwtYgFylagScflSQLJEND51qIAx2UATju6JM,6023
@@ -154,12 +154,12 @@ vellum_ee/workflows/tests/test_registry.py,sha256=B8xRIuEyLWfSqrYoPldNQXhKPfe50P
154
154
  vellum_ee/workflows/tests/test_serialize_module.py,sha256=d4ZpMd3oIxiq-sBXeSQESS6ix6-1P6rdCRFqBEReJIU,2882
155
155
  vellum_ee/workflows/tests/test_server.py,sha256=dXFBraU99Y6cKp2aBhLFXQTScSRcE9WaWjo1z9piqdU,23344
156
156
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
157
- vellum/__init__.py,sha256=0humJhIOX0IANpvHGjYKe_LAH2cw5LoiHymySoNablk,49278
157
+ vellum/__init__.py,sha256=i7aah42VTp3735JX69uHUipLZBD8PwX_CXUY_9t-zuY,49356
158
158
  vellum/client/README.md,sha256=flqu57ubZNTfpq60CdLtJC9gp4WEkyjb_n_eZ4OYf9w,6497
159
159
  vellum/client/__init__.py,sha256=rMnKRqL5-356SBc-rfm56MkO87PuAi2mtcfBszcJU1M,74316
160
160
  vellum/client/core/__init__.py,sha256=lTcqUPXcx4112yLDd70RAPeqq6tu3eFMe1pKOqkW9JQ,1562
161
161
  vellum/client/core/api_error.py,sha256=44vPoTyWN59gonCIZMdzw7M1uspygiLnr3GNFOoVL2Q,614
162
- vellum/client/core/client_wrapper.py,sha256=v7MT-SaBryjXgbAd-yE7eS8cXU8G2uvvUwYaWTIPKo8,2840
162
+ vellum/client/core/client_wrapper.py,sha256=lIaqax7YzeEvA_w0qUa4z08y8ZmFFnxRnQiZtMqLJNE,2840
163
163
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
164
164
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
165
165
  vellum/client/core/force_multipart.py,sha256=awxh5MtcRYe74ehY8U76jzv6fYM_w_D3Rur7KQQzSDk,429
@@ -265,7 +265,7 @@ vellum/client/resources/workspaces/client.py,sha256=36KYa2FDu6h65q2GscUFOJs4qKei
265
265
  vellum/client/resources/workspaces/raw_client.py,sha256=M3Ewk1ZfEZ44EeTvBtBNoNKi5whwfLY-1GR07SyfDTI,3517
266
266
  vellum/client/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
267
  vellum/client/tests/test_utils.py,sha256=zk8z45-2xrm9sZ2hq8PTqY8MXmXtPqMqYK0VBBX0GHg,1176
268
- vellum/client/types/__init__.py,sha256=wv2dqw6XrNq6zB7YfSH5A67YLfpIMSjuTWvkziB2LKo,74575
268
+ vellum/client/types/__init__.py,sha256=KwWQ6Bw5bxx2PIECWgxnTdbht-saV-fcPFDVNDA9g-g,74697
269
269
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=B69EesIH6fpNsdoiJaSG9zF1Sl17FnjoTu4CBkUSoHk,608
270
270
  vellum/client/types/ad_hoc_expand_meta.py,sha256=Kajcj3dKKed5e7uZibRnE3ZonK_bB2JPM-3aLjLfUp4,1295
271
271
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=5kD6ZcbU8P8ynK0lMD8Mh7vHzvQt06ziMyphvWYg6FU,968
@@ -339,7 +339,7 @@ vellum/client/types/components_schemas_slim_composio_tool_definition.py,sha256=G
339
339
  vellum/client/types/composio_execute_tool_request.py,sha256=HmH2nKizSIWWUK6ENSqIytAJEAE1VTAX4JbGVXcaEhQ,730
340
340
  vellum/client/types/composio_execute_tool_response.py,sha256=XPV1x_S5weq_8WVfM_UGdI48aHJZVLGuS34ZLCNPiW4,728
341
341
  vellum/client/types/composio_integration_exec_config.py,sha256=NwTMyx09b3J7-sp6arTJXI7tB4inw2jE5jVwLPAjrGI,586
342
- vellum/client/types/composio_tool_definition.py,sha256=-C25uHVWPQWkEHFxnXXCWib7fTxlM7A4lNwqIEtkqNM,922
342
+ vellum/client/types/composio_tool_definition.py,sha256=nYTRala8QnC373i15-fhN-RhmQiUIz6GRG3Kbi6KFFU,937
343
343
  vellum/client/types/condition_combinator.py,sha256=NQ6-F85juf21jsRuZRA6PjIFv7ITVWG5myuuZdLxeQI,156
344
344
  vellum/client/types/conditional_node_result.py,sha256=nN5fZPgjyWQU_McV3sL_NcgW1V1VWU-KBIFgGTyOZdo,748
345
345
  vellum/client/types/conditional_node_result_data.py,sha256=Ui44n0Vd00O0RKzWb_mjOl8lVuV8XKOFNCYLple8L_8,568
@@ -482,11 +482,12 @@ vellum/client/types/initiated_prompt_execution_meta.py,sha256=5sbNQJdyjkHZvkt2Eu
482
482
  vellum/client/types/initiated_workflow_node_result_event.py,sha256=bANCbRTVoklNXjs3-nwGA5G_TK1j0FaqdrVHonl5ZLA,1311
483
483
  vellum/client/types/instructor_vectorizer_config.py,sha256=5weLeldZKmA9cWf3Xcoe_Zn9_M9jSlWvxVj9Ml3GgcM,695
484
484
  vellum/client/types/instructor_vectorizer_config_request.py,sha256=B5Wy5FI8utwi4sIvwFTK0evd78pbM9ic9jO6pBM2dFw,702
485
- vellum/client/types/integration_auth_config_integration_credential.py,sha256=baajQzNq8DbD927G15z0-nxRuUvgCVp8qpYxnIDmPSo,571
485
+ vellum/client/types/integration_auth_config_integration.py,sha256=W3DrzVPwLrqm0wCYVF-sHyQPoKNxoliFgFJWEwW_Yqc,710
486
+ vellum/client/types/integration_auth_config_integration_credential.py,sha256=lUNuJ1GyFps3M85Mff1C-SAeEacCMkJdmayFfYrTFXA,547
486
487
  vellum/client/types/integration_credential_access_type.py,sha256=sWkuDjW3aD7ApZ1xQ7Bu8g5kCIwqUqzm1TDliUQWeRI,178
487
488
  vellum/client/types/integration_name.py,sha256=SzwAJ2xbIZ94yog1D_Zpd8cH_XEFZG0ygzGdZojEPbo,378
488
489
  vellum/client/types/integration_provider.py,sha256=lIh3yPyPEzmSAu8L4Gsd-iDkmDSNobo0_TB75zMtIXk,129
489
- vellum/client/types/integration_read.py,sha256=5OoJaYU7CSJS6zq39-tgK4RR0pM5TUxVLuFYfZT-lQk,1059
490
+ vellum/client/types/integration_read.py,sha256=sUNCS01TIlHPJHEH3ZheIbPi-CplbFQ5XAV1QtOO1Gg,1035
490
491
  vellum/client/types/invoked_port.py,sha256=nw2k-y7NrpcH6T1V96U3F8_pbrsceqBPIz3RQXN8gJY,518
491
492
  vellum/client/types/iteration_state_enum.py,sha256=83JSh842OJgQiLtNn1KMimy6RlEYRVH3mDmYWS6Ewzo,180
492
493
  vellum/client/types/jinja_prompt_block.py,sha256=IRWwjk9sGoF49bycXzWP_XYo8fksglZ0hu5geCTystM,903
@@ -522,18 +523,18 @@ vellum/client/types/named_scenario_input_string_variable_value_request.py,sha256
522
523
  vellum/client/types/named_scenario_input_video_variable_value_request.py,sha256=8j00EtL57E7ATsI7AdIYcMqJ5j2mVEyIKCl7h7jPSbs,677
523
524
  vellum/client/types/named_test_case_array_variable_value.py,sha256=cV_1PW-I1FGuNQewPgYTD_5khsPFIbOufgsXp5H_tSA,961
524
525
  vellum/client/types/named_test_case_array_variable_value_request.py,sha256=TrWmGV7W6Lf_vVn6oxHoPbW54yLnH4FmmULDL5ymcso,1012
525
- vellum/client/types/named_test_case_audio_variable_value.py,sha256=l5fAevDfShJDN_qUwiSkV2BmCFHWzz8km3sYoeqUuuI,708
526
- vellum/client/types/named_test_case_audio_variable_value_request.py,sha256=louXhEKLJIHzs1YxACNG73zf9JZJ7r04fTJo6cKLv6s,737
526
+ vellum/client/types/named_test_case_audio_variable_value.py,sha256=OF9drcRb2vHC5AxMjg3BJiixW0cEyk0kzM0L8sGykHQ,732
527
+ vellum/client/types/named_test_case_audio_variable_value_request.py,sha256=Yw1ckqV8JO5EuwGGvNer_BR2J_mS-ChbHn9T1JavXt4,761
527
528
  vellum/client/types/named_test_case_chat_history_variable_value.py,sha256=NyUPAAD9jq36LpOLq1dtc6Ro7ehTNeJ6zbcPXUA6a-U,772
528
529
  vellum/client/types/named_test_case_chat_history_variable_value_request.py,sha256=UuW870U5peUbWRNkYyMohP1QWdiRTBgO4dm-Y0MQ6KY,801
529
- vellum/client/types/named_test_case_document_variable_value.py,sha256=pfZr0BvBR4iV_rTUDLgSUpBrOAXr09jz21obMfdXQiw,661
530
- vellum/client/types/named_test_case_document_variable_value_request.py,sha256=Wk7MqfYVVJW5DgFXuj18HqaNReaP-coDBFmX59G_cTE,690
530
+ vellum/client/types/named_test_case_document_variable_value.py,sha256=YYzZdjSYcHl9BOP3l7nxpB4mkKXQhxZkDEdRhXcGOtU,685
531
+ vellum/client/types/named_test_case_document_variable_value_request.py,sha256=WtWz-91TJpR-GWGvMKcQ1AJ5dHLvLeQYwdXl2mZrA5c,714
531
532
  vellum/client/types/named_test_case_error_variable_value.py,sha256=uKE5Jimkl3_FD3W6GvqKLTzH4JbCIDWVAcCchantznk,732
532
533
  vellum/client/types/named_test_case_error_variable_value_request.py,sha256=Z0i5sygB9n_WMQx8Df8r-SsgLtYOsoESSms9iXK8FJ8,761
533
534
  vellum/client/types/named_test_case_function_call_variable_value.py,sha256=ZDOLgkI_GLBdF1rWYbfJSqBd_EHY51rzsWhigse0hUk,766
534
535
  vellum/client/types/named_test_case_function_call_variable_value_request.py,sha256=fcJwzazgElhrl1xJ2xja_-H7WdMVLoP9zV4rUYoCZM4,795
535
- vellum/client/types/named_test_case_image_variable_value.py,sha256=Ct3Z_MggnnMlRGsjVWmHEpVGDrnyXl8bLW7o4wfoRBg,643
536
- vellum/client/types/named_test_case_image_variable_value_request.py,sha256=dBkiRT_rtiwzhH8zoQHW4f1spuNEsgMKvfd51ugbffM,672
536
+ vellum/client/types/named_test_case_image_variable_value.py,sha256=9u4_AqeUiwaxspaF--sObDPg305l0J5x35pxffgZPj4,667
537
+ vellum/client/types/named_test_case_image_variable_value_request.py,sha256=80QJJzUoBnkQiicbMfu6-98rkTRBMsHXmdveuTsqNSI,696
537
538
  vellum/client/types/named_test_case_json_variable_value.py,sha256=wUVC_9Y7jfuZ2PZ_V14AFa9OlTHHtvuHmYuY4ln7ElA,689
538
539
  vellum/client/types/named_test_case_json_variable_value_request.py,sha256=G69Y9sXwpi8WUqXVLiwJ_R2dwNNMUKyEF0DF-3r6ElA,696
539
540
  vellum/client/types/named_test_case_number_variable_value.py,sha256=5WWDFcwIZJEcX3ua3Ou3fI2KiRLLEs8-B7TP0FH6ni8,692
@@ -544,8 +545,8 @@ vellum/client/types/named_test_case_string_variable_value.py,sha256=CtoNBWDHfVnt
544
545
  vellum/client/types/named_test_case_string_variable_value_request.py,sha256=99Dflz57ePdjo2vOsTnHEhd6_A_Viyq_jLZ2gCbpIhQ,697
545
546
  vellum/client/types/named_test_case_variable_value.py,sha256=_kZoWpgTToCB4Cr7vJIlI4dAwsiQDbGeGXIixeEciZc,1632
546
547
  vellum/client/types/named_test_case_variable_value_request.py,sha256=jDVzZ5VPFjzUyblcoDq9S-Lh2NN9yix3J2Ubv1TwmSw,1903
547
- vellum/client/types/named_test_case_video_variable_value.py,sha256=nztLFVO1Sltf2H8Bx24qC_iB-yjsRxqfK5wNUdWf1xw,643
548
- vellum/client/types/named_test_case_video_variable_value_request.py,sha256=CS9GQq3ziCfjQtYgTPRw5BNj30lsSUf_gYiNyDmwg9M,672
548
+ vellum/client/types/named_test_case_video_variable_value.py,sha256=8lTwnF_kArykf8a2i73xULUP1zNQeeF_KA_UE27AWXg,667
549
+ vellum/client/types/named_test_case_video_variable_value_request.py,sha256=pErjItSd2CoquJtiSW8uz5oDTvS1LMuB_ocWCvs1oWk,696
549
550
  vellum/client/types/new_member_join_behavior_enum.py,sha256=s9Z_6JKM6R4gPNtIJYCe84_DNBHucj6dHOx6bdFPoLo,258
550
551
  vellum/client/types/node_execution_fulfilled_body.py,sha256=foRkObll1ZBsh3Po6tHT6CKnDcUaMFEoQWc-rjLDn7A,849
551
552
  vellum/client/types/node_execution_fulfilled_event.py,sha256=WRuXDamUa4FefGgRC6JAoDRrPlEf9AbC74EZxSH24E4,1897
@@ -699,12 +700,12 @@ vellum/client/types/sentence_chunker_config.py,sha256=WQGyc0jUiATYhQ7ezbBN06--ul
699
700
  vellum/client/types/sentence_chunker_config_request.py,sha256=Da2ANuD4icLxI74emC4z2EEZjeY2k1w9HnEQt2g1AvI,680
700
701
  vellum/client/types/sentence_chunking.py,sha256=MyEImiN0dhWEVFvD76Q6mCqIEjZcyY__Hhu0j9Gjs6Y,747
701
702
  vellum/client/types/sentence_chunking_request.py,sha256=itrdqiKJJ7UKWVGTfj9sJu3kMSThkBF_Qj-3KqFunP4,776
702
- vellum/client/types/slim_composio_tool_definition.py,sha256=6biQasvtevBsS9EjJ66GVHAC9G0o54l2VMfHORzc8Ac,718
703
+ vellum/client/types/slim_composio_tool_definition.py,sha256=1wQRXqS4-DVq0JO8F7L2Vcnng1eSBLO1Z25tzAt_t28,733
703
704
  vellum/client/types/slim_deployment_read.py,sha256=lEJ8Fx7QSmqjEK-LcR0y_hX2ywcaPbYjxINwPGy_ofw,1733
704
705
  vellum/client/types/slim_document.py,sha256=aytvaz8SF6MSSEA3iLXP7ZgZOw33CA-_bv2iSj5cH24,2409
705
706
  vellum/client/types/slim_document_document_to_document_index.py,sha256=Ogo8OFjtmcHjDmIynB9vckfjSZxFNhKM-cYpqSfREGI,1515
706
- vellum/client/types/slim_integration_auth_config_read.py,sha256=Yqimir8_WiEkXuox37qmve5ISAfvFyZ5cGfzrdu7a0E,1005
707
- vellum/client/types/slim_integration_read.py,sha256=QHrr9aKoh2ZnWU49ZgKinCZRfZoaMov_ASowuQQheis,778
707
+ vellum/client/types/slim_integration_auth_config_read.py,sha256=hfC4ABz7g1zc6A30TyyBA-W55TUZRzkFMf0iMjHgBSc,1113
708
+ vellum/client/types/slim_integration_read.py,sha256=hKc9a85Vi7WNIq6JDPABettHUz-vmV-ViXRsoIpD_MY,754
708
709
  vellum/client/types/slim_release_review.py,sha256=vWNkPXk5wZ_scHsWHz_77PfMZRDn-4qUkqVbCKqY1zQ,747
709
710
  vellum/client/types/slim_workflow_deployment.py,sha256=jIciGPCW9QNtDRdq3w_zUdrrE4cg1LWkcoyGM-L6cs0,2085
710
711
  vellum/client/types/slim_workflow_execution_read.py,sha256=6Ep2iQ6tWTCGxzvAh4t3G_4BjHQ3_JZ9WFdc81XGqkA,2302
@@ -747,18 +748,18 @@ vellum/client/types/terminal_node_result_output.py,sha256=hOzkyk90PDY2ZGd0JSrlEh
747
748
  vellum/client/types/terminal_node_search_results_result.py,sha256=jXRnFcB7aSpEP7ivEk1rCd0jtDP3pXOODEuEhCm_Lt4,847
748
749
  vellum/client/types/terminal_node_string_result.py,sha256=Fj4v9vZI5gijB9xtrQ7u6ue7TgDmeA3ziW3yxuZbGUw,762
749
750
  vellum/client/types/test_case_array_variable_value.py,sha256=_SLmKw4QDYnUjk1rtdJgXyQ0wrEHRXOSS7mmTFcjniM,974
750
- vellum/client/types/test_case_audio_variable_value.py,sha256=tTWipY4ZuUfVNibNR6Iy_MHC__Fp4nf3ofCLVy1_PtM,750
751
+ vellum/client/types/test_case_audio_variable_value.py,sha256=WrZvvEhlwcuGpDrkChBF4Atwprgrw9LQ7hXhvmCSbxQ,774
751
752
  vellum/client/types/test_case_chat_history_variable_value.py,sha256=YDKIN6Kmk0iE_zjVZP60JK7gGkBTgqGtLPRjYuzmC1Q,789
752
- vellum/client/types/test_case_document_variable_value.py,sha256=jzjTDAWYGfqpxrjSSmwAC5yznGCgoMDdSZXCXLxpXF8,770
753
+ vellum/client/types/test_case_document_variable_value.py,sha256=6OPaqWms55sia4fGkXKkVWLIXlcib-2nTzOxwg9CM_8,794
753
754
  vellum/client/types/test_case_error_variable_value.py,sha256=XE0LthR-AFjn4gAYIGdjaB0EoRUNYxiU1KrnvWiGOGE,750
754
755
  vellum/client/types/test_case_function_call_variable_value.py,sha256=8l3L_bt4MwmdoejHVgL25rPjqMI1AmPZTljyREXe9Fg,783
755
- vellum/client/types/test_case_image_variable_value.py,sha256=dkXp_CQjokcBUidjNYkx9z0lwv56CEhGktyGTEBsOOg,750
756
+ vellum/client/types/test_case_image_variable_value.py,sha256=3_2tTQBYQwOoEAe7Mcrx3meFr7WY4fSZ0ppl92xHQYA,774
756
757
  vellum/client/types/test_case_json_variable_value.py,sha256=-wy1WvxTZcKSVFhrpdJ7GukQBmYOokxeIDxF798Epzw,706
757
758
  vellum/client/types/test_case_number_variable_value.py,sha256=im2Ouf0e869f4SEZKah6564-UEKBmyu89DYvj1fg1io,712
758
759
  vellum/client/types/test_case_search_results_variable_value.py,sha256=UDkPZPUbQ0ymfEsxrcBSfA9P3XvUf7hvs3ivREuBJ1w,800
759
760
  vellum/client/types/test_case_string_variable_value.py,sha256=L6qt-PCBp6m6g8BZgiy8tePIHm58ThnxDbPEKkAnEKQ,707
760
761
  vellum/client/types/test_case_variable_value.py,sha256=eIifSIZQtCI9x3CqX5Sojdvq97TFeFIzFtah3VmIRIU,1435
761
- vellum/client/types/test_case_video_variable_value.py,sha256=4EHIq1aVCtxtY70p3qhDPUC_WlPZvVD2kCbUt3f0yNM,749
762
+ vellum/client/types/test_case_video_variable_value.py,sha256=b19K3fos6A7xG_djQ_vKad8GYlNtZmTKNlFdqDM_0MI,773
762
763
  vellum/client/types/test_suite_run_deployment_release_tag_exec_config.py,sha256=Z8xAr72cdA_fA_WKenqCOTGnqB0kFXQyRPctYDc7eFE,1118
763
764
  vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data.py,sha256=CxtPXzIMLf4N__mSl0w8B9KHQH6yB0lPlNWkKWEGCWM,892
764
765
  vellum/client/types/test_suite_run_deployment_release_tag_exec_config_data_request.py,sha256=Rlkjn7P6N2Ok8Zjt6qZiKJ3-ep3F9gSGAFhJOyIVY20,899
@@ -828,7 +829,7 @@ vellum/client/types/token_overlapping_window_chunker_config.py,sha256=DusQI1WCr7
828
829
  vellum/client/types/token_overlapping_window_chunker_config_request.py,sha256=nxvP5rh8VbvE8AzOFXUBCyNoooDqRS7AmgwkwhCS9ZY,702
829
830
  vellum/client/types/token_overlapping_window_chunking.py,sha256=waAqTJfw2hVCg6OhQ0FsprHJbvlOxTzjtvF8_ZdtPd0,853
830
831
  vellum/client/types/token_overlapping_window_chunking_request.py,sha256=ez-hqu3q-TzqaHsPVvSZ3EY1mqoDeFGz1dnpeEwJByA,882
831
- vellum/client/types/tool_definition_integration.py,sha256=kzSj8e9ZvxfCtmIbA_ix9Ve0LY5XNKmHpDdbR3zI228,727
832
+ vellum/client/types/tool_definition_integration.py,sha256=7loJ81FWqtjK4nLuIkzWQH0JeY3VUx_rzKQEL_2tzAE,703
832
833
  vellum/client/types/unit_enum.py,sha256=BKWRVp2WfHtGK4D6TsolhNJHGHfExzrRHkFn8H8QkwQ,113
833
834
  vellum/client/types/upload_document_response.py,sha256=C-JP0uAraD8waVwCNRM4FRCRglmv78m532gpy2Q9_Oc,613
834
835
  vellum/client/types/upsert_test_suite_test_case_request.py,sha256=VZGW1_Bw5cvU7RDg7MhT3A9C3ftyeYnAJaDMiil1FuQ,1978
@@ -1300,6 +1301,7 @@ vellum/types/initiated_prompt_execution_meta.py,sha256=1p5PTDKhyQWGfO02w5XuxsLEW
1300
1301
  vellum/types/initiated_workflow_node_result_event.py,sha256=t2ZG_qAz7aHjm881EIOwzcm-Pub2Dyn4CrdNy2nXVsk,174
1301
1302
  vellum/types/instructor_vectorizer_config.py,sha256=-ydrbzjBMhDkV198rN6rEJsxkViplv1xkTTWk6OxP68,166
1302
1303
  vellum/types/instructor_vectorizer_config_request.py,sha256=WVughx2NMndzE7lyE8gph7M_LoaJdHet9IJUH8rUb0Y,174
1304
+ vellum/types/integration_auth_config_integration.py,sha256=5Eb2oaPbwwFnf05Rr5Q35KhVxw1X-P35g1TjhgOHGb8,173
1303
1305
  vellum/types/integration_auth_config_integration_credential.py,sha256=yyz48hxOIF_tlKEgm8ryGsBOhHsQP9QH2-yitPZxcjU,184
1304
1306
  vellum/types/integration_credential_access_type.py,sha256=nvvklDHyz-q6lsQJ0jlNYPe_f3LhOoOPmdzqQ6vnBls,172
1305
1307
  vellum/types/integration_name.py,sha256=NrAy5QDLUhx4WnED40MTujnjAKzjGxd9lpCrMgC8YZs,154
@@ -1799,7 +1801,7 @@ vellum/workflows/emitters/vellum_emitter.py,sha256=t4ixrN0NNXrydMP9PVKYvcOMxoMqs
1799
1801
  vellum/workflows/environment/__init__.py,sha256=TJz0m9dwIs6YOwCTeuN0HHsU-ecyjc1OJXx4AFy83EQ,121
1800
1802
  vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5ijVwJpEPTeIJ4_Q,471
1801
1803
  vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
1802
- vellum/workflows/errors/types.py,sha256=1LQzsEwCL-kqLGUxZcgJWahL-XNfIOwCz_5f_fWzLrM,4236
1804
+ vellum/workflows/errors/types.py,sha256=zz-cQ74xut08eejJ8SrHYaNuoohhBRG_kO1X7TGN-mU,4503
1803
1805
  vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
1804
1806
  vellum/workflows/events/context.py,sha256=vCfMIPmz4j9Om36rRWa35A_JU_VccWWS52_mZkkqxak,3345
1805
1807
  vellum/workflows/events/exception_handling.py,sha256=2okFtCzrOzaCP-HEwBPMvHn-evlyyE1zRkmIYjR__jQ,1975
@@ -1871,8 +1873,8 @@ vellum/workflows/integrations/composio_service.py,sha256=rSliaZtNiBcDSvDxz9k5i1K
1871
1873
  vellum/workflows/integrations/mcp_service.py,sha256=9DYb8dg2_kgc1UOu830kxhaFlt9yTbhKPhK3L6kb1t4,9831
1872
1874
  vellum/workflows/integrations/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1873
1875
  vellum/workflows/integrations/tests/test_mcp_service.py,sha256=q_DYrDkIqI4sQBNgID4YdbM4e9tneLVWY8YmI4R26d8,8859
1874
- vellum/workflows/integrations/tests/test_vellum_integration_service.py,sha256=KlzS86r3nxOqliCUgpuauAGkrR6jNDbytID0_i_MLkc,7970
1875
- vellum/workflows/integrations/vellum_integration_service.py,sha256=oLLYS2BqE_9HBpzWcvvkPxqBh09Kilzy7xXX-m-PbTk,3665
1876
+ vellum/workflows/integrations/tests/test_vellum_integration_service.py,sha256=n_n42FnwbR7YMd1sEVMphdOUWsWXCPw_caY6FnxNxAU,11322
1877
+ vellum/workflows/integrations/vellum_integration_service.py,sha256=xgWOpjgVT7VZJStExw0_o3egimbCt8tQHBsEbc85DP8,5256
1876
1878
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1877
1879
  vellum/workflows/nodes/__init__.py,sha256=zymtc3_iW2rFmMR-sayTLuN6ZsAw8VnJweWPsjQk2-Q,1197
1878
1880
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
@@ -1976,7 +1978,7 @@ vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47
1976
1978
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=in1fbEz5x1tx3uKv9YXdvOncsHucNL8Ro6Go7lBuuOQ,8962
1977
1979
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=GZoeybB9uM7ai8sBLAtUMHrMVgh-WrJDWrKZci6feDs,11892
1978
1980
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=EmKFA-ELdTzlK0xMqWnuSZPoGNLYCwk6b0amTqirZo0,11305
1979
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=M_kIf2iBpleao-wxkwscNlfYp_3Yf9JvENrv6ks5hTE,23652
1981
+ vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=-6Qb8GuHlpYaOLlQcJSNYmRlZXEcnYzaCjIvH-scfMY,23657
1980
1982
  vellum/workflows/nodes/displayable/web_search_node/__init__.py,sha256=8FOnEP-n-U68cvxTlJW9wphIAGHq5aqjzLM-DoSSXnU,61
1981
1983
  vellum/workflows/nodes/displayable/web_search_node/node.py,sha256=NQYux2bOtuBF5E4tn-fXi5y3btURPRrNqMSM9MAZYI4,5091
1982
1984
  vellum/workflows/nodes/displayable/web_search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1994,7 +1996,8 @@ vellum/workflows/outputs/__init__.py,sha256=AyZ4pRh_ACQIGvkf0byJO46EDnSix1ZCAXfv
1994
1996
  vellum/workflows/outputs/base.py,sha256=zy02zr9DmG3j7Xp3Q8xiOiXFF_c7uNh76jf2LiMS-qE,10132
1995
1997
  vellum/workflows/ports/__init__.py,sha256=bZuMt-R7z5bKwpu4uPW7LlJeePOQWmCcDSXe5frUY5g,101
1996
1998
  vellum/workflows/ports/node_ports.py,sha256=SM9uLAaoaE1HwR-Uqwf2v5zZK5iFnphKs6mE5Ls7ldE,2877
1997
- vellum/workflows/ports/port.py,sha256=PYhmzEHgJyjUjSFkPIQ38cNIKpcXrhYiZlj7nZC5yCk,3989
1999
+ vellum/workflows/ports/port.py,sha256=zaY02b-Fe0Mb16i7vLT2ouu5uMjept1nlhnqYdGDU-s,4111
2000
+ vellum/workflows/ports/tests/test_port.py,sha256=WEE83wct8C01Lq_asSbS0MfL5BLA2avsS0UqJMye4OU,1215
1998
2001
  vellum/workflows/ports/utils.py,sha256=gD8iijX8D3tjx1Tj2FW8-QIubCphTqW_gqROt6w6MOM,3790
1999
2002
  vellum/workflows/references/__init__.py,sha256=glHFC1VfXmcbNvH5VzFbkT03d8_D7MMcvEcsUBrzLIs,591
2000
2003
  vellum/workflows/references/constant.py,sha256=6yUT4q1sMj1hkI_tzzQ9AYcmeeDYFUNCqUq_W2DN0S8,540
@@ -2032,15 +2035,15 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
2032
2035
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
2033
2036
  vellum/workflows/types/code_execution_node_wrappers.py,sha256=fewX9bqF_4TZuK-gZYIn12s31-k03vHMGRpvFAPm11Y,3206
2034
2037
  vellum/workflows/types/core.py,sha256=yKm3sE02ult969q80DTmawiwYqodVjcAW-zlaUIgIv4,1495
2035
- vellum/workflows/types/definition.py,sha256=_6RqnqGm5RGXsoTaDLu2mCHoldfcJY7hpAtBfOgyukk,7677
2038
+ vellum/workflows/types/definition.py,sha256=PWJF1SAopdOZcLcxz1ZtGYOa0oH0-dxjFaa_tuGb6SI,7682
2036
2039
  vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
2037
2040
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
2038
2041
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2039
- vellum/workflows/types/tests/test_definition.py,sha256=vwH11nY7OGpyVOLul_CH6_BPn8D1JyMJtc_ZCkwKi2U,7173
2042
+ vellum/workflows/types/tests/test_definition.py,sha256=QUI9_Wsm2k-ZxQTXogsB0L4csSvVFOvLXHb-asC6K2w,7193
2040
2043
  vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
2041
2044
  vellum/workflows/types/utils.py,sha256=mTctHITBybpt4855x32oCKALBEcMNLn-9cCmfEKgJHQ,6498
2042
2045
  vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2043
- vellum/workflows/utils/functions.py,sha256=_esuDTYKEORjBoC0YGT3ANO--OswaKu6s-_42_kzlwU,13057
2046
+ vellum/workflows/utils/functions.py,sha256=QbRoymgG_NgEvZcoyb_ofmP4o9fzuBlFRZ8s0Ivk11U,13062
2044
2047
  vellum/workflows/utils/hmac.py,sha256=JJCczc6pyV6DuE1Oa0QVfYPUN_of3zEYmGFib3OZnrE,1135
2045
2048
  vellum/workflows/utils/names.py,sha256=QtHquoaGqRseu5gg2OcVGI2d_CMcEOvjb9KspwH4C-A,552
2046
2049
  vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
@@ -2059,8 +2062,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
2059
2062
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2060
2063
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=Boa-_m9ii2Qsa1RvVM-VYniF7zCpzGgEGy-OnPZkrHg,23941
2061
2064
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
2062
- vellum_ai-1.5.5.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2063
- vellum_ai-1.5.5.dist-info/METADATA,sha256=Alu3djqGaKxmV6E-xrjlXKwTv9AtkftOzS-F8dVLvaM,5547
2064
- vellum_ai-1.5.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2065
- vellum_ai-1.5.5.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2066
- vellum_ai-1.5.5.dist-info/RECORD,,
2065
+ vellum_ai-1.6.0.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
2066
+ vellum_ai-1.6.0.dist-info/METADATA,sha256=WvlB8Aty09_z0FkG7VwBs1337WHiohpRkOObDT3M_s4,5547
2067
+ vellum_ai-1.6.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
2068
+ vellum_ai-1.6.0.dist-info/entry_points.txt,sha256=xVavzAKN4iF_NbmhWOlOkHluka0YLkbN_pFQ9pW3gLI,117
2069
+ vellum_ai-1.6.0.dist-info/RECORD,,
@@ -63,6 +63,6 @@ def test_serialize_workflow():
63
63
  function = functions_value[0]
64
64
  assert function["type"] == "VELLUM_INTEGRATION"
65
65
  assert function["provider"] == "COMPOSIO" # VellumIntegrationProviderType.COMPOSIO
66
- assert function["integration"] == "GITHUB"
66
+ assert function["integration_name"] == "GITHUB"
67
67
  assert function["name"] == "create_issue"
68
68
  assert function["description"] == "Create a new issue in a GitHub repository"