vellum-ai 0.14.15__py3-none-any.whl → 0.14.17__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 -0
- vellum/client/core/client_wrapper.py +1 -1
- vellum/client/resources/document_indexes/client.py +0 -55
- vellum/client/types/__init__.py +2 -0
- vellum/client/types/document_index_read.py +0 -10
- vellum/client/types/release.py +21 -0
- vellum/client/types/workflow_release_tag_read.py +7 -1
- vellum/plugins/pydantic.py +14 -4
- vellum/prompts/blocks/compilation.py +14 -0
- vellum/types/release.py +3 -0
- vellum/workflows/nodes/bases/base.py +7 -7
- vellum/workflows/nodes/bases/base_adornment_node.py +2 -0
- vellum/workflows/nodes/core/retry_node/node.py +1 -1
- vellum/workflows/nodes/core/try_node/node.py +1 -1
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +4 -0
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +27 -1
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py +182 -0
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py +4 -1
- vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py +7 -1
- vellum/workflows/utils/tests/test_vellum_variables.py +7 -1
- vellum/workflows/utils/vellum_variables.py +4 -0
- vellum/workflows/vellum_client.py +9 -5
- {vellum_ai-0.14.15.dist-info → vellum_ai-0.14.17.dist-info}/METADATA +1 -1
- {vellum_ai-0.14.15.dist-info → vellum_ai-0.14.17.dist-info}/RECORD +40 -35
- vellum_cli/image_push.py +76 -42
- vellum_cli/tests/test_image_push.py +56 -0
- vellum_ee/workflows/display/nodes/base_node_display.py +35 -29
- vellum_ee/workflows/display/nodes/get_node_display_class.py +0 -9
- vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py +38 -18
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +1 -0
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +29 -33
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +91 -106
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +33 -38
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +138 -153
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +23 -26
- vellum_ee/workflows/display/workflows/tests/test_workflow_display.py +51 -7
- {vellum_ai-0.14.15.dist-info → vellum_ai-0.14.17.dist-info}/LICENSE +0 -0
- {vellum_ai-0.14.15.dist-info → vellum_ai-0.14.17.dist-info}/WHEEL +0 -0
- {vellum_ai-0.14.15.dist-info → vellum_ai-0.14.17.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
import json
|
2
|
-
from typing import Iterator
|
2
|
+
from typing import Any, Dict, Iterator, Type, Union
|
3
3
|
|
4
|
+
from vellum.workflows.constants import undefined
|
4
5
|
from vellum.workflows.errors import WorkflowErrorCode
|
5
6
|
from vellum.workflows.exceptions import NodeException
|
6
7
|
from vellum.workflows.nodes.displayable.bases import BaseInlinePromptNode as BaseInlinePromptNode
|
@@ -30,9 +31,11 @@ class InlinePromptNode(BaseInlinePromptNode[StateType]):
|
|
30
31
|
The outputs of the InlinePromptNode.
|
31
32
|
|
32
33
|
text: str - The result of the Prompt Execution
|
34
|
+
json: Optional[Dict[Any, Any]] - The result of the Prompt Execution in JSON format
|
33
35
|
"""
|
34
36
|
|
35
37
|
text: str
|
38
|
+
json: Union[Dict[Any, Any], Type[undefined]] = undefined
|
36
39
|
|
37
40
|
def run(self) -> Iterator[BaseOutput]:
|
38
41
|
outputs = yield from self._process_prompt_event_stream()
|
@@ -27,6 +27,7 @@ from vellum import (
|
|
27
27
|
StringVellumValue,
|
28
28
|
VellumAudio,
|
29
29
|
VellumError,
|
30
|
+
VellumImage,
|
30
31
|
)
|
31
32
|
from vellum.prompts.blocks.compilation import compile_prompt_blocks
|
32
33
|
from vellum.prompts.blocks.types import CompiledChatMessagePromptBlock
|
@@ -202,7 +203,7 @@ class OpenAIChatCompletionNode(InlinePromptNode[StateType]):
|
|
202
203
|
json_content_item: ChatCompletionContentPartTextParam = {"type": "text", "text": json.dumps(json_value)}
|
203
204
|
content.append(json_content_item)
|
204
205
|
elif block.content.type == "IMAGE":
|
205
|
-
image_value = cast(
|
206
|
+
image_value = cast(VellumImage, block.content.value)
|
206
207
|
image_content_item: ChatCompletionContentPartImageParam = {
|
207
208
|
"type": "image_url",
|
208
209
|
"image_url": {"url": image_value.src},
|
@@ -251,6 +252,11 @@ class OpenAIChatCompletionNode(InlinePromptNode[StateType]):
|
|
251
252
|
}
|
252
253
|
|
253
254
|
content.append(audio_content_item)
|
255
|
+
elif block.content.type == "DOCUMENT":
|
256
|
+
raise NodeException(
|
257
|
+
code=WorkflowErrorCode.PROVIDER_ERROR,
|
258
|
+
message="Document chat message content type is not currently supported",
|
259
|
+
)
|
254
260
|
else:
|
255
261
|
raise NodeException(
|
256
262
|
code=WorkflowErrorCode.INTERNAL_ERROR,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import pytest
|
2
2
|
from typing import List, Optional
|
3
3
|
|
4
|
-
from vellum import ChatMessage, SearchResult
|
4
|
+
from vellum import ChatMessage, SearchResult, VellumAudio, VellumDocument, VellumImage
|
5
5
|
from vellum.workflows.types.core import Json
|
6
6
|
from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_variable_type
|
7
7
|
|
@@ -21,6 +21,12 @@ from vellum.workflows.utils.vellum_variables import primitive_type_to_vellum_var
|
|
21
21
|
(Optional[List[SearchResult]], "SEARCH_RESULTS"),
|
22
22
|
(Json, "JSON"),
|
23
23
|
(Optional[Json], "JSON"),
|
24
|
+
(VellumDocument, "DOCUMENT"),
|
25
|
+
(Optional[VellumDocument], "DOCUMENT"),
|
26
|
+
(VellumAudio, "AUDIO"),
|
27
|
+
(Optional[VellumAudio], "AUDIO"),
|
28
|
+
(VellumImage, "IMAGE"),
|
29
|
+
(Optional[VellumImage], "IMAGE"),
|
24
30
|
],
|
25
31
|
)
|
26
32
|
def test_primitive_type_to_vellum_variable_type(type_, expected):
|
@@ -10,6 +10,8 @@ from vellum import (
|
|
10
10
|
SearchResultRequest,
|
11
11
|
VellumAudio,
|
12
12
|
VellumAudioRequest,
|
13
|
+
VellumDocument,
|
14
|
+
VellumDocumentRequest,
|
13
15
|
VellumError,
|
14
16
|
VellumErrorRequest,
|
15
17
|
VellumImage,
|
@@ -62,6 +64,8 @@ def primitive_type_to_vellum_variable_type(type_: Union[Type, BaseDescriptor]) -
|
|
62
64
|
return "IMAGE"
|
63
65
|
elif _is_type_optionally_in(type_, (VellumAudio, VellumAudioRequest)):
|
64
66
|
return "AUDIO"
|
67
|
+
elif _is_type_optionally_in(type_, (VellumDocument, VellumDocumentRequest)):
|
68
|
+
return "DOCUMENT"
|
65
69
|
elif _is_type_optionally_in(type_, (VellumError, VellumErrorRequest)):
|
66
70
|
return "ERROR"
|
67
71
|
elif _is_type_optionally_in(type_, (List[ChatMessage], List[ChatMessageRequest])):
|
@@ -10,9 +10,13 @@ def create_vellum_client(api_key: Optional[str] = None) -> Vellum:
|
|
10
10
|
|
11
11
|
return Vellum(
|
12
12
|
api_key=api_key,
|
13
|
-
environment=
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
environment=create_vellum_environment(),
|
14
|
+
)
|
15
|
+
|
16
|
+
|
17
|
+
def create_vellum_environment() -> VellumEnvironment:
|
18
|
+
return VellumEnvironment(
|
19
|
+
default=os.getenv("VELLUM_DEFAULT_API_URL", os.getenv("VELLUM_API_URL", "https://api.vellum.ai")),
|
20
|
+
documents=os.getenv("VELLUM_DOCUMENTS_API_URL", os.getenv("VELLUM_API_URL", "https://documents.vellum.ai")),
|
21
|
+
predict=os.getenv("VELLUM_PREDICT_API_URL", os.getenv("VELLUM_API_URL", "https://predict.vellum.ai")),
|
18
22
|
)
|
@@ -3,7 +3,7 @@ vellum_cli/README.md,sha256=2NudRoLzWxNKqnuVy1JuQ7DerIaxWGYkrH8kMd-asIE,90
|
|
3
3
|
vellum_cli/__init__.py,sha256=7aO9XFnaEVRiVshn86cFudebFUccT-gV8xIARJWqKYo,12257
|
4
4
|
vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
|
5
5
|
vellum_cli/config.py,sha256=aKnhvM5B8QdPA4cQC5Sqg7ImP-vNcVdSkZmk_OBpQTw,9309
|
6
|
-
vellum_cli/image_push.py,sha256=
|
6
|
+
vellum_cli/image_push.py,sha256=8DDvRDJEZ-FukUCqGW1827bg1ybF4xBbx9WyqWYQE-g,6816
|
7
7
|
vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
|
8
8
|
vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
|
9
9
|
vellum_cli/ping.py,sha256=lWyJw6sziXjyTopTYRdFF5hV-sYPVDdX0yVbG5fzcY4,585
|
@@ -12,6 +12,7 @@ vellum_cli/push.py,sha256=xjTNbLwOVFNU3kpBrm56Bk5QkSRrJ9z86qceghCzfIA,9655
|
|
12
12
|
vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
|
14
14
|
vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
|
15
|
+
vellum_cli/tests/test_image_push.py,sha256=i3lJuW8nFRwL1M1OF6752IZYvGAFgKmkB2hd_rYlsmg,2028
|
15
16
|
vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ,18754
|
16
17
|
vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
|
17
18
|
vellum_cli/tests/test_ping.py,sha256=QtbhYKMYn1DFnDyBij2mkQO32j9KOpZ5Pf0yek7k_Ao,1284
|
@@ -23,22 +24,22 @@ vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
23
24
|
vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
25
|
vellum_ee/workflows/display/base.py,sha256=ak29FIsawhaFa9_paZUHThlZRFJ1xB486JWKuSt1PYY,1965
|
25
26
|
vellum_ee/workflows/display/nodes/__init__.py,sha256=436iSAh_Ex5tC68oEYvNgPu05ZVIAVXnS4PKGrQeZ0Y,321
|
26
|
-
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=
|
27
|
+
vellum_ee/workflows/display/nodes/base_node_display.py,sha256=H7LJGtGWFkypyNhIrIhHoGYXS0hRYcP7aoYHlM90f_U,17395
|
27
28
|
vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=ZLKQ8Xa3h9nGkj4t4V_7OeU7CBFWY3gXB9CkaCLOhEk,2699
|
28
|
-
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=
|
29
|
+
vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=LhV2wSo07iOTUj1clKwH2zzCzKdLiW2gk22R3Qco81E,2196
|
29
30
|
vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
31
|
vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
|
31
32
|
vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
|
32
33
|
vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
|
33
34
|
vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
|
34
35
|
vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=hoV-cUtS6H9kmRQXHd2py95GRWI_dAnnaPwvlNBkDOQ,8571
|
35
|
-
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=
|
36
|
+
vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=oJAQrAm5iFQq0_fX94sMbS3RQEK1M1VsoUck4vsPs9A,5820
|
36
37
|
vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=z00Z3L0d4PsUQo4S8FRDTtOFLtjdi17TJbatNVF4nM8,4288
|
37
38
|
vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
|
38
39
|
vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
|
39
40
|
vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=p-PvlnxpBQ7IKskZi2A19jKAtKnSxJ8LPbGMA83VkFk,2805
|
40
41
|
vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=aYZSJTxknU4LMiQdWk9LcK6CkhdozeDEMiRxfAyUNEc,2202
|
41
|
-
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=
|
42
|
+
vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=CPNW7HtKKJCGOvvE9DTn-56XVDLgAcBg2QHTfqU4N7k,8543
|
42
43
|
vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=MU9I8CB1X1TgL1aa1eT6DHWwNJ-2v79t74xl0oy-fBo,5510
|
43
44
|
vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=8CPnn06HIBxBOiECevUffeVmQmCpec6WtPQnNl9gj9Y,3748
|
44
45
|
vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=HkNMgdQELiON42jdO-xDLmqrEKdGx1RVqrz2DXNTLS8,3239
|
@@ -61,11 +62,11 @@ vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=VD-4USi
|
|
61
62
|
vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
63
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
64
|
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=A1-tIpC5KIKG9JA_rkd1nLS8zUG3Kb4QiVdvb3boFxE,2509
|
64
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=
|
65
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=
|
66
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256
|
67
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=
|
68
|
-
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=
|
65
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=2ZDTmpiU2CcZe4ukxoQ79SJx8V8kDRQHgUxP5Vtesus,15605
|
66
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=lScpUiz8fvUmJK18Cpygs9xQrfHQlkSIlmxapGYTS0g,18770
|
67
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=KgxSN8L5AWPL8EpQfSZiTqK428nAIElcWrV-sR17528,6456
|
68
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=yS8GpjbH0objjcNYK73j8rDHbhqinIbG7CcoNjnolBg,40611
|
69
|
+
vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=_-ADur28OkVy4YEgMHkkVYqMbS1j3GcOtX9MTYmmvf0,4632
|
69
70
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=IRazH2QR6F8RGqNemEnHueyj5DtEa6rFTYhT16S4jI8,15917
|
70
71
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=V__y7uu-dy6TJjPeu4UDvaoO2yYwBRbPiW9uJdzWRx4,29828
|
71
72
|
vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=R8DW1DUb0DOSLtnF2E1HaCTmtpG-ski0LfcM2WeLVNo,47672
|
@@ -92,7 +93,7 @@ vellum_ee/workflows/display/vellum.py,sha256=7mqQaKZPPrLMcXSAQkPIxCy5x8HkKs5PbCu
|
|
92
93
|
vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
|
93
94
|
vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=QKMSmV--UoE8L7pYmKvZqtaatygrxmSm9PDSH71Yr0Y,19937
|
94
95
|
vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
|
95
|
-
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=
|
96
|
+
vellum_ee/workflows/display/workflows/tests/test_workflow_display.py,sha256=eCBCssh2J0hhGAKiv5pVxYKxMEUQCtFX-FKn49xercA,8576
|
96
97
|
vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=mbAzCpswOek34ITeTkesbVreCXpulj4NFjIg3RcdVZ8,18243
|
97
98
|
vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
98
99
|
vellum_ee/workflows/server/virtual_file_loader.py,sha256=X_DdNK7MfyOjKWekk6YQpOSCT6klKcdjT6nVJcBH1sM,1481
|
@@ -118,12 +119,12 @@ vellum_ee/workflows/tests/local_workflow/workflow.py,sha256=A4qOzOPNwePYxWbcAgIP
|
|
118
119
|
vellum_ee/workflows/tests/test_display_meta.py,sha256=xLQ7QtIXIiIm61pm2lyl588Ohzc3pjyq1nDp-qVu2Fs,2295
|
119
120
|
vellum_ee/workflows/tests/test_server.py,sha256=M6vvQ2hjIpDWtQdDM9EPbMvUrZ93niAuYnxMNJWOjPA,511
|
120
121
|
vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
|
121
|
-
vellum/__init__.py,sha256=
|
122
|
+
vellum/__init__.py,sha256=Vh9jxpBVXB2fTCyoUMlLdGL1Ujf0zNNNvqhNu5II8KI,36466
|
122
123
|
vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
|
123
124
|
vellum/client/__init__.py,sha256=tKtdM1_GqmGq1gpi9ydWD_T-MM7fPn8QdHh8ww19cNI,117564
|
124
125
|
vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
|
125
126
|
vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
|
126
|
-
vellum/client/core/client_wrapper.py,sha256=
|
127
|
+
vellum/client/core/client_wrapper.py,sha256=lp2PrDTuF-fVxozBobWF7i3EJRnKs7ggqOiSWj5wuL4,1869
|
127
128
|
vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
|
128
129
|
vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
|
129
130
|
vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
|
@@ -150,7 +151,7 @@ vellum/client/resources/deployments/types/__init__.py,sha256=29GVdoLOJsADSSSqZwb
|
|
150
151
|
vellum/client/resources/deployments/types/deployments_list_request_status.py,sha256=CxlQD16KZXme7x31YYCe_3aAgEueutDTeJo5A4Au-aU,174
|
151
152
|
vellum/client/resources/deployments/types/list_deployment_release_tags_request_source.py,sha256=hRGgWMYZL9uKCmD_2dU8-u9RCPUUGItpNn1tUY-NXKY,180
|
152
153
|
vellum/client/resources/document_indexes/__init__.py,sha256=YpOl_9IV7xOlH4OmusQxtAJB11kxQfCSMDyT1_UD0oM,165
|
153
|
-
vellum/client/resources/document_indexes/client.py,sha256=
|
154
|
+
vellum/client/resources/document_indexes/client.py,sha256=UcznU0NyvdNBpV4UCsTqG3Ejj6w4dK4UBmgrTWzZFtw,35438
|
154
155
|
vellum/client/resources/document_indexes/types/__init__.py,sha256=IoFqKHN_VBdEhC7VL8_6Jbatrn0e0zuYEJAJUahcUR0,196
|
155
156
|
vellum/client/resources/document_indexes/types/document_indexes_list_request_status.py,sha256=sfUEB0cvOSmlE2iITqnMVyHv05Zy2fWP4QjCIYqMg0M,178
|
156
157
|
vellum/client/resources/documents/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
@@ -188,7 +189,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
|
|
188
189
|
vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
|
189
190
|
vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
|
190
191
|
vellum/client/resources/workspaces/client.py,sha256=RthwzN1o-Jxwg5yyNNodavFyNUSxfLoTv26w3mRR5g8,3595
|
191
|
-
vellum/client/types/__init__.py,sha256=
|
192
|
+
vellum/client/types/__init__.py,sha256=D6j2QfxOV3WULH0inmz9q-gdOQcytrr6_R8WYaC5ZZk,54894
|
192
193
|
vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
|
193
194
|
vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
|
194
195
|
vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
|
@@ -266,7 +267,7 @@ vellum/client/types/document_index_chunking.py,sha256=TU0Y7z0Xacm3dhzEDuDIG3ZKJC
|
|
266
267
|
vellum/client/types/document_index_chunking_request.py,sha256=g9BKCsHKg5kzjG7YYeMNQ_5R8TXLeSgumJlMXoSfBcs,435
|
267
268
|
vellum/client/types/document_index_indexing_config.py,sha256=xL1pCzUOkw5sSie1OrBpasE3bVnv0UyZBn7uZztbhbs,781
|
268
269
|
vellum/client/types/document_index_indexing_config_request.py,sha256=Wt-ys1o_acHNyLU0c1laG2PVT7rgCfwO54f5nudAxk4,832
|
269
|
-
vellum/client/types/document_index_read.py,sha256=
|
270
|
+
vellum/client/types/document_index_read.py,sha256=ePngiRszr65HLl9D0_FUdhAdMe84nRwyM3cKbr8rFpg,1177
|
270
271
|
vellum/client/types/document_processing_state.py,sha256=ISlurj7jQzwHzxPzDZTqeAIgSIIGMBBPgcOSoe04pTU,211
|
271
272
|
vellum/client/types/document_prompt_block.py,sha256=sgFxN48PILFuuF2KUIwks6PbJ3XH6sCE_8ydLEE_doU,1019
|
272
273
|
vellum/client/types/document_read.py,sha256=6nwEvVvVe-6y2vtPNYB7KtcFoaydH2ow-WhCmCAvMQ8,1713
|
@@ -481,6 +482,7 @@ vellum/client/types/rejected_execute_prompt_response.py,sha256=YyY9KGTbJ53DmwiXH
|
|
481
482
|
vellum/client/types/rejected_execute_workflow_workflow_result_event.py,sha256=6k6GRr2TnVSM0DxS3H3hczwV7962UDG92yLh6j8OjcM,882
|
482
483
|
vellum/client/types/rejected_prompt_execution_meta.py,sha256=4Oidh3XBBHzgjOys2kuETxqWc_MOqS50UpB0o8YNZd8,844
|
483
484
|
vellum/client/types/rejected_workflow_node_result_event.py,sha256=o9AUc9hT60F8ckMkCx8HtKxtj4y82LBoJduB9u8w0TM,1319
|
485
|
+
vellum/client/types/release.py,sha256=lfB3zKIS8UIc19Lb7zAOEAHCvuN7wW23aXEkZMio5-Q,597
|
484
486
|
vellum/client/types/release_tag_source.py,sha256=YavosOXZ976yfXTNWRTZwh2HhRiYmSDk0bQCkl-jCoQ,158
|
485
487
|
vellum/client/types/replace_test_suite_test_case_request.py,sha256=c1GT1RUCei1yWxyZy4Gv40PkXYisvK5OkzlqQ6WeBYA,1906
|
486
488
|
vellum/client/types/rich_text_child_block.py,sha256=X_ACKFKSUx5SXT1cLp0Y5-7VrNxcGOggPm67Lk2442U,270
|
@@ -671,7 +673,7 @@ vellum/client/types/workflow_output_string.py,sha256=_jclzbQ-Wlf-7FEVTWXhs9h5FWf
|
|
671
673
|
vellum/client/types/workflow_push_deployment_config_request.py,sha256=pG6bZtlw7S0TcXtNRQNa7y_2NodZe7dp5SchIrgRUVU,745
|
672
674
|
vellum/client/types/workflow_push_exec_config.py,sha256=6TaVMVqhSOz4DnY46l8axPDtytSioXDl9nHvFXSxH1g,94
|
673
675
|
vellum/client/types/workflow_push_response.py,sha256=1vUSZmZ1GK1242dAkNwJnJI0rL3pBT3_0HOLLjdiutw,724
|
674
|
-
vellum/client/types/workflow_release_tag_read.py,sha256=
|
676
|
+
vellum/client/types/workflow_release_tag_read.py,sha256=M-zNVQw7h0t9uzNSkp7Xl3SESERacqALu3mGemNpKRg,1263
|
675
677
|
vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py,sha256=pjWobdk9mZD3Px86rwFHfs_PYJBGXDKQUkxsgNEe6EA,825
|
676
678
|
vellum/client/types/workflow_request_chat_history_input_request.py,sha256=WCZvwDuNS8ylWOOoKD3t7fHLSYB0h-fVCqeDRzqPoPA,898
|
677
679
|
vellum/client/types/workflow_request_input_request.py,sha256=wgbKgKy-ftTzc6VMsgPkIiHaAujSiJjLizp2GfksX-A,632
|
@@ -719,12 +721,12 @@ vellum/evaluations/utils/env.py,sha256=Xj_nxsoU5ox06EOTjRopR4lrigQI6Le6qbWGltYoE
|
|
719
721
|
vellum/evaluations/utils/exceptions.py,sha256=dXMAkzqbHV_AP5FjjbegPlfUE0zQDlpA3qOsoOJUxfg,49
|
720
722
|
vellum/evaluations/utils/paginator.py,sha256=rEED_BJAXAM6tM1yMwHePNzszjq_tTq4NbQvi1jWQ_Q,697
|
721
723
|
vellum/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
722
|
-
vellum/plugins/pydantic.py,sha256=
|
724
|
+
vellum/plugins/pydantic.py,sha256=XpQQs_o8DQY_5gFFDzJzaXahUqR_l5TEI4b5ZoH9ob8,3528
|
723
725
|
vellum/plugins/utils.py,sha256=cPmxE9R2CK1bki2jKE8rB-G9zMf2pzHjSPDHFPXwd3Q,878
|
724
726
|
vellum/plugins/vellum_mypy.py,sha256=QTuMSq6PiZW1dyTUZ5Bf1d4XkgFj0TKAgZLP8f4UgL4,27914
|
725
727
|
vellum/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
726
728
|
vellum/prompts/blocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
727
|
-
vellum/prompts/blocks/compilation.py,sha256=
|
729
|
+
vellum/prompts/blocks/compilation.py,sha256=qeC_4La5auQkm4EyzCMpN34F5R8mjiGcLV7IxKgVf3k,9973
|
728
730
|
vellum/prompts/blocks/exceptions.py,sha256=vmk5PV6Vyw9nKjZYQDUDW0LH8MfQNIgFvFb_mFWdIRI,50
|
729
731
|
vellum/prompts/blocks/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
730
732
|
vellum/prompts/blocks/tests/test_compilation.py,sha256=EOUtdzJDFGbGhoc_y5XTMyO0HOpOM7FYJssPzd_yRVg,5235
|
@@ -1072,6 +1074,7 @@ vellum/types/rejected_execute_prompt_response.py,sha256=hznSDSGod3eOrTS6Z-8EUDnG
|
|
1072
1074
|
vellum/types/rejected_execute_workflow_workflow_result_event.py,sha256=zyaUrnK5FRxkK8iQ71Il8exrNjC6W6lWsleJk6SSBxM,185
|
1073
1075
|
vellum/types/rejected_prompt_execution_meta.py,sha256=ev1iT8IFkHn7YGg04DHdOGinBHQfIaKa0sEa2yuOjTw,168
|
1074
1076
|
vellum/types/rejected_workflow_node_result_event.py,sha256=RbaaRh7xZUueiyOzfPZqwfYiRdRgeudbvk8jhqmBrew,173
|
1077
|
+
vellum/types/release.py,sha256=HNZgTcYeUxHyI25_6YncMzEvlswJ1zVESJ82bKO04Ak,145
|
1075
1078
|
vellum/types/release_tag_source.py,sha256=71AVUOydv6hauj65Wj5l2qBa35jTLTheLpMIsgz3noI,156
|
1076
1079
|
vellum/types/replace_test_suite_test_case_request.py,sha256=qMI4-4s_EXTOo29mZR14opoOTPp5_zIylPJU5ZPCvAc,174
|
1077
1080
|
vellum/types/rich_text_child_block.py,sha256=W8xJl-2DOKrpht1-Dx9EcVa4XDO5t7CS1B5Zt_bS9ow,159
|
@@ -1362,8 +1365,8 @@ vellum/workflows/inputs/tests/test_inputs.py,sha256=g--YqWTNWzMk5Ktoj__gq988kvBR
|
|
1362
1365
|
vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
|
1363
1366
|
vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
|
1364
1367
|
vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
|
1365
|
-
vellum/workflows/nodes/bases/base.py,sha256=
|
1366
|
-
vellum/workflows/nodes/bases/base_adornment_node.py,sha256=
|
1368
|
+
vellum/workflows/nodes/bases/base.py,sha256=eW-3RSkBgtuGY8x2nmbHYiUg_HXS5U57n3k6Fh-dJ9s,15330
|
1369
|
+
vellum/workflows/nodes/bases/base_adornment_node.py,sha256=afMwJLHK2Ke7sBpceVLnNdZMlU2O-6UgyG7lBt9SAQ8,3039
|
1367
1370
|
vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1368
1371
|
vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=4SOdZzvugVtN8CIuo5RrapAxSYGXnxUwQ77dXJ64oTU,6295
|
1369
1372
|
vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT9JL18-mRR4,455
|
@@ -1378,14 +1381,14 @@ vellum/workflows/nodes/core/map_node/node.py,sha256=dY27Xm11LHsqD7hnZnVYYDIazZ-X
|
|
1378
1381
|
vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1379
1382
|
vellum/workflows/nodes/core/map_node/tests/test_node.py,sha256=uMR0AyIFn539LqTKHdwuBswnx1i-PHyqPpgtYrnmYMY,3496
|
1380
1383
|
vellum/workflows/nodes/core/retry_node/__init__.py,sha256=lN2bIy5a3Uzhs_FYCrooADyYU6ZGShtvLKFWpelwPvo,60
|
1381
|
-
vellum/workflows/nodes/core/retry_node/node.py,sha256=
|
1384
|
+
vellum/workflows/nodes/core/retry_node/node.py,sha256=eRfDj54idq4JXkzgFyHNh18qnEMI6vLOtNgn7MsFg1o,4359
|
1382
1385
|
vellum/workflows/nodes/core/retry_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1383
1386
|
vellum/workflows/nodes/core/retry_node/tests/test_node.py,sha256=fNgDufkIsrTC-6ftvogqSpWhqqBj9iNESdfK19B1Yx0,5159
|
1384
1387
|
vellum/workflows/nodes/core/templating_node/__init__.py,sha256=GmyuYo81_A1_Bz6id69ozVFS6FKiuDsZTiA3I6MaL2U,70
|
1385
1388
|
vellum/workflows/nodes/core/templating_node/node.py,sha256=-JIqLUv6Xpx_LTVZt7whQ2X2VatgHDdTxjMrz64luEs,3721
|
1386
1389
|
vellum/workflows/nodes/core/templating_node/tests/test_templating_node.py,sha256=MHofz-BwAgt7EXkab8VIyacYznDEIJ7Er7MJUaxNQQo,9614
|
1387
1390
|
vellum/workflows/nodes/core/try_node/__init__.py,sha256=JVD4DrldTIqFQQFrubs9KtWCCc0YCAc7Fzol5ZWIWeM,56
|
1388
|
-
vellum/workflows/nodes/core/try_node/node.py,sha256=
|
1391
|
+
vellum/workflows/nodes/core/try_node/node.py,sha256=RbxL0NRXS0IxRP0MJAnLABolF6dkwVniiqsagzy-lwk,4445
|
1389
1392
|
vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1390
1393
|
vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=h6eUc3SggvhzBWlOD0PrPUlkoCSQHwjqYn81VkxSIxU,4948
|
1391
1394
|
vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
|
@@ -1397,10 +1400,12 @@ vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN
|
|
1397
1400
|
vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
|
1398
1401
|
vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=Ev_So7D_4Qfvl2_E8veVfxAxWfbJIA2ujyW5istLg5I,4066
|
1399
1402
|
vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
|
1400
|
-
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=
|
1403
|
+
vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=HGNoGLJ9lbqflGdYFDIiuHFyi0iJ-agJu4kkJ7D3dGs,3212
|
1401
1404
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
|
1402
1405
|
vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
|
1403
|
-
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=
|
1406
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=fTQ7KS5u7xCO_nJsWT5_LWgwGnYZg4U06slvXxHAzTU,8449
|
1407
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1408
|
+
vellum/workflows/nodes/displayable/bases/inline_prompt_node/tests/test_inline_prompt_node.py,sha256=kodL6T6booHtdTLMJ9wSk_JHFgPNkTz3U8AJDB2cxtU,6696
|
1404
1409
|
vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=UIyNUUr8ii6rIx1gQL5vIPqTAww4ExxxJkFMoglc8LE,5794
|
1405
1410
|
vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
|
1406
1411
|
vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -1423,7 +1428,7 @@ vellum/workflows/nodes/displayable/final_output_node/tests/test_node.py,sha256=E
|
|
1423
1428
|
vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
|
1424
1429
|
vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=h5nIBzQxbXTrdTq1wjDcekk1RV4-rKUNCshqdBAiJJY,4025
|
1425
1430
|
vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
|
1426
|
-
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=
|
1431
|
+
vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=BaBfIfQX10sfoJ03H6zAnheae8bcJgi6Ff3SkYvmCKo,2523
|
1427
1432
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1428
1433
|
vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=Qg1oGXecGH2Hp9oBAY42bTfKHBvNHHoJ6vUPPEj8Lq0,8539
|
1429
1434
|
vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
|
@@ -1449,7 +1454,7 @@ vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha
|
|
1449
1454
|
vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrraiBHDLKTlnBa51ZiE,284
|
1450
1455
|
vellum/workflows/nodes/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1451
1456
|
vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
|
1452
|
-
vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=
|
1457
|
+
vellum/workflows/nodes/experimental/openai_chat_completion_node/node.py,sha256=cKI2Ls25L-JVt4z4a2ozQa-YBeVy21Z7BQ32Sj7iBPE,10460
|
1453
1458
|
vellum/workflows/nodes/mocks.py,sha256=a1FjWEIocseMfjzM-i8DNozpUsaW0IONRpZmXBoWlyc,10455
|
1454
1459
|
vellum/workflows/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1455
1460
|
vellum/workflows/nodes/tests/test_mocks.py,sha256=mfPvrs75PKcsNsbJLQAN6PDFoVqs9TmQxpdyFKDdO60,7837
|
@@ -1502,18 +1507,18 @@ vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
1502
1507
|
vellum/workflows/utils/tests/test_functions.py,sha256=ytdruS55aO2egsb5sAv8_9jf68L1cJoZu2uKV2iamrg,8083
|
1503
1508
|
vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwqsYs37PseyLhxw,402
|
1504
1509
|
vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
|
1505
|
-
vellum/workflows/utils/tests/test_vellum_variables.py,sha256=
|
1510
|
+
vellum/workflows/utils/tests/test_vellum_variables.py,sha256=maI5e7Od7UlpMwlrOrcdlXqnFhonkXGnWq8G2-YQLi8,1155
|
1506
1511
|
vellum/workflows/utils/uuids.py,sha256=DFzPv9RCvsKhvdTEIQyfSek2A31D6S_QcmeLPbgrgTY,739
|
1507
|
-
vellum/workflows/utils/vellum_variables.py,sha256=
|
1508
|
-
vellum/workflows/vellum_client.py,sha256=
|
1512
|
+
vellum/workflows/utils/vellum_variables.py,sha256=UiGlUh0a8vel2FbW3w-xbHxSv_jNutkDdqMVtP_b42A,3385
|
1513
|
+
vellum/workflows/vellum_client.py,sha256=GxOy3dX6A04xiY69vPv1S4YGuQ_TMxwHi6WRMimQBBE,762
|
1509
1514
|
vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
|
1510
1515
|
vellum/workflows/workflows/base.py,sha256=TSS2BHC8LAi-N5GdEa75BeChwzwTzL7yldFnTlLINro,22665
|
1511
1516
|
vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
|
1512
1517
|
vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1513
1518
|
vellum/workflows/workflows/tests/test_base_workflow.py,sha256=NRteiICyJvDM5zrtUfq2fZoXcGQVaWC9xmNlLLVW0cU,7979
|
1514
1519
|
vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
|
1515
|
-
vellum_ai-0.14.
|
1516
|
-
vellum_ai-0.14.
|
1517
|
-
vellum_ai-0.14.
|
1518
|
-
vellum_ai-0.14.
|
1519
|
-
vellum_ai-0.14.
|
1520
|
+
vellum_ai-0.14.17.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
|
1521
|
+
vellum_ai-0.14.17.dist-info/METADATA,sha256=DPUjnu7ydH6sKPprPiI_A0qW2RVB6JwGh5LV0DUZwk4,5408
|
1522
|
+
vellum_ai-0.14.17.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
1523
|
+
vellum_ai-0.14.17.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
|
1524
|
+
vellum_ai-0.14.17.dist-info/RECORD,,
|
vellum_cli/image_push.py
CHANGED
@@ -8,7 +8,7 @@ import docker
|
|
8
8
|
from docker import DockerClient
|
9
9
|
from dotenv import load_dotenv
|
10
10
|
|
11
|
-
from vellum.workflows.vellum_client import create_vellum_client
|
11
|
+
from vellum.workflows.vellum_client import create_vellum_client, create_vellum_environment
|
12
12
|
from vellum_cli.logger import load_cli_logger
|
13
13
|
|
14
14
|
_SUPPORTED_ARCHITECTURE = "amd64"
|
@@ -19,6 +19,21 @@ def image_push_command(image: str, tags: Optional[List[str]] = None) -> None:
|
|
19
19
|
logger = load_cli_logger()
|
20
20
|
vellum_client = create_vellum_client()
|
21
21
|
|
22
|
+
# Check if we are self hosted by looking at our base url
|
23
|
+
api_url = create_vellum_environment().default
|
24
|
+
is_self_hosted = not api_url.endswith("vellum.ai") and "localhost:" not in api_url and "127.0.0.1" not in api_url
|
25
|
+
if is_self_hosted:
|
26
|
+
logger.info("Self hosted install detected...")
|
27
|
+
|
28
|
+
if is_self_hosted and "/" not in image:
|
29
|
+
logger.error(
|
30
|
+
"For adding images to your self hosted install you must include the "
|
31
|
+
"repository address in the provided image name. You must also have "
|
32
|
+
"already pushed the image to the docker repository that your self "
|
33
|
+
"hosted install is using."
|
34
|
+
)
|
35
|
+
exit(1)
|
36
|
+
|
22
37
|
# We're using docker python SDK here instead of subprocess since it connects to the docker host directly
|
23
38
|
# instead of using the command line so it seemed like it would possibly be a little more robust since
|
24
39
|
# it might avoid peoples' wonky paths, unfortunately it doesn't support the manifest command which we need for
|
@@ -29,59 +44,78 @@ def image_push_command(image: str, tags: Optional[List[str]] = None) -> None:
|
|
29
44
|
docker_client = docker.from_env()
|
30
45
|
check_architecture(docker_client, image, logger)
|
31
46
|
|
32
|
-
logger.info("Authenticating...")
|
33
|
-
auth = vellum_client.container_images.docker_service_token()
|
34
|
-
|
35
|
-
docker_client.login(
|
36
|
-
username="oauth2accesstoken",
|
37
|
-
password=auth.access_token,
|
38
|
-
registry=auth.repository,
|
39
|
-
)
|
40
|
-
|
41
47
|
repo_split = image.split("/")
|
42
48
|
tag_split = repo_split[-1].split(":")
|
43
49
|
image_name = tag_split[0]
|
44
50
|
main_tag = tag_split[1] if len(tag_split) > 1 else "latest"
|
45
|
-
|
46
51
|
all_tags = [main_tag, *(tags or [])]
|
47
|
-
for tag in all_tags:
|
48
|
-
vellum_image_name = f"{auth.repository}/{image_name}:{tag}"
|
49
|
-
|
50
|
-
docker_client.api.tag(image, vellum_image_name)
|
51
|
-
|
52
|
-
push_result = docker_client.images.push(repository=vellum_image_name, stream=True)
|
53
|
-
|
54
|
-
# Here were trying to mime the output you would get from a normal docker push, which
|
55
|
-
# the python sdk makes as hard as possible.
|
56
|
-
for raw_line in push_result:
|
57
|
-
try:
|
58
|
-
for sub_line in raw_line.decode("utf-8").split("\r\n"):
|
59
|
-
line = json.loads(sub_line)
|
60
|
-
error_message = line.get("errorDetail", {}).get("message")
|
61
|
-
status = line.get("status")
|
62
|
-
id = line.get("id", "")
|
63
|
-
|
64
|
-
if error_message:
|
65
|
-
logger.error(error_message)
|
66
|
-
exit(1)
|
67
|
-
elif status == "Waiting":
|
68
|
-
continue
|
69
|
-
elif status:
|
70
|
-
logger.info(f"{id}{': ' if id else ''}{status}")
|
71
|
-
else:
|
72
|
-
logger.info(line)
|
73
|
-
except Exception:
|
74
|
-
continue
|
75
52
|
|
76
|
-
|
53
|
+
if is_self_hosted:
|
54
|
+
# Include the repo for self hosted since we skip pushing it to our internal repo and expect
|
55
|
+
# the user the push it themselves and provide us with the repo name.
|
56
|
+
image_name = image.split(":")[0]
|
57
|
+
|
58
|
+
logger.info("Checking if image already exists in repository...")
|
59
|
+
exists_result = subprocess.run(
|
60
|
+
["docker", "manifest", "inspect", image],
|
61
|
+
stdout=subprocess.PIPE,
|
62
|
+
stderr=subprocess.PIPE,
|
63
|
+
)
|
64
|
+
|
65
|
+
if exists_result.returncode != 0:
|
66
|
+
logger.error(
|
67
|
+
"Image does not exist in repository. Push the image to the "
|
68
|
+
"repository your self hosted install is using and try again."
|
69
|
+
)
|
70
|
+
exit(1)
|
71
|
+
else:
|
72
|
+
logger.info("Authenticating...")
|
73
|
+
auth = vellum_client.container_images.docker_service_token()
|
74
|
+
|
75
|
+
docker_client.login(
|
76
|
+
username="oauth2accesstoken",
|
77
|
+
password=auth.access_token,
|
78
|
+
registry=auth.repository,
|
79
|
+
)
|
80
|
+
|
81
|
+
for tag in all_tags:
|
82
|
+
vellum_image_name = f"{auth.repository}/{image_name}:{tag}"
|
83
|
+
|
84
|
+
docker_client.api.tag(image, vellum_image_name)
|
85
|
+
|
86
|
+
push_result = docker_client.images.push(repository=vellum_image_name, stream=True)
|
87
|
+
|
88
|
+
# Here were trying to mime the output you would get from a normal docker push, which
|
89
|
+
# the python sdk makes as hard as possible.
|
90
|
+
for raw_line in push_result:
|
91
|
+
try:
|
92
|
+
for sub_line in raw_line.decode("utf-8").split("\r\n"):
|
93
|
+
line = json.loads(sub_line)
|
94
|
+
error_message = line.get("errorDetail", {}).get("message")
|
95
|
+
status = line.get("status")
|
96
|
+
id = line.get("id", "")
|
97
|
+
|
98
|
+
if error_message:
|
99
|
+
logger.error(error_message)
|
100
|
+
exit(1)
|
101
|
+
elif status == "Waiting":
|
102
|
+
continue
|
103
|
+
elif status:
|
104
|
+
logger.info(f"{id}{': ' if id else ''}{status}")
|
105
|
+
else:
|
106
|
+
logger.info(line)
|
107
|
+
except Exception:
|
108
|
+
continue
|
109
|
+
|
110
|
+
inspect_result = subprocess.run(
|
77
111
|
["docker", "inspect", "--format='{{index .RepoDigests 0}}'", image],
|
78
112
|
stdout=subprocess.PIPE,
|
79
113
|
stderr=subprocess.PIPE,
|
80
114
|
)
|
81
115
|
|
82
116
|
sha = ""
|
83
|
-
if
|
84
|
-
match = re.search(r"sha256[^']*",
|
117
|
+
if inspect_result.returncode == 0:
|
118
|
+
match = re.search(r"sha256[^']*", inspect_result.stdout.decode("utf-8"))
|
85
119
|
if match and match.group(0):
|
86
120
|
sha = match.group(0)
|
87
121
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import subprocess
|
2
|
+
from unittest.mock import MagicMock, patch
|
3
|
+
|
4
|
+
from click.testing import CliRunner
|
5
|
+
|
6
|
+
from vellum_cli import main as cli_main
|
7
|
+
|
8
|
+
|
9
|
+
@patch("subprocess.run")
|
10
|
+
@patch("docker.from_env")
|
11
|
+
def test_image_push__self_hosted_happy_path(mock_docker_from_env, mock_run, vellum_client, monkeypatch):
|
12
|
+
# GIVEN a self hosted vellum api URL env var
|
13
|
+
monkeypatch.setenv("VELLUM_API_URL", "mycompany.api.com")
|
14
|
+
|
15
|
+
# Mock Docker client
|
16
|
+
mock_docker_client = MagicMock()
|
17
|
+
mock_docker_from_env.return_value = mock_docker_client
|
18
|
+
|
19
|
+
mock_run.side_effect = [
|
20
|
+
subprocess.CompletedProcess(
|
21
|
+
args="", returncode=0, stdout=b'{"manifests": [{"platform": {"architecture": "amd64"}}]}'
|
22
|
+
),
|
23
|
+
subprocess.CompletedProcess(args="", returncode=0, stdout=b"manifest"),
|
24
|
+
subprocess.CompletedProcess(args="", returncode=0, stdout=b"sha256:hellosha"),
|
25
|
+
]
|
26
|
+
|
27
|
+
# WHEN the user runs the image push command
|
28
|
+
runner = CliRunner()
|
29
|
+
result = runner.invoke(cli_main, ["image", "push", "myrepo.net/myimage:latest"])
|
30
|
+
|
31
|
+
# THEN the command exits successfully
|
32
|
+
assert result.exit_code == 0, result.output
|
33
|
+
|
34
|
+
# AND gives the success message
|
35
|
+
assert "Image successfully pushed" in result.output
|
36
|
+
|
37
|
+
|
38
|
+
@patch("subprocess.run")
|
39
|
+
@patch("docker.from_env")
|
40
|
+
def test_image_push__self_hosted_blocks_repo(mock_docker_from_env, mock_run, vellum_client, monkeypatch):
|
41
|
+
# GIVEN a self hosted vellum api URL env var
|
42
|
+
monkeypatch.setenv("VELLUM_API_URL", "mycompany.api.com")
|
43
|
+
|
44
|
+
# Mock Docker client
|
45
|
+
mock_docker_client = MagicMock()
|
46
|
+
mock_docker_from_env.return_value = mock_docker_client
|
47
|
+
|
48
|
+
# WHEN the user runs the image push command
|
49
|
+
runner = CliRunner()
|
50
|
+
result = runner.invoke(cli_main, ["image", "push", "myimage"])
|
51
|
+
|
52
|
+
# THEN the command exits unsuccessfully
|
53
|
+
assert result.exit_code == 1, result.output
|
54
|
+
|
55
|
+
# AND gives the error message for self hosted installs not including the repo
|
56
|
+
assert "For adding images to your self hosted install you must include" in result.output
|