vellum-ai 0.12.9__py3-none-any.whl → 0.12.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vellum/__init__.py +2 -2
- vellum/client/__init__.py +14 -4
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/types/__init__.py +2 -2
- vellum/client/types/function_call.py +0 -2
- vellum/client/types/function_call_request.py +0 -2
- vellum/client/types/metric_definition_execution.py +6 -0
- vellum/client/types/test_suite_run_execution_metric_result.py +6 -0
- vellum/client/types/test_suite_run_metric_array_output.py +32 -0
- vellum/client/types/test_suite_run_metric_output.py +2 -0
- vellum/types/{fulfilled_enum.py → test_suite_run_metric_array_output.py} +1 -1
- vellum/workflows/exceptions.py +1 -1
- vellum/workflows/nodes/displayable/bases/search_node.py +1 -5
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +17 -10
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +13 -3
- vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py +1 -2
- vellum/workflows/runner/runner.py +10 -3
- vellum/workflows/state/encoder.py +4 -0
- vellum/workflows/state/tests/test_state.py +19 -0
- vellum/workflows/workflows/base.py +41 -1
- {vellum_ai-0.12.9.dist-info → vellum_ai-0.12.13.dist-info}/METADATA +1 -1
- {vellum_ai-0.12.9.dist-info → vellum_ai-0.12.13.dist-info}/RECORD +25 -25
- vellum/client/types/fulfilled_enum.py +0 -5
- {vellum_ai-0.12.9.dist-info → vellum_ai-0.12.13.dist-info}/LICENSE +0 -0
- {vellum_ai-0.12.9.dist-info → vellum_ai-0.12.13.dist-info}/WHEEL +0 -0
- {vellum_ai-0.12.9.dist-info → vellum_ai-0.12.13.dist-info}/entry_points.txt +0 -0
vellum/__init__.py
CHANGED
@@ -120,7 +120,6 @@ from .types import (
|
|
120
120
|
FolderEntityWorkflowSandbox,
|
121
121
|
FolderEntityWorkflowSandboxData,
|
122
122
|
FulfilledAdHocExecutePromptEvent,
|
123
|
-
FulfilledEnum,
|
124
123
|
FulfilledExecutePromptEvent,
|
125
124
|
FulfilledExecutePromptResponse,
|
126
125
|
FulfilledExecuteWorkflowWorkflowResultEvent,
|
@@ -389,6 +388,7 @@ from .types import (
|
|
389
388
|
TestSuiteRunExternalExecConfigData,
|
390
389
|
TestSuiteRunExternalExecConfigDataRequest,
|
391
390
|
TestSuiteRunExternalExecConfigRequest,
|
391
|
+
TestSuiteRunMetricArrayOutput,
|
392
392
|
TestSuiteRunMetricErrorOutput,
|
393
393
|
TestSuiteRunMetricJsonOutput,
|
394
394
|
TestSuiteRunMetricNumberOutput,
|
@@ -649,7 +649,6 @@ __all__ = [
|
|
649
649
|
"FolderEntityWorkflowSandboxData",
|
650
650
|
"ForbiddenError",
|
651
651
|
"FulfilledAdHocExecutePromptEvent",
|
652
|
-
"FulfilledEnum",
|
653
652
|
"FulfilledExecutePromptEvent",
|
654
653
|
"FulfilledExecutePromptResponse",
|
655
654
|
"FulfilledExecuteWorkflowWorkflowResultEvent",
|
@@ -922,6 +921,7 @@ __all__ = [
|
|
922
921
|
"TestSuiteRunExternalExecConfigData",
|
923
922
|
"TestSuiteRunExternalExecConfigDataRequest",
|
924
923
|
"TestSuiteRunExternalExecConfigRequest",
|
924
|
+
"TestSuiteRunMetricArrayOutput",
|
925
925
|
"TestSuiteRunMetricErrorOutput",
|
926
926
|
"TestSuiteRunMetricJsonOutput",
|
927
927
|
"TestSuiteRunMetricNumberOutput",
|
vellum/client/__init__.py
CHANGED
@@ -1079,6 +1079,7 @@ class Vellum:
|
|
1079
1079
|
index_id: typing.Optional[str] = OMIT,
|
1080
1080
|
index_name: typing.Optional[str] = OMIT,
|
1081
1081
|
options: typing.Optional[SearchRequestOptionsRequest] = OMIT,
|
1082
|
+
document_index: typing.Optional[str] = OMIT,
|
1082
1083
|
request_options: typing.Optional[RequestOptions] = None,
|
1083
1084
|
) -> SearchResponse:
|
1084
1085
|
"""
|
@@ -1090,14 +1091,17 @@ class Vellum:
|
|
1090
1091
|
The query to search for.
|
1091
1092
|
|
1092
1093
|
index_id : typing.Optional[str]
|
1093
|
-
The ID of the index to search against. Must provide either this or
|
1094
|
+
The ID of the index to search against. Must provide either this, index_name or document_index.
|
1094
1095
|
|
1095
1096
|
index_name : typing.Optional[str]
|
1096
|
-
The name of the index to search against. Must provide either this or
|
1097
|
+
The name of the index to search against. Must provide either this, index_id or document_index.
|
1097
1098
|
|
1098
1099
|
options : typing.Optional[SearchRequestOptionsRequest]
|
1099
1100
|
Configuration options for the search.
|
1100
1101
|
|
1102
|
+
document_index : typing.Optional[str]
|
1103
|
+
Either the index name or index ID to search against. Must provide either this, index_id or index_name.
|
1104
|
+
|
1101
1105
|
request_options : typing.Optional[RequestOptions]
|
1102
1106
|
Request-specific configuration.
|
1103
1107
|
|
@@ -1128,6 +1132,7 @@ class Vellum:
|
|
1128
1132
|
"options": convert_and_respect_annotation_metadata(
|
1129
1133
|
object_=options, annotation=SearchRequestOptionsRequest, direction="write"
|
1130
1134
|
),
|
1135
|
+
"document_index": document_index,
|
1131
1136
|
},
|
1132
1137
|
request_options=request_options,
|
1133
1138
|
omit=OMIT,
|
@@ -2395,6 +2400,7 @@ class AsyncVellum:
|
|
2395
2400
|
index_id: typing.Optional[str] = OMIT,
|
2396
2401
|
index_name: typing.Optional[str] = OMIT,
|
2397
2402
|
options: typing.Optional[SearchRequestOptionsRequest] = OMIT,
|
2403
|
+
document_index: typing.Optional[str] = OMIT,
|
2398
2404
|
request_options: typing.Optional[RequestOptions] = None,
|
2399
2405
|
) -> SearchResponse:
|
2400
2406
|
"""
|
@@ -2406,14 +2412,17 @@ class AsyncVellum:
|
|
2406
2412
|
The query to search for.
|
2407
2413
|
|
2408
2414
|
index_id : typing.Optional[str]
|
2409
|
-
The ID of the index to search against. Must provide either this or
|
2415
|
+
The ID of the index to search against. Must provide either this, index_name or document_index.
|
2410
2416
|
|
2411
2417
|
index_name : typing.Optional[str]
|
2412
|
-
The name of the index to search against. Must provide either this or
|
2418
|
+
The name of the index to search against. Must provide either this, index_id or document_index.
|
2413
2419
|
|
2414
2420
|
options : typing.Optional[SearchRequestOptionsRequest]
|
2415
2421
|
Configuration options for the search.
|
2416
2422
|
|
2423
|
+
document_index : typing.Optional[str]
|
2424
|
+
Either the index name or index ID to search against. Must provide either this, index_id or index_name.
|
2425
|
+
|
2417
2426
|
request_options : typing.Optional[RequestOptions]
|
2418
2427
|
Request-specific configuration.
|
2419
2428
|
|
@@ -2452,6 +2461,7 @@ class AsyncVellum:
|
|
2452
2461
|
"options": convert_and_respect_annotation_metadata(
|
2453
2462
|
object_=options, annotation=SearchRequestOptionsRequest, direction="write"
|
2454
2463
|
),
|
2464
|
+
"document_index": document_index,
|
2455
2465
|
},
|
2456
2466
|
request_options=request_options,
|
2457
2467
|
omit=OMIT,
|
@@ -18,7 +18,7 @@ class BaseClientWrapper:
|
|
18
18
|
headers: typing.Dict[str, str] = {
|
19
19
|
"X-Fern-Language": "Python",
|
20
20
|
"X-Fern-SDK-Name": "vellum-ai",
|
21
|
-
"X-Fern-SDK-Version": "0.12.
|
21
|
+
"X-Fern-SDK-Version": "0.12.13",
|
22
22
|
}
|
23
23
|
headers["X_API_KEY"] = self.api_key
|
24
24
|
return headers
|
vellum/client/types/__init__.py
CHANGED
@@ -127,7 +127,6 @@ from .folder_entity_test_suite_data import FolderEntityTestSuiteData
|
|
127
127
|
from .folder_entity_workflow_sandbox import FolderEntityWorkflowSandbox
|
128
128
|
from .folder_entity_workflow_sandbox_data import FolderEntityWorkflowSandboxData
|
129
129
|
from .fulfilled_ad_hoc_execute_prompt_event import FulfilledAdHocExecutePromptEvent
|
130
|
-
from .fulfilled_enum import FulfilledEnum
|
131
130
|
from .fulfilled_execute_prompt_event import FulfilledExecutePromptEvent
|
132
131
|
from .fulfilled_execute_prompt_response import FulfilledExecutePromptResponse
|
133
132
|
from .fulfilled_execute_workflow_workflow_result_event import FulfilledExecuteWorkflowWorkflowResultEvent
|
@@ -402,6 +401,7 @@ from .test_suite_run_external_exec_config import TestSuiteRunExternalExecConfig
|
|
402
401
|
from .test_suite_run_external_exec_config_data import TestSuiteRunExternalExecConfigData
|
403
402
|
from .test_suite_run_external_exec_config_data_request import TestSuiteRunExternalExecConfigDataRequest
|
404
403
|
from .test_suite_run_external_exec_config_request import TestSuiteRunExternalExecConfigRequest
|
404
|
+
from .test_suite_run_metric_array_output import TestSuiteRunMetricArrayOutput
|
405
405
|
from .test_suite_run_metric_error_output import TestSuiteRunMetricErrorOutput
|
406
406
|
from .test_suite_run_metric_json_output import TestSuiteRunMetricJsonOutput
|
407
407
|
from .test_suite_run_metric_number_output import TestSuiteRunMetricNumberOutput
|
@@ -641,7 +641,6 @@ __all__ = [
|
|
641
641
|
"FolderEntityWorkflowSandbox",
|
642
642
|
"FolderEntityWorkflowSandboxData",
|
643
643
|
"FulfilledAdHocExecutePromptEvent",
|
644
|
-
"FulfilledEnum",
|
645
644
|
"FulfilledExecutePromptEvent",
|
646
645
|
"FulfilledExecutePromptResponse",
|
647
646
|
"FulfilledExecuteWorkflowWorkflowResultEvent",
|
@@ -910,6 +909,7 @@ __all__ = [
|
|
910
909
|
"TestSuiteRunExternalExecConfigData",
|
911
910
|
"TestSuiteRunExternalExecConfigDataRequest",
|
912
911
|
"TestSuiteRunExternalExecConfigRequest",
|
912
|
+
"TestSuiteRunMetricArrayOutput",
|
913
913
|
"TestSuiteRunMetricErrorOutput",
|
914
914
|
"TestSuiteRunMetricJsonOutput",
|
915
915
|
"TestSuiteRunMetricNumberOutput",
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
from ..core.pydantic_utilities import UniversalBaseModel
|
4
4
|
import typing
|
5
|
-
from .fulfilled_enum import FulfilledEnum
|
6
5
|
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
7
6
|
import pydantic
|
8
7
|
|
@@ -15,7 +14,6 @@ class FunctionCall(UniversalBaseModel):
|
|
15
14
|
arguments: typing.Dict[str, typing.Optional[typing.Any]]
|
16
15
|
id: typing.Optional[str] = None
|
17
16
|
name: str
|
18
|
-
state: typing.Optional[FulfilledEnum] = None
|
19
17
|
|
20
18
|
if IS_PYDANTIC_V2:
|
21
19
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
from ..core.pydantic_utilities import UniversalBaseModel
|
4
4
|
import typing
|
5
|
-
from .fulfilled_enum import FulfilledEnum
|
6
5
|
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
7
6
|
import pydantic
|
8
7
|
|
@@ -15,7 +14,6 @@ class FunctionCallRequest(UniversalBaseModel):
|
|
15
14
|
arguments: typing.Dict[str, typing.Optional[typing.Any]]
|
16
15
|
id: typing.Optional[str] = None
|
17
16
|
name: str
|
18
|
-
state: typing.Optional[FulfilledEnum] = None
|
19
17
|
|
20
18
|
if IS_PYDANTIC_V2:
|
21
19
|
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
|
@@ -1,10 +1,13 @@
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
2
2
|
|
3
|
+
from __future__ import annotations
|
3
4
|
from ..core.pydantic_utilities import UniversalBaseModel
|
5
|
+
from .array_vellum_value import ArrayVellumValue
|
4
6
|
import typing
|
5
7
|
from .test_suite_run_metric_output import TestSuiteRunMetricOutput
|
6
8
|
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
7
9
|
import pydantic
|
10
|
+
from ..core.pydantic_utilities import update_forward_refs
|
8
11
|
|
9
12
|
|
10
13
|
class MetricDefinitionExecution(UniversalBaseModel):
|
@@ -18,3 +21,6 @@ class MetricDefinitionExecution(UniversalBaseModel):
|
|
18
21
|
frozen = True
|
19
22
|
smart_union = True
|
20
23
|
extra = pydantic.Extra.allow
|
24
|
+
|
25
|
+
|
26
|
+
update_forward_refs(ArrayVellumValue, MetricDefinitionExecution=MetricDefinitionExecution)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
2
2
|
|
3
|
+
from __future__ import annotations
|
3
4
|
from ..core.pydantic_utilities import UniversalBaseModel
|
5
|
+
from .array_vellum_value import ArrayVellumValue
|
4
6
|
import typing
|
5
7
|
from .test_suite_run_metric_output import TestSuiteRunMetricOutput
|
6
8
|
from .test_suite_run_execution_metric_definition import TestSuiteRunExecutionMetricDefinition
|
7
9
|
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
8
10
|
import pydantic
|
11
|
+
from ..core.pydantic_utilities import update_forward_refs
|
9
12
|
|
10
13
|
|
11
14
|
class TestSuiteRunExecutionMetricResult(UniversalBaseModel):
|
@@ -22,3 +25,6 @@ class TestSuiteRunExecutionMetricResult(UniversalBaseModel):
|
|
22
25
|
frozen = True
|
23
26
|
smart_union = True
|
24
27
|
extra = pydantic.Extra.allow
|
28
|
+
|
29
|
+
|
30
|
+
update_forward_refs(ArrayVellumValue, TestSuiteRunExecutionMetricResult=TestSuiteRunExecutionMetricResult)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
2
|
+
|
3
|
+
from __future__ import annotations
|
4
|
+
from ..core.pydantic_utilities import UniversalBaseModel
|
5
|
+
from .array_vellum_value import ArrayVellumValue
|
6
|
+
import typing
|
7
|
+
from .vellum_value import VellumValue
|
8
|
+
from ..core.pydantic_utilities import IS_PYDANTIC_V2
|
9
|
+
import pydantic
|
10
|
+
from ..core.pydantic_utilities import update_forward_refs
|
11
|
+
|
12
|
+
|
13
|
+
class TestSuiteRunMetricArrayOutput(UniversalBaseModel):
|
14
|
+
"""
|
15
|
+
Output for a test suite run metric that is of type ARRAY
|
16
|
+
"""
|
17
|
+
|
18
|
+
value: typing.Optional[typing.List[VellumValue]] = None
|
19
|
+
type: typing.Literal["ARRAY"] = "ARRAY"
|
20
|
+
name: str
|
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
|
30
|
+
|
31
|
+
|
32
|
+
update_forward_refs(ArrayVellumValue, TestSuiteRunMetricArrayOutput=TestSuiteRunMetricArrayOutput)
|
@@ -5,10 +5,12 @@ from .test_suite_run_metric_string_output import TestSuiteRunMetricStringOutput
|
|
5
5
|
from .test_suite_run_metric_number_output import TestSuiteRunMetricNumberOutput
|
6
6
|
from .test_suite_run_metric_json_output import TestSuiteRunMetricJsonOutput
|
7
7
|
from .test_suite_run_metric_error_output import TestSuiteRunMetricErrorOutput
|
8
|
+
from .test_suite_run_metric_array_output import TestSuiteRunMetricArrayOutput
|
8
9
|
|
9
10
|
TestSuiteRunMetricOutput = typing.Union[
|
10
11
|
TestSuiteRunMetricStringOutput,
|
11
12
|
TestSuiteRunMetricNumberOutput,
|
12
13
|
TestSuiteRunMetricJsonOutput,
|
13
14
|
TestSuiteRunMetricErrorOutput,
|
15
|
+
TestSuiteRunMetricArrayOutput,
|
14
16
|
]
|
vellum/workflows/exceptions.py
CHANGED
@@ -2,7 +2,7 @@ from vellum.workflows.errors import WorkflowError, WorkflowErrorCode
|
|
2
2
|
|
3
3
|
|
4
4
|
class NodeException(Exception):
|
5
|
-
def __init__(self, message: str, code: WorkflowErrorCode):
|
5
|
+
def __init__(self, message: str, code: WorkflowErrorCode = WorkflowErrorCode.INTERNAL_ERROR):
|
6
6
|
self.message = message
|
7
7
|
self.code = code
|
8
8
|
super().__init__(message)
|
@@ -12,7 +12,6 @@ from vellum import (
|
|
12
12
|
SearchWeightsRequest,
|
13
13
|
)
|
14
14
|
from vellum.core import ApiError, RequestOptions
|
15
|
-
from vellum.utils.uuid import is_valid_uuid
|
16
15
|
from vellum.workflows.errors import WorkflowErrorCode
|
17
16
|
from vellum.workflows.exceptions import NodeException
|
18
17
|
from vellum.workflows.nodes.bases import BaseNode
|
@@ -74,13 +73,10 @@ class BaseSearchNode(BaseNode[StateType], Generic[StateType]):
|
|
74
73
|
results: List[SearchResult]
|
75
74
|
|
76
75
|
def _perform_search(self) -> SearchResponse:
|
77
|
-
index_is_uuid = True if isinstance(self.document_index, UUID) else is_valid_uuid(self.document_index)
|
78
|
-
|
79
76
|
try:
|
80
77
|
return self._context.vellum_client.search(
|
81
78
|
query=self.query,
|
82
|
-
|
83
|
-
index_name=str(self.document_index) if not index_is_uuid else None,
|
79
|
+
document_index=str(self.document_index),
|
84
80
|
options=self.options,
|
85
81
|
)
|
86
82
|
except NotFoundError:
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import json
|
1
2
|
from typing import Iterator
|
2
3
|
|
3
4
|
from vellum.workflows.errors import WorkflowErrorCode
|
@@ -37,13 +38,19 @@ class InlinePromptNode(BaseInlinePromptNode[StateType]):
|
|
37
38
|
code=WorkflowErrorCode.INTERNAL_ERROR,
|
38
39
|
)
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
string_outputs = []
|
42
|
+
for output in outputs:
|
43
|
+
if output.value is None:
|
44
|
+
continue
|
45
|
+
|
46
|
+
if output.type == "STRING":
|
47
|
+
string_outputs.append(output.value)
|
48
|
+
elif output.type == "JSON":
|
49
|
+
string_outputs.append(json.dumps(output.value, indent=4))
|
50
|
+
elif output.type == "FUNCTION_CALL":
|
51
|
+
string_outputs.append(output.value.model_dump_json(indent=4))
|
52
|
+
else:
|
53
|
+
string_outputs.append(output.value.message)
|
54
|
+
|
55
|
+
value = "\n".join(string_outputs)
|
56
|
+
yield BaseOutput(name="text", value=value)
|
@@ -12,7 +12,6 @@ from vellum.client.types.initiated_execute_prompt_event import InitiatedExecuteP
|
|
12
12
|
from vellum.client.types.prompt_output import PromptOutput
|
13
13
|
from vellum.client.types.prompt_request_json_input import PromptRequestJsonInput
|
14
14
|
from vellum.client.types.string_vellum_value import StringVellumValue
|
15
|
-
from vellum.workflows.nodes.displayable.bases.inline_prompt_node.node import BaseInlinePromptNode
|
16
15
|
from vellum.workflows.nodes.displayable.inline_prompt_node.node import InlinePromptNode
|
17
16
|
|
18
17
|
|
@@ -74,7 +73,7 @@ def test_inline_prompt_node__function_definitions(vellum_adhoc_prompt_client):
|
|
74
73
|
pass
|
75
74
|
|
76
75
|
# AND a prompt node with a accepting that function definition
|
77
|
-
class MyNode(
|
76
|
+
class MyNode(InlinePromptNode):
|
78
77
|
ml_model = "gpt-4o"
|
79
78
|
functions = [my_function]
|
80
79
|
prompt_inputs = {}
|
@@ -99,7 +98,7 @@ def test_inline_prompt_node__function_definitions(vellum_adhoc_prompt_client):
|
|
99
98
|
vellum_adhoc_prompt_client.adhoc_execute_prompt_stream.side_effect = generate_prompt_events
|
100
99
|
|
101
100
|
# WHEN the node is run
|
102
|
-
list(MyNode().run())
|
101
|
+
outputs = list(MyNode().run())
|
103
102
|
|
104
103
|
# THEN the prompt is executed with the correct inputs
|
105
104
|
mock_api = vellum_adhoc_prompt_client.adhoc_execute_prompt_stream
|
@@ -117,3 +116,14 @@ def test_inline_prompt_node__function_definitions(vellum_adhoc_prompt_client):
|
|
117
116
|
},
|
118
117
|
),
|
119
118
|
]
|
119
|
+
assert (
|
120
|
+
outputs[-1].value
|
121
|
+
== """{
|
122
|
+
"arguments": {
|
123
|
+
"foo": "hello",
|
124
|
+
"bar": 1
|
125
|
+
},
|
126
|
+
"id": null,
|
127
|
+
"name": "my_function"
|
128
|
+
}"""
|
129
|
+
)
|
@@ -118,8 +118,7 @@ witness or missing person.\
|
|
118
118
|
|
119
119
|
# AND we should have made the expected call to Vellum search
|
120
120
|
vellum_search_client.assert_called_once_with(
|
121
|
-
|
122
|
-
index_name="vellum-trust-center-policies",
|
121
|
+
document_index="vellum-trust-center-policies",
|
123
122
|
query="How often is employee training?",
|
124
123
|
options=SearchRequestOptionsRequest(
|
125
124
|
limit=8,
|
@@ -4,7 +4,7 @@ import logging
|
|
4
4
|
from queue import Empty, Queue
|
5
5
|
from threading import Event as ThreadingEvent, Thread
|
6
6
|
from uuid import UUID
|
7
|
-
from typing import TYPE_CHECKING, Any, Dict, Generic, Iterable, Iterator, Optional, Sequence, Set, Type, Union
|
7
|
+
from typing import TYPE_CHECKING, Any, Dict, Generic, Iterable, Iterator, List, Optional, Sequence, Set, Type, Union
|
8
8
|
|
9
9
|
from vellum.workflows.constants import UNDEF
|
10
10
|
from vellum.workflows.context import execution_context, get_parent_context
|
@@ -72,6 +72,7 @@ class WorkflowRunner(Generic[StateType]):
|
|
72
72
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
73
73
|
external_inputs: Optional[ExternalInputsArg] = None,
|
74
74
|
cancel_signal: Optional[ThreadingEvent] = None,
|
75
|
+
node_output_mocks: Optional[List[BaseOutputs]] = None,
|
75
76
|
parent_context: Optional[ParentContext] = None,
|
76
77
|
):
|
77
78
|
if state and external_inputs:
|
@@ -123,6 +124,9 @@ class WorkflowRunner(Generic[StateType]):
|
|
123
124
|
|
124
125
|
self._dependencies: Dict[Type[BaseNode], Set[Type[BaseNode]]] = defaultdict(set)
|
125
126
|
self._state_forks: Set[StateType] = {self._initial_state}
|
127
|
+
self._mocks_by_node_outputs_class = (
|
128
|
+
{mock.__class__: mock for mock in node_output_mocks} if node_output_mocks else {}
|
129
|
+
)
|
126
130
|
|
127
131
|
self._active_nodes_by_execution_id: Dict[UUID, BaseNode[StateType]] = {}
|
128
132
|
self._cancel_signal = cancel_signal
|
@@ -178,8 +182,11 @@ class WorkflowRunner(Generic[StateType]):
|
|
178
182
|
node_definition=node.__class__,
|
179
183
|
parent=parent_context,
|
180
184
|
)
|
181
|
-
|
182
|
-
|
185
|
+
if node.Outputs not in self._mocks_by_node_outputs_class:
|
186
|
+
with execution_context(parent_context=updated_parent_context):
|
187
|
+
node_run_response = node.run()
|
188
|
+
else:
|
189
|
+
node_run_response = self._mocks_by_node_outputs_class[node.Outputs]
|
183
190
|
ports = node.Ports()
|
184
191
|
if not isinstance(node_run_response, (BaseOutputs, Iterator)):
|
185
192
|
raise NodeException(
|
@@ -2,6 +2,7 @@ from dataclasses import asdict, is_dataclass
|
|
2
2
|
from datetime import datetime
|
3
3
|
import enum
|
4
4
|
from json import JSONEncoder
|
5
|
+
from queue import Queue
|
5
6
|
from uuid import UUID
|
6
7
|
from typing import Any, Callable, Dict, Type
|
7
8
|
|
@@ -44,6 +45,9 @@ class DefaultStateEncoder(JSONEncoder):
|
|
44
45
|
if isinstance(obj, enum.Enum):
|
45
46
|
return obj.value
|
46
47
|
|
48
|
+
if isinstance(obj, Queue):
|
49
|
+
return list(obj.queue)
|
50
|
+
|
47
51
|
if is_dataclass(obj):
|
48
52
|
# Technically, obj is DataclassInstance | type[DataclassInstance], but asdict expects a DataclassInstance
|
49
53
|
# in practice, we only ever pass the former
|
@@ -2,6 +2,7 @@ import pytest
|
|
2
2
|
from collections import defaultdict
|
3
3
|
from copy import deepcopy
|
4
4
|
import json
|
5
|
+
from queue import Queue
|
5
6
|
from typing import Dict
|
6
7
|
|
7
8
|
from vellum.workflows.nodes.bases import BaseNode
|
@@ -113,3 +114,21 @@ def test_state_json_serialization__with_node_output_updates():
|
|
113
114
|
|
114
115
|
# THEN the state is serialized correctly
|
115
116
|
assert json_state["meta"]["node_outputs"] == {"MockNode.Outputs.baz": "hello"}
|
117
|
+
|
118
|
+
|
119
|
+
def test_state_json_serialization__with_queue():
|
120
|
+
# GIVEN an initial state instance
|
121
|
+
state = MockState(foo="bar")
|
122
|
+
|
123
|
+
# AND we add a Node Output queue to state
|
124
|
+
queue: Queue[str] = Queue()
|
125
|
+
queue.put("test1")
|
126
|
+
queue.put("test2")
|
127
|
+
|
128
|
+
state.meta.node_outputs[MockNode.Outputs.baz] = queue
|
129
|
+
|
130
|
+
# WHEN we serialize the state
|
131
|
+
json_state = json.loads(json.dumps(state, cls=DefaultStateEncoder))
|
132
|
+
|
133
|
+
# THEN the state is serialized correctly with the queue turned into a list
|
134
|
+
assert json_state["meta"]["node_outputs"] == {"MockNode.Outputs.baz": ["test1", "test2"]}
|
@@ -194,6 +194,7 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
194
194
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
195
195
|
external_inputs: Optional[ExternalInputsArg] = None,
|
196
196
|
cancel_signal: Optional[ThreadingEvent] = None,
|
197
|
+
node_output_mocks: Optional[List[BaseOutputs]] = None,
|
197
198
|
) -> TerminalWorkflowEvent:
|
198
199
|
"""
|
199
200
|
Invoke a Workflow, returning the last event emitted, which should be one of:
|
@@ -218,6 +219,9 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
218
219
|
|
219
220
|
cancel_signal: Optional[ThreadingEvent] = None
|
220
221
|
A threading event that can be used to cancel the Workflow Execution.
|
222
|
+
|
223
|
+
node_output_mocks: Optional[List[Outputs]] = None
|
224
|
+
A list of Outputs to mock for Nodes during Workflow Execution.
|
221
225
|
"""
|
222
226
|
|
223
227
|
events = WorkflowRunner(
|
@@ -227,6 +231,7 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
227
231
|
entrypoint_nodes=entrypoint_nodes,
|
228
232
|
external_inputs=external_inputs,
|
229
233
|
cancel_signal=cancel_signal,
|
234
|
+
node_output_mocks=node_output_mocks,
|
230
235
|
parent_context=self._context.parent_context,
|
231
236
|
).stream()
|
232
237
|
first_event: Optional[Union[WorkflowExecutionInitiatedEvent, WorkflowExecutionResumedEvent]] = None
|
@@ -290,6 +295,7 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
290
295
|
entrypoint_nodes: Optional[RunFromNodeArg] = None,
|
291
296
|
external_inputs: Optional[ExternalInputsArg] = None,
|
292
297
|
cancel_signal: Optional[ThreadingEvent] = None,
|
298
|
+
node_output_mocks: Optional[List[BaseOutputs]] = None,
|
293
299
|
) -> WorkflowEventStream:
|
294
300
|
"""
|
295
301
|
Invoke a Workflow, yielding events as they are emitted.
|
@@ -315,6 +321,9 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
315
321
|
|
316
322
|
cancel_signal: Optional[ThreadingEvent] = None
|
317
323
|
A threading event that can be used to cancel the Workflow Execution.
|
324
|
+
|
325
|
+
node_output_mocks: Optional[List[Outputs]] = None
|
326
|
+
A list of Outputs to mock for Nodes during Workflow Execution.
|
318
327
|
"""
|
319
328
|
|
320
329
|
should_yield = event_filter or workflow_event_filter
|
@@ -325,6 +334,7 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
325
334
|
entrypoint_nodes=entrypoint_nodes,
|
326
335
|
external_inputs=external_inputs,
|
327
336
|
cancel_signal=cancel_signal,
|
337
|
+
node_output_mocks=node_output_mocks,
|
328
338
|
parent_context=self.context.parent_context,
|
329
339
|
).stream():
|
330
340
|
if should_yield(self.__class__, event):
|
@@ -416,7 +426,6 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
416
426
|
def load_from_module(module_path: str) -> Type["BaseWorkflow"]:
|
417
427
|
workflow_path = f"{module_path}.workflow"
|
418
428
|
module = importlib.import_module(workflow_path)
|
419
|
-
|
420
429
|
workflows: List[Type[BaseWorkflow]] = []
|
421
430
|
for name in dir(module):
|
422
431
|
if name.startswith("__"):
|
@@ -435,9 +444,40 @@ class BaseWorkflow(Generic[WorkflowInputsType, StateType], metaclass=_BaseWorkfl
|
|
435
444
|
raise ValueError(f"No workflows found in {module_path}")
|
436
445
|
elif len(workflows) > 1:
|
437
446
|
raise ValueError(f"Multiple workflows found in {module_path}")
|
447
|
+
try:
|
448
|
+
BaseWorkflow.import_node_display(module_path)
|
449
|
+
except ModuleNotFoundError:
|
450
|
+
pass
|
438
451
|
|
439
452
|
return workflows[0]
|
440
453
|
|
454
|
+
@staticmethod
|
455
|
+
def import_node_display(module_path):
|
456
|
+
# Import the nodes package
|
457
|
+
nodes_package = importlib.import_module(f"{module_path}.display.nodes")
|
458
|
+
# Use the loader to get the code
|
459
|
+
if hasattr(nodes_package, "__spec__") and nodes_package.__spec__ and nodes_package.__spec__.loader:
|
460
|
+
loader = nodes_package.__spec__.loader
|
461
|
+
|
462
|
+
# Check if the loader has a code attribute
|
463
|
+
if hasattr(loader, "code"):
|
464
|
+
code = loader.code
|
465
|
+
|
466
|
+
# Parse the code to find import statements
|
467
|
+
import_lines = [line.strip() for line in code.splitlines() if line.startswith("from ")]
|
468
|
+
|
469
|
+
# Import each module specified in the code
|
470
|
+
for line in import_lines:
|
471
|
+
try:
|
472
|
+
# Extract module name from the import line
|
473
|
+
module_name = line.split(" ")[1]
|
474
|
+
full_module_path = f"{module_path}.display.nodes{module_name}"
|
475
|
+
importlib.import_module(full_module_path)
|
476
|
+
except Exception:
|
477
|
+
continue
|
478
|
+
# Also import from workflow.py
|
479
|
+
importlib.import_module(f"{module_path}.display.workflow")
|
480
|
+
|
441
481
|
|
442
482
|
WorkflowExecutionInitiatedBody.model_rebuild()
|
443
483
|
WorkflowExecutionFulfilledBody.model_rebuild()
|
@@ -72,12 +72,12 @@ vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86Fde
|
|
72
72
|
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=ydAbFMzcY2LURINZbXYm9BAXZdIa3-7rQ86Kupo7qcA,12804
|
73
73
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=AMxNnTm2z3LIR5rqxoCAfuy37F2FTuSRDVtKUoezO8M,1184
|
74
74
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=GhIviEMDWNw1p8z20ta08T5PeNCVJs5p2hrOX1uyNxg,17066
|
75
|
-
vellum/__init__.py,sha256=
|
75
|
+
vellum/__init__.py,sha256=FTKuzi4UX1MAYpZnW-JbtU8WgOzUIfolgajVVR96LGs,35552
|
76
76
|
vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
77
|
-
vellum/client/__init__.py,sha256=
|
77
|
+
vellum/client/__init__.py,sha256=z59nOGe27vMDqsU-ljfULBwC5J4nyrqFunhmo8xnxbU,111521
|
78
78
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
79
79
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
80
|
-
vellum/client/core/client_wrapper.py,sha256=
|
80
|
+
vellum/client/core/client_wrapper.py,sha256=vjueLRJ8AxJ_TUVQkuXwAW-kVfBfyveLY3BAgl-dZqE,1869
|
81
81
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
82
82
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
83
83
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -136,7 +136,7 @@ vellum/client/resources/workflows/types/__init__.py,sha256=-uFca4ypncAOvfsg6sjD-
|
|
136
136
|
vellum/client/resources/workflows/types/workflows_pull_request_format.py,sha256=dOWE_jnDnniIJLoeseeCms23aklghyBkoPmBFzcqqZk,165
|
137
137
|
vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
138
138
|
vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
|
139
|
-
vellum/client/types/__init__.py,sha256=
|
139
|
+
vellum/client/types/__init__.py,sha256=cCh66eGhjb0bVYtwjjQBGpzjt_LT0SiVToraHqVglTg,53821
|
140
140
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
141
141
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
142
142
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
|
@@ -256,19 +256,18 @@ vellum/client/types/folder_entity_test_suite_data.py,sha256=RGITy3Pip6NeIb77YGav
|
|
256
256
|
vellum/client/types/folder_entity_workflow_sandbox.py,sha256=gFmkwKZGh5O9-9y4w6VGK1IRsKLf7NZ4SCC-pgucm8M,853
|
257
257
|
vellum/client/types/folder_entity_workflow_sandbox_data.py,sha256=MW0nLAvetgnsm6KWiGcYcKB9llR-UfosSNz0MtokN38,783
|
258
258
|
vellum/client/types/fulfilled_ad_hoc_execute_prompt_event.py,sha256=19rFjVrzobaaAQhZlP_WGV9f_Rwrz4EPRXbT2aYkaJw,1016
|
259
|
-
vellum/client/types/fulfilled_enum.py,sha256=MenrGneRMBvsq-n8tkMXAx0wppGWLJgkqdKnfklGP9U,124
|
260
259
|
vellum/client/types/fulfilled_execute_prompt_event.py,sha256=E-iBwlMWvwQyRfzqPlgtX8KurE3IYsTRd5vWjXtbOmk,994
|
261
260
|
vellum/client/types/fulfilled_execute_prompt_response.py,sha256=nKhDk2ZloCuE0uijX5XOE63_cq8PBo4UWs4hK4e3jUE,1227
|
262
261
|
vellum/client/types/fulfilled_execute_workflow_workflow_result_event.py,sha256=kYlTOfJd9SydVSmJ8dr8pdLh7RHOwcFv5UzBYgKlyTw,1147
|
263
262
|
vellum/client/types/fulfilled_prompt_execution_meta.py,sha256=sMWAMqJCh8n_NBtRSM4muiAqKne_W-NCxJVzKy9Q1Ec,934
|
264
263
|
vellum/client/types/fulfilled_workflow_node_result_event.py,sha256=dYZUcyl_nFRFpBA_imaHkp9F7dLi59z2ESq4R7do9mo,1403
|
265
|
-
vellum/client/types/function_call.py,sha256=
|
264
|
+
vellum/client/types/function_call.py,sha256=3f19emMu06jHo3DlO4pQb_bC7NjKCLjWdLq3gndiCqg,713
|
266
265
|
vellum/client/types/function_call_chat_message_content.py,sha256=qXbrMQeXn_CLjfDzQvv9llmae2wvpoTlUSQWdfMvf-k,831
|
267
266
|
vellum/client/types/function_call_chat_message_content_request.py,sha256=HVGxHs6jc4EBgW7rdJXlF8KRlugY5YHa0ujDrEQqPCo,860
|
268
267
|
vellum/client/types/function_call_chat_message_content_value.py,sha256=DHRZYAMc4Y5MerUS_6CIxQBtORftKn-gBx8Skgivm_A,736
|
269
268
|
vellum/client/types/function_call_chat_message_content_value_request.py,sha256=67EZ3qSR9zO5akOgloswRE0Pv8BcjtWhdTRJIwuQU04,743
|
270
269
|
vellum/client/types/function_call_input.py,sha256=Iiqk2-IX6xUI2UnRj3bum5C0OlQn9jRmBwatUzJQQt8,820
|
271
|
-
vellum/client/types/function_call_request.py,sha256=
|
270
|
+
vellum/client/types/function_call_request.py,sha256=udGEdk66q1zTpEFE2xq-cu6w_ahMpfQv_9lIey9x1G0,720
|
272
271
|
vellum/client/types/function_call_variable_value.py,sha256=VQKCiEtJsmIK3i7CtFV_2ZpxeX70rqpUViXIvAci8L0,702
|
273
272
|
vellum/client/types/function_call_vellum_value.py,sha256=lLJb-S_-S_UXm6una1BMyCbqLpMhbbMcaVIYNO45h5o,759
|
274
273
|
vellum/client/types/function_call_vellum_value_request.py,sha256=oUteuCfWcj7UJbSE_Vywmmva9kyTaeL9iv5WJHabDVs,788
|
@@ -321,7 +320,7 @@ vellum/client/types/metadata_filter_config_request.py,sha256=eFmoTIVv4RB6DRaxqyD
|
|
321
320
|
vellum/client/types/metadata_filter_rule_combinator.py,sha256=3Vpp1Mnv3As7efkxWTeV8qd4gdJ6OLoLhz_UeVBHAX8,165
|
322
321
|
vellum/client/types/metadata_filter_rule_request.py,sha256=Pcs0TsU7CRnsEUoH0DWb-c9DTP2UW67lJKXlsTLXV48,1135
|
323
322
|
vellum/client/types/metadata_filters_request.py,sha256=Yaiu7rkcrV2bCFk6HrZSjuF6V-6JYjZTpzxv7_MFe70,345
|
324
|
-
vellum/client/types/metric_definition_execution.py,sha256=
|
323
|
+
vellum/client/types/metric_definition_execution.py,sha256=uLi7Wj1b0f5tjiZWbLGLZMLiNOLZ3ofR57WHne116t8,907
|
325
324
|
vellum/client/types/metric_definition_history_item.py,sha256=oR0m0PG_NGpEBSwJ3n-CFi6TJo3o5Y4D_wfaqpk2VxI,1183
|
326
325
|
vellum/client/types/metric_definition_input.py,sha256=4nmwpPqbeNQYCzLkXCkc-FGV5K2Zfa22xqSUe_L6o5s,331
|
327
326
|
vellum/client/types/metric_node_result.py,sha256=YdKq1DZiBD1RBtjyMejImylv3BqrwY8B_UF4Ij-6_64,660
|
@@ -516,7 +515,7 @@ vellum/client/types/test_suite_run_execution_error_output.py,sha256=6UXaVzWivUTQ
|
|
516
515
|
vellum/client/types/test_suite_run_execution_function_call_output.py,sha256=jgAk0xgWnJudZh4VhDNb8HfgUAUHA6I8PK_2ExHW9hE,873
|
517
516
|
vellum/client/types/test_suite_run_execution_json_output.py,sha256=qO-EVGBzKU_zhGYo4hiOrIteymXEc5Hbsea5YC-cnXY,796
|
518
517
|
vellum/client/types/test_suite_run_execution_metric_definition.py,sha256=5Yd7aQK7vr5swpA8ciMwmMb12wismM5vgCOoGLlAFmU,679
|
519
|
-
vellum/client/types/test_suite_run_execution_metric_result.py,sha256=
|
518
|
+
vellum/client/types/test_suite_run_execution_metric_result.py,sha256=LfLwTtCmNJp3u_h3MfWbD9UKw9n8eN4QLN_VeKtHWAk,1175
|
520
519
|
vellum/client/types/test_suite_run_execution_number_output.py,sha256=qzD1sny1o6HDZXkGgvXOPclR4-L1VyAfLvQCnLnU_BM,799
|
521
520
|
vellum/client/types/test_suite_run_execution_output.py,sha256=jxZg_EOMwKjCDH0QyrecZyUW5OqCMMsWmk9PIwI8EUs,1171
|
522
521
|
vellum/client/types/test_suite_run_execution_search_results_output.py,sha256=30dcLuSRxFZWZgkU2iPNzKcTsT8tJrD1B91UDSaOp3M,890
|
@@ -525,10 +524,11 @@ vellum/client/types/test_suite_run_external_exec_config.py,sha256=pznl2aDh12tGMR
|
|
525
524
|
vellum/client/types/test_suite_run_external_exec_config_data.py,sha256=ukhvRkWY7MxWbj1Im1eqUWdW1AxO_98GX3WAjH77fSQ,1071
|
526
525
|
vellum/client/types/test_suite_run_external_exec_config_data_request.py,sha256=c_ILHYfH55Yoc52oCK4uwtEv4mJxhDXM6YBFJwPh4uA,1142
|
527
526
|
vellum/client/types/test_suite_run_external_exec_config_request.py,sha256=HxBtYYKC7p1pwlNjjeW3smcDrtiRvPx3xXRbWxID1vk,1401
|
527
|
+
vellum/client/types/test_suite_run_metric_array_output.py,sha256=U0G8rrhhqpX9_CWPV2Ys6PtzyJT6oRkUV4NOK9O4-qA,1035
|
528
528
|
vellum/client/types/test_suite_run_metric_error_output.py,sha256=trW1KTH4SJafRfDFRyBS7TpzcT88tXkpWEoysij6IXQ,755
|
529
529
|
vellum/client/types/test_suite_run_metric_json_output.py,sha256=DI3mJR5kpi8Hm2n6tx6buySHPwTkkbBbr8Lkk4k6HH4,738
|
530
530
|
vellum/client/types/test_suite_run_metric_number_output.py,sha256=8pddeSds6Rrn0xGqyvgPsG1hr1tu6eOiQAp8kkM_aBk,739
|
531
|
-
vellum/client/types/test_suite_run_metric_output.py,sha256=
|
531
|
+
vellum/client/types/test_suite_run_metric_output.py,sha256=z9A4_ZT9_NIHWHkFZakaf_SMn3Y13WRJ_lWzTCzXZ_U,691
|
532
532
|
vellum/client/types/test_suite_run_metric_string_output.py,sha256=YXerGfpvJdBtKrzgutSqEfG-N6cZoeOL59qZ5k6DwQA,737
|
533
533
|
vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config.py,sha256=NUJXSSLxOxVAGOoQj74m5UqjCTCCeEIgbWGP6kM2Fck,1200
|
534
534
|
vellum/client/types/test_suite_run_prompt_sandbox_history_item_exec_config_data.py,sha256=IdlTWDda1061PwsHaoGDyB7-2lBVSus7Z8agcdmSOYE,905
|
@@ -830,7 +830,6 @@ vellum/types/folder_entity_test_suite_data.py,sha256=FQd58e9hlOBFwDp0DiD-YO_01S6
|
|
830
830
|
vellum/types/folder_entity_workflow_sandbox.py,sha256=2KybEyswJhuqCL9FCp-LEfm8wkNmky1ROTN4je4T1gk,168
|
831
831
|
vellum/types/folder_entity_workflow_sandbox_data.py,sha256=QIxbRKQAq-O9nVMYOTubkFmWx7rvX-BeV5lwU1d8TCY,173
|
832
832
|
vellum/types/fulfilled_ad_hoc_execute_prompt_event.py,sha256=aC5REbvPJa1Ifnkr8jSY0RXrrNpSTicKz86SCrWZRag,175
|
833
|
-
vellum/types/fulfilled_enum.py,sha256=UfkMLLR1u2MCMSQEivCED-r65cMFEhWPECskwVm-DAQ,152
|
834
833
|
vellum/types/fulfilled_execute_prompt_event.py,sha256=IVEjlhPZkgnmhND0JXJo33mLCehupk4Cy6CTTaaW18o,168
|
835
834
|
vellum/types/fulfilled_execute_prompt_response.py,sha256=0TmtIHRSLXmOzs-mnCA8txZHWtSP0RAG8ItLUiqDig8,171
|
836
835
|
vellum/types/fulfilled_execute_workflow_workflow_result_event.py,sha256=Xuz7iHzmyUcGuXQ-e-a6qRgeeVmuX7ZZYC1-YYPkwDQ,186
|
@@ -1099,6 +1098,7 @@ vellum/types/test_suite_run_external_exec_config.py,sha256=y8JNeWgqWTac2Utv7zlXJ
|
|
1099
1098
|
vellum/types/test_suite_run_external_exec_config_data.py,sha256=18Y2cEVxSlaFjH5pbvWGt8Hikoy4-GF1oPIibQR6l_U,178
|
1100
1099
|
vellum/types/test_suite_run_external_exec_config_data_request.py,sha256=0IgvVC3Rxan9YktlIQ4rqsNRFqngy0U7htWDr6gEGjE,186
|
1101
1100
|
vellum/types/test_suite_run_external_exec_config_request.py,sha256=PdPbkFlqq7ug7-jwhJG45CLbEVW-SCx-oczKrkCHsfM,181
|
1101
|
+
vellum/types/test_suite_run_metric_array_output.py,sha256=DeBxH90NXEmlNlQ8qH3uuV-w9AuekFlMY28zUPh2HcI,172
|
1102
1102
|
vellum/types/test_suite_run_metric_error_output.py,sha256=_5HgfGe47snz0qG_C_6Hb_tHMepEUgP0NnVIqKJ0y2Y,172
|
1103
1103
|
vellum/types/test_suite_run_metric_json_output.py,sha256=mZIXhFS0IoauRhNhwtO_nBe_EfZVqar0CKok4JpdWa0,171
|
1104
1104
|
vellum/types/test_suite_run_metric_number_output.py,sha256=FRat-EjmPl4eyK307tPnQ8U3prAPsqgXVLdRmYXxaGw,173
|
@@ -1234,7 +1234,7 @@ vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
1234
1234
|
vellum/workflows/events/tests/test_event.py,sha256=izB6Y9U5ROgmHBBpLNUY2navK4-qFp6hdJqJNz6Beek,13350
|
1235
1235
|
vellum/workflows/events/types.py,sha256=cjRE8WL8tYCFradd9NOGl_H0mN3LiWWnA1uHmyT2Q0Q,3412
|
1236
1236
|
vellum/workflows/events/workflow.py,sha256=l5tXes0sg7iWaA1ZUE5dtAqNnGQ8iy6trVbOU9meu7U,5240
|
1237
|
-
vellum/workflows/exceptions.py,sha256=
|
1237
|
+
vellum/workflows/exceptions.py,sha256=l-FLGvXywxg6ivolCts71b8pcsYAWoB1cmUR4Jx7N8g,614
|
1238
1238
|
vellum/workflows/expressions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1239
1239
|
vellum/workflows/expressions/accessor.py,sha256=OFvAHAVABr-k7GceIhtzIurV4OuV_yHft7JPRsq87Es,1472
|
1240
1240
|
vellum/workflows/expressions/and_.py,sha256=I7lNqrUM3-m_5hmjjiMhaHhJtKcLj39kEFVWPDOqwfo,916
|
@@ -1310,7 +1310,7 @@ vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=H
|
|
1310
1310
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
|
1311
1311
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=fypgmZHgaDtGqSBC8rjYiyryJ0H58LPt_CafLfAprO0,6341
|
1312
1312
|
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=zdpNJoawB5PedsCCfgOGDDoWuif0jNtlV-K9sFL6cNQ,4968
|
1313
|
-
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=
|
1313
|
+
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=huhfEaolvf8TTzRyFqAyO1t0Vgqt0kcEOcbAChvvix0,3427
|
1314
1314
|
vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
|
1315
1315
|
vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=JgyTgZRSb-gSXL4ccHn4VkPcPZFOkVK5ohPazPqSWFw,8652
|
1316
1316
|
vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1325,9 +1325,9 @@ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=iH3ZPOstPku_
|
|
1325
1325
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1326
1326
|
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=7Ep7Ff7FtFry3Jwxhg_npF_-jT2P6TGKp5MRNnCZ8Tc,3923
|
1327
1327
|
vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
|
1328
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=
|
1328
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=OPjdEK5mL3D2cwL68GiBFlRJ2b0tgatxsfeUEPeQDxI,2146
|
1329
1329
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1330
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=
|
1330
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=eobyGcb4hMdmmyk-CcJPpOAB-NSVMUCleWVSmuHmMiQ,4752
|
1331
1331
|
vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
|
1332
1332
|
vellum/workflows/nodes/displayable/merge_node/node.py,sha256=ZyPvcTgfPOneOm5Dc2kUOoPkwNJqwRPZSj232akXynA,324
|
1333
1333
|
vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
|
@@ -1340,7 +1340,7 @@ vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha25
|
|
1340
1340
|
vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=FgS1ZMnIBliqEMNKX2ChE80bw4IVHEQ6IGiTDvF0RZw,7226
|
1341
1341
|
vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1342
1342
|
vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=UI_RMmXn9qwB-StnFPvkDd9FctBQAg43wrfouqvPepk,4701
|
1343
|
-
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=
|
1343
|
+
vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
|
1344
1344
|
vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=KqKJtJ0vuNoPuUPMdILmBTt4a2fBBxxun-nmOI7T8jo,2585
|
1345
1345
|
vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrraiBHDLKTlnBa51ZiE,284
|
1346
1346
|
vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1367,15 +1367,15 @@ vellum/workflows/references/workflow_input.py,sha256=86IuhlBz-9cGxeUzizyjdp482aj
|
|
1367
1367
|
vellum/workflows/resolvers/__init__.py,sha256=eH6hTvZO4IciDaf_cf7aM2vs-DkBDyJPycOQevJxQnI,82
|
1368
1368
|
vellum/workflows/resolvers/base.py,sha256=WHra9LRtlTuB1jmuNqkfVE2JUgB61Cyntn8f0b0WZg4,411
|
1369
1369
|
vellum/workflows/runner/__init__.py,sha256=i1iG5sAhtpdsrlvwgH6B-m49JsINkiWyPWs8vyT-bqM,72
|
1370
|
-
vellum/workflows/runner/runner.py,sha256=
|
1370
|
+
vellum/workflows/runner/runner.py,sha256=DuFvMyejwdIdapQDHrfVtouaifLEZ02WYPARmK3UqdE,28006
|
1371
1371
|
vellum/workflows/sandbox.py,sha256=GVJzVjMuYzOBnSrboB0_6MMRZWBluAyQ2o7syeaeBd0,2235
|
1372
1372
|
vellum/workflows/state/__init__.py,sha256=yUUdR-_Vl7UiixNDYQZ-GEM_kJI9dnOia75TtuNEsnE,60
|
1373
1373
|
vellum/workflows/state/base.py,sha256=jpSzF1OQd3-fqi6dMGlNsQl-7JnJxCdzWIigmX8Wz-I,14425
|
1374
1374
|
vellum/workflows/state/context.py,sha256=_NeGQpYo8yNuh0Tfh3OvcB_bG_-GC8b3ZLLl83Pf8-I,1279
|
1375
|
-
vellum/workflows/state/encoder.py,sha256=
|
1375
|
+
vellum/workflows/state/encoder.py,sha256=WdUidpOaBDx5lilJl8V8McFDHQYiCLCJR9dmktdzdZY,1836
|
1376
1376
|
vellum/workflows/state/store.py,sha256=VYGBQgN1bpd1as5eGiouV_7scg8QsRs4_1aqZAGIsRQ,793
|
1377
1377
|
vellum/workflows/state/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1378
|
-
vellum/workflows/state/tests/test_state.py,sha256=
|
1378
|
+
vellum/workflows/state/tests/test_state.py,sha256=7ap_Z9GJqyonZ1eVXwNyyuhV0AL5XiQ6uYCRhS7PFN4,3921
|
1379
1379
|
vellum/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1380
1380
|
vellum/workflows/tests/test_sandbox.py,sha256=JKwaluI-lODQo7Ek9sjDstjL_WTdSqUlVik6ZVTfVOA,1826
|
1381
1381
|
vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
|
@@ -1397,10 +1397,10 @@ vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrg
|
|
1397
1397
|
vellum/workflows/utils/vellum_variables.py,sha256=g5xHYB8etfHE32ek19nP6Anf8NyjhmUtOwO2KmQ5xZU,3111
|
1398
1398
|
vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528t75s,683
|
1399
1399
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1400
|
-
vellum/workflows/workflows/base.py,sha256=
|
1400
|
+
vellum/workflows/workflows/base.py,sha256=TLk5NiDB8N_Ytkzj_T8o-E4WpTUH8qJYZcoOk2xR3mo,18986
|
1401
1401
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
1402
|
-
vellum_ai-0.12.
|
1403
|
-
vellum_ai-0.12.
|
1404
|
-
vellum_ai-0.12.
|
1405
|
-
vellum_ai-0.12.
|
1406
|
-
vellum_ai-0.12.
|
1402
|
+
vellum_ai-0.12.13.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1403
|
+
vellum_ai-0.12.13.dist-info/METADATA,sha256=uXAzy9xHbkmecOGR1GasDk6auS-Hbl12VwdAgqAuo5c,5161
|
1404
|
+
vellum_ai-0.12.13.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1405
|
+
vellum_ai-0.12.13.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1406
|
+
vellum_ai-0.12.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|