vellum-ai 1.5.4__py3-none-any.whl → 1.5.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 (66) hide show
  1. vellum/__init__.py +36 -0
  2. vellum/client/__init__.py +6 -0
  3. vellum/client/core/client_wrapper.py +2 -2
  4. vellum/client/reference.md +497 -11
  5. vellum/client/resources/__init__.py +4 -0
  6. vellum/client/resources/integration_auth_configs/__init__.py +4 -0
  7. vellum/client/resources/integration_auth_configs/client.py +186 -0
  8. vellum/client/resources/integration_auth_configs/raw_client.py +171 -0
  9. vellum/client/resources/integration_providers/__init__.py +4 -0
  10. vellum/client/resources/integration_providers/client.py +279 -0
  11. vellum/client/resources/integration_providers/raw_client.py +255 -0
  12. vellum/client/resources/integrations/client.py +226 -28
  13. vellum/client/resources/integrations/raw_client.py +257 -20
  14. vellum/client/resources/test_suite_runs/client.py +6 -6
  15. vellum/client/resources/test_suite_runs/raw_client.py +6 -6
  16. vellum/client/types/__init__.py +32 -0
  17. vellum/client/types/components_schemas_composio_integration_exec_config.py +5 -0
  18. vellum/client/types/components_schemas_slim_composio_tool_definition.py +5 -0
  19. vellum/client/types/composio_integration_exec_config.py +20 -0
  20. vellum/client/types/composio_tool_definition.py +4 -1
  21. vellum/client/types/integration_auth_config_integration.py +23 -0
  22. vellum/client/types/integration_auth_config_integration_credential.py +19 -0
  23. vellum/client/types/integration_credential_access_type.py +5 -0
  24. vellum/client/types/integration_name.py +20 -0
  25. vellum/client/types/integration_provider.py +5 -0
  26. vellum/client/types/integration_read.py +30 -0
  27. vellum/client/types/paginated_slim_integration_auth_config_read_list.py +23 -0
  28. vellum/client/types/paginated_slim_integration_read_list.py +23 -0
  29. vellum/client/types/paginated_slim_tool_definition_list.py +23 -0
  30. vellum/client/types/slim_composio_tool_definition.py +23 -0
  31. vellum/client/types/slim_integration_auth_config_read.py +29 -0
  32. vellum/client/types/slim_integration_read.py +25 -0
  33. vellum/client/types/tool_definition_integration.py +23 -0
  34. vellum/resources/integration_auth_configs/__init__.py +3 -0
  35. vellum/resources/integration_auth_configs/client.py +3 -0
  36. vellum/resources/integration_auth_configs/raw_client.py +3 -0
  37. vellum/resources/integration_providers/__init__.py +3 -0
  38. vellum/resources/integration_providers/client.py +3 -0
  39. vellum/resources/integration_providers/raw_client.py +3 -0
  40. vellum/types/components_schemas_composio_integration_exec_config.py +3 -0
  41. vellum/types/components_schemas_slim_composio_tool_definition.py +3 -0
  42. vellum/types/composio_integration_exec_config.py +3 -0
  43. vellum/types/integration_auth_config_integration.py +3 -0
  44. vellum/types/integration_auth_config_integration_credential.py +3 -0
  45. vellum/types/integration_credential_access_type.py +3 -0
  46. vellum/types/integration_name.py +3 -0
  47. vellum/types/integration_provider.py +3 -0
  48. vellum/types/integration_read.py +3 -0
  49. vellum/types/paginated_slim_integration_auth_config_read_list.py +3 -0
  50. vellum/types/paginated_slim_integration_read_list.py +3 -0
  51. vellum/types/paginated_slim_tool_definition_list.py +3 -0
  52. vellum/types/slim_composio_tool_definition.py +3 -0
  53. vellum/types/slim_integration_auth_config_read.py +3 -0
  54. vellum/types/slim_integration_read.py +3 -0
  55. vellum/types/tool_definition_integration.py +3 -0
  56. vellum/workflows/integrations/tests/test_vellum_integration_service.py +26 -19
  57. vellum/workflows/integrations/vellum_integration_service.py +5 -5
  58. vellum/workflows/nodes/displayable/tool_calling_node/node.py +2 -4
  59. vellum/workflows/types/definition.py +1 -1
  60. vellum/workflows/types/tests/test_definition.py +40 -2
  61. {vellum_ai-1.5.4.dist-info → vellum_ai-1.5.6.dist-info}/METADATA +1 -1
  62. {vellum_ai-1.5.4.dist-info → vellum_ai-1.5.6.dist-info}/RECORD +66 -21
  63. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_vellum_integration_serialization.py +68 -0
  64. {vellum_ai-1.5.4.dist-info → vellum_ai-1.5.6.dist-info}/LICENSE +0 -0
  65. {vellum_ai-1.5.4.dist-info → vellum_ai-1.5.6.dist-info}/WHEEL +0 -0
  66. {vellum_ai-1.5.4.dist-info → vellum_ai-1.5.6.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,20 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ IntegrationName = typing.Union[
6
+ typing.Literal[
7
+ "SLACK",
8
+ "NOTION",
9
+ "GOOGLE",
10
+ "CALENDLY",
11
+ "HUBSPOT",
12
+ "LINEAR",
13
+ "GITHUB",
14
+ "GOOGLE_SHEETS",
15
+ "GOOGLE_CALENDAR",
16
+ "GOOGLE_DRIVE",
17
+ "GMAIL",
18
+ ],
19
+ typing.Any,
20
+ ]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ IntegrationProvider = typing.Literal["COMPOSIO"]
@@ -0,0 +1,30 @@
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 .components_schemas_composio_integration_exec_config import ComponentsSchemasComposioIntegrationExecConfig
8
+ from .integration_name import IntegrationName
9
+ from .integration_provider import IntegrationProvider
10
+
11
+
12
+ class IntegrationRead(UniversalBaseModel):
13
+ id: str
14
+ label: typing.Optional[str] = None
15
+ icon_url: str
16
+ name: IntegrationName
17
+ provider: IntegrationProvider = "COMPOSIO"
18
+ exec_config: ComponentsSchemasComposioIntegrationExecConfig = pydantic.Field()
19
+ """
20
+ Integration provider specific information needed for filtering tools.
21
+ """
22
+
23
+ if IS_PYDANTIC_V2:
24
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
25
+ else:
26
+
27
+ class Config:
28
+ frozen = True
29
+ smart_union = True
30
+ extra = pydantic.Extra.allow
@@ -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 .slim_integration_auth_config_read import SlimIntegrationAuthConfigRead
8
+
9
+
10
+ class PaginatedSlimIntegrationAuthConfigReadList(UniversalBaseModel):
11
+ count: typing.Optional[int] = None
12
+ next: typing.Optional[str] = None
13
+ previous: typing.Optional[str] = None
14
+ results: typing.Optional[typing.List[SlimIntegrationAuthConfigRead]] = None
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
@@ -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 .slim_integration_read import SlimIntegrationRead
8
+
9
+
10
+ class PaginatedSlimIntegrationReadList(UniversalBaseModel):
11
+ count: typing.Optional[int] = None
12
+ next: typing.Optional[str] = None
13
+ previous: typing.Optional[str] = None
14
+ results: typing.Optional[typing.List[SlimIntegrationRead]] = None
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
@@ -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 .components_schemas_slim_composio_tool_definition import ComponentsSchemasSlimComposioToolDefinition
8
+
9
+
10
+ class PaginatedSlimToolDefinitionList(UniversalBaseModel):
11
+ count: typing.Optional[int] = None
12
+ next: typing.Optional[str] = None
13
+ previous: typing.Optional[str] = None
14
+ results: typing.Optional[typing.List[ComponentsSchemasSlimComposioToolDefinition]] = None
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
@@ -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 .tool_definition_integration import ToolDefinitionIntegration
8
+
9
+
10
+ class SlimComposioToolDefinition(UniversalBaseModel):
11
+ provider: typing.Literal["COMPOSIO"] = "COMPOSIO"
12
+ integration: ToolDefinitionIntegration
13
+ name: str
14
+ description: str
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
@@ -0,0 +1,29 @@
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_auth_config_integration import IntegrationAuthConfigIntegration
8
+ from .integration_auth_config_integration_credential import IntegrationAuthConfigIntegrationCredential
9
+ from .integration_credential_access_type import IntegrationCredentialAccessType
10
+
11
+
12
+ class SlimIntegrationAuthConfigRead(UniversalBaseModel):
13
+ """
14
+ A slim representation of an Integration Auth Config.
15
+ """
16
+
17
+ id: str
18
+ integration: IntegrationAuthConfigIntegration
19
+ integration_credentials: typing.Optional[typing.List[IntegrationAuthConfigIntegrationCredential]] = None
20
+ default_access_type: typing.Optional[IntegrationCredentialAccessType] = None
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
@@ -0,0 +1,25 @@
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 SlimIntegrationRead(UniversalBaseModel):
12
+ id: str
13
+ label: typing.Optional[str] = None
14
+ icon_url: str
15
+ name: IntegrationName
16
+ provider: IntegrationProvider = "COMPOSIO"
17
+
18
+ if IS_PYDANTIC_V2:
19
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
20
+ else:
21
+
22
+ class Config:
23
+ frozen = True
24
+ smart_union = True
25
+ extra = pydantic.Extra.allow
@@ -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 ToolDefinitionIntegration(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
@@ -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.resources.integration_auth_configs import *
@@ -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.resources.integration_auth_configs.client import *
@@ -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.resources.integration_auth_configs.raw_client import *
@@ -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.resources.integration_providers import *
@@ -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.resources.integration_providers.client import *
@@ -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.resources.integration_providers.raw_client import *
@@ -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.components_schemas_composio_integration_exec_config import *
@@ -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.components_schemas_slim_composio_tool_definition import *
@@ -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.composio_integration_exec_config import *
@@ -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 *
@@ -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_credential import *
@@ -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_credential_access_type import *
@@ -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_name import *
@@ -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_provider import *
@@ -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_read import *
@@ -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.paginated_slim_integration_auth_config_read_list import *
@@ -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.paginated_slim_integration_read_list import *
@@ -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.paginated_slim_tool_definition_list import *
@@ -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.slim_composio_tool_definition import *
@@ -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.slim_integration_auth_config_read import *
@@ -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.slim_integration_read import *
@@ -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.tool_definition_integration import *
@@ -1,6 +1,9 @@
1
1
  import pytest
2
2
  from unittest import mock
3
+ from uuid import uuid4
3
4
 
5
+ from vellum import ToolDefinitionIntegration
6
+ from vellum.client.types.components_schemas_composio_tool_definition import ComponentsSchemasComposioToolDefinition
4
7
  from vellum.workflows.constants import VellumIntegrationProviderType
5
8
  from vellum.workflows.exceptions import NodeException
6
9
  from vellum.workflows.integrations.vellum_integration_service import VellumIntegrationService
@@ -10,23 +13,27 @@ from vellum.workflows.types.definition import VellumIntegrationToolDetails
10
13
  def test_vellum_integration_service_get_tool_definition_success(vellum_client):
11
14
  """Test that tool definitions are successfully retrieved from Vellum API"""
12
15
  mock_client = vellum_client
13
- mock_client.integrations = mock.MagicMock()
14
-
15
- mock_response = mock.MagicMock()
16
- mock_response.name = "GITHUB_CREATE_AN_ISSUE"
17
- mock_response.description = "Create a new issue in a GitHub repository"
18
- mock_response.parameters = {
19
- "type": "object",
20
- "properties": {
21
- "repo": {"type": "string", "description": "Repository name"},
22
- "title": {"type": "string", "description": "Issue title"},
23
- "body": {"type": "string", "description": "Issue body"},
16
+ tool_definition_response = ComponentsSchemasComposioToolDefinition(
17
+ integration=ToolDefinitionIntegration(
18
+ id=str(uuid4()),
19
+ provider="COMPOSIO",
20
+ name="GITHUB",
21
+ ),
22
+ name="GITHUB_CREATE_AN_ISSUE",
23
+ description="Create a new issue in a GitHub repository",
24
+ input_parameters={
25
+ "type": "object",
26
+ "properties": {
27
+ "repo": {"type": "string", "description": "Repository name"},
28
+ "title": {"type": "string", "description": "Issue title"},
29
+ "body": {"type": "string", "description": "Issue body"},
30
+ },
31
+ "required": ["repo", "title"],
24
32
  },
25
- "required": ["repo", "title"],
26
- }
27
- mock_response.provider = "COMPOSIO"
33
+ output_parameters={},
34
+ )
28
35
 
29
- mock_client.integrations.retrieve_integration_tool_definition.return_value = mock_response
36
+ mock_client.integrations.retrieve_integration_tool_definition.return_value = tool_definition_response
30
37
 
31
38
  # WHEN we request a tool definition
32
39
  service = VellumIntegrationService(client=mock_client)
@@ -50,8 +57,8 @@ def test_vellum_integration_service_get_tool_definition_success(vellum_client):
50
57
 
51
58
  # AND the API should have been called with the correct parameters
52
59
  mock_client.integrations.retrieve_integration_tool_definition.assert_called_once_with(
53
- integration="GITHUB",
54
- provider="COMPOSIO",
60
+ integration_name="GITHUB",
61
+ integration_provider="COMPOSIO",
55
62
  tool_name="GITHUB_CREATE_AN_ISSUE",
56
63
  )
57
64
 
@@ -111,8 +118,8 @@ def test_vellum_integration_service_execute_tool_success(vellum_client):
111
118
 
112
119
  # AND the API should have been called with correct parameters
113
120
  mock_client.integrations.execute_integration_tool.assert_called_once_with(
114
- integration="GITHUB",
115
- provider="COMPOSIO",
121
+ integration_name="GITHUB",
122
+ integration_provider="COMPOSIO",
116
123
  tool_name="GITHUB_CREATE_AN_ISSUE",
117
124
  arguments={
118
125
  "repo": "user/repo",
@@ -40,8 +40,8 @@ class VellumIntegrationService:
40
40
  """
41
41
  try:
42
42
  response = self._client.integrations.retrieve_integration_tool_definition(
43
- integration=integration,
44
- provider=provider,
43
+ integration_name=integration,
44
+ integration_provider=provider,
45
45
  tool_name=tool_name,
46
46
  )
47
47
 
@@ -50,7 +50,7 @@ class VellumIntegrationService:
50
50
  integration=integration,
51
51
  name=response.name,
52
52
  description=response.description,
53
- parameters=response.parameters,
53
+ parameters=response.input_parameters,
54
54
  )
55
55
  except Exception as e:
56
56
  error_message = f"Failed to retrieve tool definition for {tool_name}: {str(e)}"
@@ -82,8 +82,8 @@ class VellumIntegrationService:
82
82
  """
83
83
  try:
84
84
  response = self._client.integrations.execute_integration_tool(
85
- integration=integration,
86
- provider=provider,
85
+ integration_name=integration,
86
+ integration_provider=provider,
87
87
  tool_name=tool_name,
88
88
  arguments=arguments,
89
89
  )
@@ -1,6 +1,6 @@
1
1
  from typing import Any, ClassVar, Dict, Generic, Iterator, List, Optional, Set, Union
2
2
 
3
- from vellum import ChatMessage, PromptBlock
3
+ from vellum import ChatMessage, PromptBlock, PromptOutput
4
4
  from vellum.client.types.prompt_parameters import PromptParameters
5
5
  from vellum.client.types.prompt_settings import PromptSettings
6
6
  from vellum.prompts.constants import DEFAULT_PROMPT_PARAMETERS
@@ -82,6 +82,7 @@ class ToolCallingNode(BaseNode[StateType], Generic[StateType]):
82
82
  class Outputs(BaseWorkflow.Outputs):
83
83
  text: str = self.tool_prompt_node.Outputs.text
84
84
  chat_history: List[ChatMessage] = ToolCallingState.chat_history
85
+ results: List[PromptOutput] = self.tool_prompt_node.Outputs.results
85
86
 
86
87
  subworkflow = ToolCallingWorkflow(
87
88
  parent_state=self.state,
@@ -97,9 +98,6 @@ class ToolCallingNode(BaseNode[StateType], Generic[StateType]):
97
98
  exception: Optional[NodeException] = None
98
99
  fulfilled_output_names: Set[str] = set()
99
100
 
100
- # Yield initiated event for chat_history
101
- yield BaseOutput(name="chat_history")
102
-
103
101
  for event in subworkflow_stream:
104
102
  self._context._emit_subworkflow_event(event)
105
103
 
@@ -166,7 +166,7 @@ class ComposioToolDefinition(UniversalBaseModel):
166
166
 
167
167
 
168
168
  class VellumIntegrationToolDefinition(UniversalBaseModel):
169
- type: Literal["INTEGRATION"] = "INTEGRATION"
169
+ type: Literal["VELLUM_INTEGRATION"] = "VELLUM_INTEGRATION"
170
170
 
171
171
  # Core identification
172
172
  provider: VellumIntegrationProviderType
@@ -1,9 +1,15 @@
1
1
  import pytest
2
2
  from uuid import UUID
3
3
 
4
- from vellum.workflows.constants import AuthorizationType
4
+ from vellum.workflows.constants import AuthorizationType, VellumIntegrationProviderType
5
5
  from vellum.workflows.references.environment_variable import EnvironmentVariableReference
6
- from vellum.workflows.types.definition import ComposioToolDefinition, DeploymentDefinition, MCPServer, MCPToolDefinition
6
+ from vellum.workflows.types.definition import (
7
+ ComposioToolDefinition,
8
+ DeploymentDefinition,
9
+ MCPServer,
10
+ MCPToolDefinition,
11
+ VellumIntegrationToolDefinition,
12
+ )
7
13
 
8
14
 
9
15
  @pytest.mark.parametrize(
@@ -143,3 +149,35 @@ def test_mcp_tool_definition_creation_no_authorization():
143
149
  assert mcp_tool.server.bearer_token_value is None
144
150
  assert mcp_tool.server.api_key_header_key is None
145
151
  assert mcp_tool.server.api_key_header_value is None
152
+
153
+
154
+ def test_vellum_integration_tool_definition_creation():
155
+ """Test that VellumIntegrationToolDefinition can be created with required fields."""
156
+ vellum_tool = VellumIntegrationToolDefinition(
157
+ provider=VellumIntegrationProviderType.COMPOSIO,
158
+ integration="GITHUB",
159
+ name="create_issue",
160
+ description="Create a new issue in a GitHub repository",
161
+ )
162
+
163
+ assert vellum_tool.type == "VELLUM_INTEGRATION"
164
+ assert vellum_tool.provider == VellumIntegrationProviderType.COMPOSIO
165
+ assert vellum_tool.integration == "GITHUB"
166
+ assert vellum_tool.name == "create_issue"
167
+ assert vellum_tool.description == "Create a new issue in a GitHub repository"
168
+
169
+
170
+ def test_vellum_integration_tool_definition_with_different_provider():
171
+ """Test VellumIntegrationToolDefinition with a different provider."""
172
+ vellum_tool = VellumIntegrationToolDefinition(
173
+ provider=VellumIntegrationProviderType.COMPOSIO,
174
+ integration="SLACK",
175
+ name="send_message",
176
+ description="Send a message to a Slack channel",
177
+ )
178
+
179
+ assert vellum_tool.type == "VELLUM_INTEGRATION"
180
+ assert vellum_tool.provider == VellumIntegrationProviderType.COMPOSIO
181
+ assert vellum_tool.integration == "SLACK"
182
+ assert vellum_tool.name == "send_message"
183
+ assert vellum_tool.description == "Send a message to a Slack channel"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vellum-ai
3
- Version: 1.5.4
3
+ Version: 1.5.6
4
4
  Summary:
5
5
  License: MIT
6
6
  Requires-Python: >=3.9,<4.0