vellum-ai 0.12.9__py3-none-any.whl → 0.12.13__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|