vellum-ai 0.11.0__py3-none-any.whl → 0.11.1__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 (43) hide show
  1. vellum/__init__.py +16 -0
  2. vellum/client/core/client_wrapper.py +1 -1
  3. vellum/client/types/__init__.py +28 -0
  4. vellum/client/types/test_suite_run_exec_config.py +7 -1
  5. vellum/client/types/test_suite_run_exec_config_request.py +8 -0
  6. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +31 -0
  7. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +27 -0
  8. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +27 -0
  9. vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +31 -0
  10. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +31 -0
  11. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +27 -0
  12. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +27 -0
  13. vellum/client/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +31 -0
  14. vellum/types/test_suite_run_prompt_sandbox_history_item_exec_config.py +3 -0
  15. vellum/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py +3 -0
  16. vellum/types/test_suite_run_prompt_sandbox_history_item_exec_config_data_request.py +3 -0
  17. vellum/types/test_suite_run_prompt_sandbox_history_item_exec_config_request.py +3 -0
  18. vellum/types/test_suite_run_workflow_sandbox_history_item_exec_config.py +3 -0
  19. vellum/types/test_suite_run_workflow_sandbox_history_item_exec_config_data.py +3 -0
  20. vellum/types/test_suite_run_workflow_sandbox_history_item_exec_config_data_request.py +3 -0
  21. vellum/types/test_suite_run_workflow_sandbox_history_item_exec_config_request.py +3 -0
  22. vellum/workflows/context.py +42 -0
  23. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +13 -7
  24. vellum/workflows/nodes/displayable/api_node/node.py +3 -2
  25. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +9 -0
  26. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +10 -1
  27. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +10 -1
  28. vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py +1 -1
  29. vellum/workflows/runner/runner.py +74 -70
  30. vellum/workflows/workflows/event_filters.py +4 -1
  31. {vellum_ai-0.11.0.dist-info → vellum_ai-0.11.1.dist-info}/METADATA +1 -1
  32. {vellum_ai-0.11.0.dist-info → vellum_ai-0.11.1.dist-info}/RECORD +43 -26
  33. vellum_cli/pull.py +3 -1
  34. vellum_cli/tests/test_pull.py +18 -0
  35. vellum_ee/workflows/display/base.py +1 -0
  36. vellum_ee/workflows/display/nodes/vellum/api_node.py +53 -54
  37. vellum_ee/workflows/display/nodes/vellum/utils.py +26 -6
  38. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py +29 -1
  39. vellum_ee/workflows/display/vellum.py +1 -1
  40. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +10 -7
  41. {vellum_ai-0.11.0.dist-info → vellum_ai-0.11.1.dist-info}/LICENSE +0 -0
  42. {vellum_ai-0.11.0.dist-info → vellum_ai-0.11.1.dist-info}/WHEEL +0 -0
  43. {vellum_ai-0.11.0.dist-info → vellum_ai-0.11.1.dist-info}/entry_points.txt +0 -0
vellum/__init__.py CHANGED
@@ -393,6 +393,10 @@ from .types import (
393
393
  TestSuiteRunMetricNumberOutput,
394
394
  TestSuiteRunMetricOutput,
395
395
  TestSuiteRunMetricStringOutput,
396
+ TestSuiteRunPromptSandboxHistoryItemExecConfig,
397
+ TestSuiteRunPromptSandboxHistoryItemExecConfigData,
398
+ TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest,
399
+ TestSuiteRunPromptSandboxHistoryItemExecConfigRequest,
396
400
  TestSuiteRunRead,
397
401
  TestSuiteRunState,
398
402
  TestSuiteRunTestSuite,
@@ -400,6 +404,10 @@ from .types import (
400
404
  TestSuiteRunWorkflowReleaseTagExecConfigData,
401
405
  TestSuiteRunWorkflowReleaseTagExecConfigDataRequest,
402
406
  TestSuiteRunWorkflowReleaseTagExecConfigRequest,
407
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfig,
408
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigData,
409
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest,
410
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest,
403
411
  TestSuiteTestCase,
404
412
  TestSuiteTestCaseBulkOperationRequest,
405
413
  TestSuiteTestCaseBulkResult,
@@ -917,6 +925,10 @@ __all__ = [
917
925
  "TestSuiteRunMetricNumberOutput",
918
926
  "TestSuiteRunMetricOutput",
919
927
  "TestSuiteRunMetricStringOutput",
928
+ "TestSuiteRunPromptSandboxHistoryItemExecConfig",
929
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigData",
930
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest",
931
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigRequest",
920
932
  "TestSuiteRunRead",
921
933
  "TestSuiteRunState",
922
934
  "TestSuiteRunTestSuite",
@@ -924,6 +936,10 @@ __all__ = [
924
936
  "TestSuiteRunWorkflowReleaseTagExecConfigData",
925
937
  "TestSuiteRunWorkflowReleaseTagExecConfigDataRequest",
926
938
  "TestSuiteRunWorkflowReleaseTagExecConfigRequest",
939
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfig",
940
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigData",
941
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest",
942
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest",
927
943
  "TestSuiteTestCase",
928
944
  "TestSuiteTestCaseBulkOperationRequest",
929
945
  "TestSuiteTestCaseBulkResult",
@@ -17,7 +17,7 @@ class BaseClientWrapper:
17
17
  headers: typing.Dict[str, str] = {
18
18
  "X-Fern-Language": "Python",
19
19
  "X-Fern-SDK-Name": "vellum-ai",
20
- "X-Fern-SDK-Version": "0.11.0",
20
+ "X-Fern-SDK-Version": "0.11.1",
21
21
  }
22
22
  headers["X_API_KEY"] = self.api_key
23
23
  return headers
@@ -406,6 +406,16 @@ from .test_suite_run_metric_json_output import TestSuiteRunMetricJsonOutput
406
406
  from .test_suite_run_metric_number_output import TestSuiteRunMetricNumberOutput
407
407
  from .test_suite_run_metric_output import TestSuiteRunMetricOutput
408
408
  from .test_suite_run_metric_string_output import TestSuiteRunMetricStringOutput
409
+ from .test_suite_run_prompt_sandbox_history_item_exec_config import TestSuiteRunPromptSandboxHistoryItemExecConfig
410
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_data import (
411
+ TestSuiteRunPromptSandboxHistoryItemExecConfigData,
412
+ )
413
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_data_request import (
414
+ TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest,
415
+ )
416
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_request import (
417
+ TestSuiteRunPromptSandboxHistoryItemExecConfigRequest,
418
+ )
409
419
  from .test_suite_run_read import TestSuiteRunRead
410
420
  from .test_suite_run_state import TestSuiteRunState
411
421
  from .test_suite_run_test_suite import TestSuiteRunTestSuite
@@ -415,6 +425,16 @@ from .test_suite_run_workflow_release_tag_exec_config_data_request import (
415
425
  TestSuiteRunWorkflowReleaseTagExecConfigDataRequest,
416
426
  )
417
427
  from .test_suite_run_workflow_release_tag_exec_config_request import TestSuiteRunWorkflowReleaseTagExecConfigRequest
428
+ from .test_suite_run_workflow_sandbox_history_item_exec_config import TestSuiteRunWorkflowSandboxHistoryItemExecConfig
429
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_data import (
430
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigData,
431
+ )
432
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_data_request import (
433
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest,
434
+ )
435
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_request import (
436
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest,
437
+ )
418
438
  from .test_suite_test_case import TestSuiteTestCase
419
439
  from .test_suite_test_case_bulk_operation_request import TestSuiteTestCaseBulkOperationRequest
420
440
  from .test_suite_test_case_bulk_result import TestSuiteTestCaseBulkResult
@@ -893,6 +913,10 @@ __all__ = [
893
913
  "TestSuiteRunMetricNumberOutput",
894
914
  "TestSuiteRunMetricOutput",
895
915
  "TestSuiteRunMetricStringOutput",
916
+ "TestSuiteRunPromptSandboxHistoryItemExecConfig",
917
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigData",
918
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest",
919
+ "TestSuiteRunPromptSandboxHistoryItemExecConfigRequest",
896
920
  "TestSuiteRunRead",
897
921
  "TestSuiteRunState",
898
922
  "TestSuiteRunTestSuite",
@@ -900,6 +924,10 @@ __all__ = [
900
924
  "TestSuiteRunWorkflowReleaseTagExecConfigData",
901
925
  "TestSuiteRunWorkflowReleaseTagExecConfigDataRequest",
902
926
  "TestSuiteRunWorkflowReleaseTagExecConfigRequest",
927
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfig",
928
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigData",
929
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest",
930
+ "TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest",
903
931
  "TestSuiteTestCase",
904
932
  "TestSuiteTestCaseBulkOperationRequest",
905
933
  "TestSuiteTestCaseBulkResult",
@@ -2,9 +2,15 @@
2
2
 
3
3
  import typing
4
4
  from .test_suite_run_deployment_release_tag_exec_config import TestSuiteRunDeploymentReleaseTagExecConfig
5
+ from .test_suite_run_prompt_sandbox_history_item_exec_config import TestSuiteRunPromptSandboxHistoryItemExecConfig
5
6
  from .test_suite_run_workflow_release_tag_exec_config import TestSuiteRunWorkflowReleaseTagExecConfig
7
+ from .test_suite_run_workflow_sandbox_history_item_exec_config import TestSuiteRunWorkflowSandboxHistoryItemExecConfig
6
8
  from .test_suite_run_external_exec_config import TestSuiteRunExternalExecConfig
7
9
 
8
10
  TestSuiteRunExecConfig = typing.Union[
9
- TestSuiteRunDeploymentReleaseTagExecConfig, TestSuiteRunWorkflowReleaseTagExecConfig, TestSuiteRunExternalExecConfig
11
+ TestSuiteRunDeploymentReleaseTagExecConfig,
12
+ TestSuiteRunPromptSandboxHistoryItemExecConfig,
13
+ TestSuiteRunWorkflowReleaseTagExecConfig,
14
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfig,
15
+ TestSuiteRunExternalExecConfig,
10
16
  ]
@@ -2,11 +2,19 @@
2
2
 
3
3
  import typing
4
4
  from .test_suite_run_deployment_release_tag_exec_config_request import TestSuiteRunDeploymentReleaseTagExecConfigRequest
5
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_request import (
6
+ TestSuiteRunPromptSandboxHistoryItemExecConfigRequest,
7
+ )
5
8
  from .test_suite_run_workflow_release_tag_exec_config_request import TestSuiteRunWorkflowReleaseTagExecConfigRequest
9
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_request import (
10
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest,
11
+ )
6
12
  from .test_suite_run_external_exec_config_request import TestSuiteRunExternalExecConfigRequest
7
13
 
8
14
  TestSuiteRunExecConfigRequest = typing.Union[
9
15
  TestSuiteRunDeploymentReleaseTagExecConfigRequest,
16
+ TestSuiteRunPromptSandboxHistoryItemExecConfigRequest,
10
17
  TestSuiteRunWorkflowReleaseTagExecConfigRequest,
18
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest,
11
19
  TestSuiteRunExternalExecConfigRequest,
12
20
  ]
@@ -0,0 +1,31 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import typing
5
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_data import (
6
+ TestSuiteRunPromptSandboxHistoryItemExecConfigData,
7
+ )
8
+ import pydantic
9
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
10
+
11
+
12
+ class TestSuiteRunPromptSandboxHistoryItemExecConfig(UniversalBaseModel):
13
+ """
14
+ Execution configuration for running a Test Suite against a Prompt Sandbox History Item
15
+ """
16
+
17
+ type: typing.Literal["PROMPT_SANDBOX_HISTORY_ITEM"] = "PROMPT_SANDBOX_HISTORY_ITEM"
18
+ data: TestSuiteRunPromptSandboxHistoryItemExecConfigData
19
+ test_case_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
20
+ """
21
+ Optionally specify a subset of test case ids to run. If not provided, all test cases within the test suite will be run by default.
22
+ """
23
+
24
+ if IS_PYDANTIC_V2:
25
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
26
+ else:
27
+
28
+ class Config:
29
+ frozen = True
30
+ smart_union = True
31
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class TestSuiteRunPromptSandboxHistoryItemExecConfigData(UniversalBaseModel):
10
+ history_item_id: str = pydantic.Field()
11
+ """
12
+ The ID of the Prompt Sandbox History Item that the Test Suite will run against.
13
+ """
14
+
15
+ prompt_variant_id: str = pydantic.Field()
16
+ """
17
+ The ID of the Prompt Variant within the Prompt Sandbox History Item that you'd like to run the Test Suite against.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest(UniversalBaseModel):
10
+ history_item_id: str = pydantic.Field()
11
+ """
12
+ The ID of the Prompt Sandbox History Item that the Test Suite will run against.
13
+ """
14
+
15
+ prompt_variant_id: str = pydantic.Field()
16
+ """
17
+ The ID of the Prompt Variant within the Prompt Sandbox History Item that you'd like to run the Test Suite against.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,31 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import typing
5
+ from .test_suite_run_prompt_sandbox_history_item_exec_config_data_request import (
6
+ TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest,
7
+ )
8
+ import pydantic
9
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
10
+
11
+
12
+ class TestSuiteRunPromptSandboxHistoryItemExecConfigRequest(UniversalBaseModel):
13
+ """
14
+ Execution configuration for running a Test Suite against a Prompt Sandbox History Item
15
+ """
16
+
17
+ type: typing.Literal["PROMPT_SANDBOX_HISTORY_ITEM"] = "PROMPT_SANDBOX_HISTORY_ITEM"
18
+ data: TestSuiteRunPromptSandboxHistoryItemExecConfigDataRequest
19
+ test_case_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
20
+ """
21
+ Optionally specify a subset of test case ids to run. If not provided, all test cases within the test suite will be run by default.
22
+ """
23
+
24
+ if IS_PYDANTIC_V2:
25
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
26
+ else:
27
+
28
+ class Config:
29
+ frozen = True
30
+ smart_union = True
31
+ extra = pydantic.Extra.allow
@@ -0,0 +1,31 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import typing
5
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_data import (
6
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigData,
7
+ )
8
+ import pydantic
9
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
10
+
11
+
12
+ class TestSuiteRunWorkflowSandboxHistoryItemExecConfig(UniversalBaseModel):
13
+ """
14
+ Execution configuration for running a Test Suite against a Workflow Sandbox History Item
15
+ """
16
+
17
+ type: typing.Literal["WORKFLOW_SANDBOX_HISTORY_ITEM"] = "WORKFLOW_SANDBOX_HISTORY_ITEM"
18
+ data: TestSuiteRunWorkflowSandboxHistoryItemExecConfigData
19
+ test_case_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
20
+ """
21
+ Optionally specify a subset of test case ids to run. If not provided, all test cases within the test suite will be run by default.
22
+ """
23
+
24
+ if IS_PYDANTIC_V2:
25
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
26
+ else:
27
+
28
+ class Config:
29
+ frozen = True
30
+ smart_union = True
31
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class TestSuiteRunWorkflowSandboxHistoryItemExecConfigData(UniversalBaseModel):
10
+ history_item_id: str = pydantic.Field()
11
+ """
12
+ The ID of the Workflow Sandbox History Item that the Test Suite will run against.
13
+ """
14
+
15
+ workflow_variant_id: str = pydantic.Field()
16
+ """
17
+ The ID of the Workflow Variant within the Workflow Sandbox History Item that you'd like to run the Test Suite against.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest(UniversalBaseModel):
10
+ history_item_id: str = pydantic.Field()
11
+ """
12
+ The ID of the Workflow Sandbox History Item that the Test Suite will run against.
13
+ """
14
+
15
+ workflow_variant_id: str = pydantic.Field()
16
+ """
17
+ The ID of the Workflow Variant within the Workflow Sandbox History Item that you'd like to run the Test Suite against.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,31 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ..core.pydantic_utilities import UniversalBaseModel
4
+ import typing
5
+ from .test_suite_run_workflow_sandbox_history_item_exec_config_data_request import (
6
+ TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest,
7
+ )
8
+ import pydantic
9
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2
10
+
11
+
12
+ class TestSuiteRunWorkflowSandboxHistoryItemExecConfigRequest(UniversalBaseModel):
13
+ """
14
+ Execution configuration for running a Test Suite against a Workflow Sandbox History Item
15
+ """
16
+
17
+ type: typing.Literal["WORKFLOW_SANDBOX_HISTORY_ITEM"] = "WORKFLOW_SANDBOX_HISTORY_ITEM"
18
+ data: TestSuiteRunWorkflowSandboxHistoryItemExecConfigDataRequest
19
+ test_case_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
20
+ """
21
+ Optionally specify a subset of test case ids to run. If not provided, all test cases within the test suite will be run by default.
22
+ """
23
+
24
+ if IS_PYDANTIC_V2:
25
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
26
+ else:
27
+
28
+ class Config:
29
+ frozen = True
30
+ smart_union = True
31
+ 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.types.test_suite_run_prompt_sandbox_history_item_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.test_suite_run_prompt_sandbox_history_item_exec_config_data 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.test_suite_run_prompt_sandbox_history_item_exec_config_data_request 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.test_suite_run_prompt_sandbox_history_item_exec_config_request 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.test_suite_run_workflow_sandbox_history_item_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.test_suite_run_workflow_sandbox_history_item_exec_config_data 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.test_suite_run_workflow_sandbox_history_item_exec_config_data_request 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.test_suite_run_workflow_sandbox_history_item_exec_config_request import *
@@ -0,0 +1,42 @@
1
+ from contextlib import contextmanager
2
+ import threading
3
+ from typing import Iterator, Optional, cast
4
+
5
+ from vellum.client.core import UniversalBaseModel
6
+ from vellum.workflows.events.types import ParentContext
7
+
8
+
9
+ class ExecutionContext(UniversalBaseModel):
10
+ parent_context: Optional[ParentContext] = None
11
+
12
+
13
+ _CONTEXT_KEY = "_execution_context"
14
+
15
+ local = threading.local()
16
+
17
+
18
+ def get_execution_context() -> ExecutionContext:
19
+ """Retrieve the current execution context."""
20
+ return getattr(local, _CONTEXT_KEY, ExecutionContext())
21
+
22
+
23
+ def set_execution_context(context: ExecutionContext) -> None:
24
+ """Set the current execution context."""
25
+ setattr(local, _CONTEXT_KEY, context)
26
+
27
+
28
+ def get_parent_context() -> ParentContext:
29
+ return cast(ParentContext, get_execution_context().parent_context)
30
+
31
+
32
+ @contextmanager
33
+ def execution_context(parent_context: Optional[ParentContext] = None) -> Iterator[None]:
34
+ """Context manager for handling execution context."""
35
+ prev_context = get_execution_context()
36
+ set_context = ExecutionContext(parent_context=parent_context) if parent_context else prev_context
37
+
38
+ try:
39
+ set_execution_context(set_context)
40
+ yield
41
+ finally:
42
+ set_execution_context(prev_context)
@@ -1,10 +1,12 @@
1
1
  from typing import TYPE_CHECKING, Generic, Iterator, Optional, Set, Type, TypeVar
2
2
 
3
+ from vellum.workflows.context import execution_context, get_parent_context
3
4
  from vellum.workflows.errors.types import VellumErrorCode
4
5
  from vellum.workflows.exceptions import NodeException
5
6
  from vellum.workflows.nodes.bases.base_subworkflow_node import BaseSubworkflowNode
6
7
  from vellum.workflows.outputs.base import BaseOutput, BaseOutputs
7
8
  from vellum.workflows.state.base import BaseState
9
+ from vellum.workflows.state.context import WorkflowContext
8
10
  from vellum.workflows.types.generics import StateType, WorkflowInputsType
9
11
 
10
12
  if TYPE_CHECKING:
@@ -24,18 +26,22 @@ class InlineSubworkflowNode(BaseSubworkflowNode[StateType], Generic[StateType, W
24
26
  subworkflow: Type["BaseWorkflow[WorkflowInputsType, InnerStateType]"]
25
27
 
26
28
  def run(self) -> Iterator[BaseOutput]:
27
- subworkflow = self.subworkflow(
28
- parent_state=self.state,
29
- context=self._context,
30
- )
31
- subworkflow_stream = subworkflow.stream(
32
- inputs=self._compile_subworkflow_inputs(),
33
- )
29
+ with execution_context(parent_context=get_parent_context() or self._context.parent_context):
30
+ subworkflow = self.subworkflow(
31
+ parent_state=self.state,
32
+ context=WorkflowContext(
33
+ _vellum_client=self._context._vellum_client,
34
+ ),
35
+ )
36
+ subworkflow_stream = subworkflow.stream(
37
+ inputs=self._compile_subworkflow_inputs(),
38
+ )
34
39
 
35
40
  outputs: Optional[BaseOutputs] = None
36
41
  fulfilled_output_names: Set[str] = set()
37
42
 
38
43
  for event in subworkflow_stream:
44
+ self._context._emit_subworkflow_event(event)
39
45
  if event.name == "workflow.execution.streaming":
40
46
  if event.output.is_fulfilled:
41
47
  fulfilled_output_names.add(event.output.name)
@@ -18,13 +18,14 @@ class APINode(BaseAPINode):
18
18
 
19
19
  authorization_type: Optional[AuthorizationType] = None - The type of authorization to use for the API call.
20
20
  api_key_header_key: Optional[str] = None - The header key to use for the API key authorization.
21
- bearer_token_value: Optional[str] = None - The bearer token value to use for the bearer token authorization.
21
+ bearer_token_value: Optional[Union[str, VellumSecretReference]] = None - The bearer token value to use
22
+ for the bearer token authorization.
22
23
  """
23
24
 
24
25
  authorization_type: Optional[AuthorizationType] = None
25
26
  api_key_header_key: Optional[str] = None
26
27
  api_key_header_value: Optional[Union[str, VellumSecretReference]] = None
27
- bearer_token_value: Optional[str] = None
28
+ bearer_token_value: Optional[Union[str, VellumSecretReference]] = None
28
29
 
29
30
  def run(self) -> BaseAPINode.Outputs:
30
31
  headers = self.headers or {}
@@ -14,7 +14,9 @@ from vellum import (
14
14
  PromptRequestStringInput,
15
15
  VellumVariable,
16
16
  )
17
+ from vellum.client import RequestOptions
17
18
  from vellum.workflows.constants import OMIT
19
+ from vellum.workflows.context import get_parent_context
18
20
  from vellum.workflows.errors import VellumErrorCode
19
21
  from vellum.workflows.exceptions import NodeException
20
22
  from vellum.workflows.nodes.displayable.bases.base_prompt_node import BasePromptNode
@@ -48,6 +50,13 @@ class BaseInlinePromptNode(BasePromptNode, Generic[StateType]):
48
50
 
49
51
  def _get_prompt_event_stream(self) -> Iterator[AdHocExecutePromptEvent]:
50
52
  input_variables, input_values = self._compile_prompt_inputs()
53
+ current_parent_context = get_parent_context()
54
+ parent_context = current_parent_context.model_dump_json() if current_parent_context else None
55
+ request_options = self.request_options or RequestOptions()
56
+ request_options["additional_body_parameters"] = {
57
+ "execution_context": {"parent_context": parent_context},
58
+ **request_options.get("additional_body_parameters", {}),
59
+ }
51
60
 
52
61
  return self._context.vellum_client.ad_hoc.adhoc_execute_prompt_stream(
53
62
  ml_model=self.ml_model,
@@ -11,7 +11,9 @@ from vellum import (
11
11
  RawPromptExecutionOverridesRequest,
12
12
  StringInputRequest,
13
13
  )
14
+ from vellum.client import RequestOptions
14
15
  from vellum.workflows.constants import LATEST_RELEASE_TAG, OMIT
16
+ from vellum.workflows.context import get_parent_context
15
17
  from vellum.workflows.errors import VellumErrorCode
16
18
  from vellum.workflows.exceptions import NodeException
17
19
  from vellum.workflows.nodes.displayable.bases.base_prompt_node import BasePromptNode
@@ -46,6 +48,13 @@ class BasePromptDeploymentNode(BasePromptNode, Generic[StateType]):
46
48
  metadata: Optional[Dict[str, Optional[Any]]] = OMIT
47
49
 
48
50
  def _get_prompt_event_stream(self) -> Iterator[ExecutePromptEvent]:
51
+ current_parent_context = get_parent_context()
52
+ parent_context = current_parent_context.model_dump() if current_parent_context else None
53
+ request_options = self.request_options or RequestOptions()
54
+ request_options["additional_body_parameters"] = {
55
+ "execution_context": {"parent_context": parent_context},
56
+ **request_options.get("additional_body_parameters", {}),
57
+ }
49
58
  return self._context.vellum_client.execute_prompt_stream(
50
59
  inputs=self._compile_prompt_inputs(),
51
60
  prompt_deployment_id=str(self.deployment) if isinstance(self.deployment, UUID) else None,
@@ -56,7 +65,7 @@ class BasePromptDeploymentNode(BasePromptNode, Generic[StateType]):
56
65
  raw_overrides=self.raw_overrides,
57
66
  expand_raw=self.expand_raw,
58
67
  metadata=self.metadata,
59
- request_options=self.request_options,
68
+ request_options=request_options,
60
69
  )
61
70
 
62
71
  def _compile_prompt_inputs(self) -> List[PromptDeploymentInputRequest]:
@@ -13,6 +13,7 @@ from vellum import (
13
13
  )
14
14
  from vellum.core import RequestOptions
15
15
  from vellum.workflows.constants import LATEST_RELEASE_TAG, OMIT
16
+ from vellum.workflows.context import get_parent_context
16
17
  from vellum.workflows.errors import VellumErrorCode
17
18
  from vellum.workflows.exceptions import NodeException
18
19
  from vellum.workflows.nodes.bases.base_subworkflow_node.node import BaseSubworkflowNode
@@ -89,6 +90,13 @@ class SubworkflowDeploymentNode(BaseSubworkflowNode[StateType], Generic[StateTyp
89
90
  return compiled_inputs
90
91
 
91
92
  def run(self) -> Iterator[BaseOutput]:
93
+ current_parent_context = get_parent_context()
94
+ parent_context = current_parent_context.model_dump(mode="json") if current_parent_context else None
95
+ request_options = self.request_options or RequestOptions()
96
+ request_options["additional_body_parameters"] = {
97
+ "execution_context": {"parent_context": parent_context},
98
+ **request_options.get("additional_body_parameters", {}),
99
+ }
92
100
  subworkflow_stream = self._context.vellum_client.execute_workflow_stream(
93
101
  inputs=self._compile_subworkflow_inputs(),
94
102
  workflow_deployment_id=str(self.deployment) if isinstance(self.deployment, UUID) else None,
@@ -97,8 +105,9 @@ class SubworkflowDeploymentNode(BaseSubworkflowNode[StateType], Generic[StateTyp
97
105
  external_id=self.external_id,
98
106
  event_types=["WORKFLOW"],
99
107
  metadata=self.metadata,
100
- request_options=self.request_options,
108
+ request_options=request_options,
101
109
  )
110
+ # for some reason execution context isn't showing as an option? ^ failing mypy
102
111
 
103
112
  outputs: Optional[List[WorkflowOutput]] = None
104
113
  fulfilled_output_names: Set[str] = set()
@@ -75,5 +75,5 @@ def test_text_prompt_deployment_node__basic(vellum_client):
75
75
  prompt_deployment_name="my-deployment",
76
76
  raw_overrides=OMIT,
77
77
  release_tag="LATEST",
78
- request_options=None,
78
+ request_options={"additional_body_parameters": {"execution_context": {"parent_context": None}}},
79
79
  )