vellum-ai 0.13.9__py3-none-any.whl → 0.13.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. vellum/client/core/client_wrapper.py +1 -1
  2. vellum/workflows/descriptors/utils.py +1 -1
  3. vellum/workflows/errors/types.py +21 -0
  4. vellum/workflows/nodes/bases/base.py +1 -1
  5. vellum/workflows/nodes/displayable/api_node/node.py +4 -1
  6. vellum/workflows/nodes/displayable/bases/api_node/node.py +4 -1
  7. vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py +18 -2
  8. vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py +4 -0
  9. vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py +4 -0
  10. vellum/workflows/nodes/displayable/bases/search_node.py +4 -0
  11. vellum/workflows/nodes/displayable/bases/tests/test_utils.py +18 -0
  12. vellum/workflows/nodes/displayable/bases/utils.py +8 -1
  13. vellum/workflows/nodes/displayable/code_execution_node/node.py +4 -1
  14. vellum/workflows/nodes/displayable/conditional_node/node.py +4 -0
  15. vellum/workflows/nodes/displayable/final_output_node/node.py +4 -0
  16. vellum/workflows/nodes/displayable/guardrail_node/node.py +4 -1
  17. vellum/workflows/nodes/displayable/inline_prompt_node/node.py +4 -0
  18. vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py +55 -0
  19. vellum/workflows/nodes/displayable/merge_node/node.py +3 -1
  20. vellum/workflows/nodes/displayable/note_node/node.py +4 -0
  21. vellum/workflows/nodes/displayable/prompt_deployment_node/node.py +4 -0
  22. vellum/workflows/nodes/displayable/search_node/node.py +4 -0
  23. vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py +4 -1
  24. {vellum_ai-0.13.9.dist-info → vellum_ai-0.13.11.dist-info}/METADATA +1 -1
  25. {vellum_ai-0.13.9.dist-info → vellum_ai-0.13.11.dist-info}/RECORD +59 -59
  26. vellum_cli/__init__.py +9 -1
  27. vellum_cli/config.py +29 -1
  28. vellum_cli/push.py +24 -3
  29. vellum_cli/tests/conftest.py +3 -0
  30. vellum_cli/tests/test_pull.py +6 -0
  31. vellum_cli/tests/test_push.py +88 -1
  32. vellum_ee/workflows/display/nodes/base_node_display.py +207 -3
  33. vellum_ee/workflows/display/nodes/base_node_vellum_display.py +16 -1
  34. vellum_ee/workflows/display/nodes/get_node_display_class.py +6 -4
  35. vellum_ee/workflows/display/nodes/vellum/__init__.py +0 -2
  36. vellum_ee/workflows/display/nodes/vellum/conditional_node.py +2 -1
  37. vellum_ee/workflows/display/nodes/vellum/error_node.py +9 -3
  38. vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py +44 -0
  39. vellum_ee/workflows/display/nodes/vellum/try_node.py +8 -2
  40. vellum_ee/workflows/display/nodes/vellum/utils.py +0 -69
  41. vellum_ee/workflows/display/tests/test_vellum_workflow_display.py +56 -0
  42. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +4 -3
  43. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py +146 -26
  44. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py +11 -11
  45. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py +7 -7
  46. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py +33 -35
  47. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +4 -4
  48. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +5 -5
  49. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +15 -1
  50. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +1 -1
  51. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +6 -3
  52. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +6 -3
  53. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +3 -3
  54. vellum_ee/workflows/display/utils/vellum.py +74 -4
  55. vellum_ee/workflows/display/workflows/base_workflow_display.py +6 -4
  56. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +26 -14
  57. vellum_ee/workflows/display/nodes/vellum/base_node.py +0 -192
  58. {vellum_ai-0.13.9.dist-info → vellum_ai-0.13.11.dist-info}/LICENSE +0 -0
  59. {vellum_ai-0.13.9.dist-info → vellum_ai-0.13.11.dist-info}/WHEEL +0 -0
  60. {vellum_ai-0.13.9.dist-info → vellum_ai-0.13.11.dist-info}/entry_points.txt +0 -0
@@ -1,39 +1,38 @@
1
1
  vellum_cli/CONTRIBUTING.md,sha256=FtDC7BGxSeMnwCXAUssFsAIElXtmJE-O5Z7BpolcgvI,2935
2
2
  vellum_cli/README.md,sha256=2NudRoLzWxNKqnuVy1JuQ7DerIaxWGYkrH8kMd-asIE,90
3
- vellum_cli/__init__.py,sha256=L8D7nVwC63WdAe6HTy7J_S3wCvjJBHDWaBkCrw76dtU,9573
3
+ vellum_cli/__init__.py,sha256=tRcOi6oLzT3EXORlHwGzo0Sn1-npf8Jf7mMi90NDUh0,10035
4
4
  vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
5
- vellum_cli/config.py,sha256=998IZbvkrw2avjbvs8bw6NrbEgGz5UBKRbvKAcastJg,5493
5
+ vellum_cli/config.py,sha256=LVRB-SEJcpQYfg2QGcjKHmRSAijdSFADbS90gDY4AI8,6829
6
6
  vellum_cli/image_push.py,sha256=SJwhwWJsLjwGNezNVd_oCVpFMfPsAB3dfLWmriZZUtw,4419
7
7
  vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
8
8
  vellum_cli/ping.py,sha256=lWyJw6sziXjyTopTYRdFF5hV-sYPVDdX0yVbG5fzcY4,585
9
9
  vellum_cli/pull.py,sha256=zf0y22XptUYI_hMP_4Q1CEo9s2wALsTJcCXNd-_ibd8,7551
10
- vellum_cli/push.py,sha256=KHakWiUwdeZff8QZSDF0l8xmCgMRo9ntan8kaLD02Lc,7677
10
+ vellum_cli/push.py,sha256=0Q3Of25KzqDq0KTgkXQ22nAhSH4_JI424hKwKkj3RWs,8627
11
11
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- vellum_cli/tests/conftest.py,sha256=Jv-QUjXoCDhsvVvXEjOenNqRArO_xXhtNuCYt4wiOyE,1421
12
+ vellum_cli/tests/conftest.py,sha256=AFYZryKA2qnUuCPBxBKmHLFoPiE0WhBFFej9tNwSHdc,1526
13
13
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
14
14
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
15
15
  vellum_cli/tests/test_ping.py,sha256=QtbhYKMYn1DFnDyBij2mkQO32j9KOpZ5Pf0yek7k_Ao,1284
16
- vellum_cli/tests/test_pull.py,sha256=6gbASF6ASy5YcdWjOCt6b5K0u2VWsFegdrTWu6sEVKs,19613
17
- vellum_cli/tests/test_push.py,sha256=PVxKwbWHjb1QwQ0n4tTqh2Tj6yg2cOGupOSXaXl08DI,11044
16
+ vellum_cli/tests/test_pull.py,sha256=KRvQ_fwsFH6tBU49O-KOOAzcHxdB-DPbUkdIdahjuTs,19841
17
+ vellum_cli/tests/test_push.py,sha256=3to7bOOVoWB888ee7TIAVl2VgXCsJhP_aPcrXwF9c_c,14023
18
18
  vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  vellum_ee/workflows/display/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  vellum_ee/workflows/display/base.py,sha256=3ZFUYRNKL24fBqXhKpa_Dq2W1a-a86J20dmJYA3H2eY,1755
23
23
  vellum_ee/workflows/display/nodes/__init__.py,sha256=5XOcZJXYUgaLS55QgRJzyQ_W1tpeprjnYAeYVezqoGw,160
24
- vellum_ee/workflows/display/nodes/base_node_display.py,sha256=Ge3f_MNCxawRNR2EhBvygXTIWxKOpS40Dkgrp1S1WPQ,6991
25
- vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=BxA-YVUJvB36NM-Q5DNCwckeqymwLKMp9DVCaTyrPbs,2253
26
- vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=vyKeJAevAXvEAEtWeTEdBZXD3eJQYW_DEXLKVZ5KmYc,1325
24
+ vellum_ee/workflows/display/nodes/base_node_display.py,sha256=AnACr-QfL4Hwc3JEN9tUDmr0c8DE9uAjP8w7NyXAfj4,15413
25
+ vellum_ee/workflows/display/nodes/base_node_vellum_display.py,sha256=pLO0dORfRu--Ne9NgoyFT_CNjfpr5fGCsgbsMkUF5GM,2845
26
+ vellum_ee/workflows/display/nodes/get_node_display_class.py,sha256=VpGL-tnMM9wEOkuHNxX74RHAFhz5jcVXvmBkKciOBg0,1367
27
27
  vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
29
29
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
30
30
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
31
- vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=_raKY9eKi_OvIFn6nGvf9xKSboKtYLHCWaWCwDQFbOc,1567
31
+ vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nmPLj8vkbVCS46XQqmHq8Xj8Mr36wCK_vWf26A9KIkw,1505
32
32
  vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=hoV-cUtS6H9kmRQXHd2py95GRWI_dAnnaPwvlNBkDOQ,8571
33
- vellum_ee/workflows/display/nodes/vellum/base_node.py,sha256=mZSeZpolPZg1OEe3xsLbAiYT9aTSfdw0LhiUsHNBRXY,8029
34
33
  vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=z00Z3L0d4PsUQo4S8FRDTtOFLtjdi17TJbatNVF4nM8,4288
35
- vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=XynMt1dt1qAlDFYYNYNDAfItYBUEGWYjQl2oEgcMEW0,11052
36
- vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=Tyx74dUmj_ef0slptoUXHtkjLbNd3f4hXeoEozFaFcw,2023
34
+ vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=ybLIa4uclqVIy3VAQvI1ivg2tnK5Ug_1R5a69DFqL7E,11104
35
+ vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=I1Jkp2htRINJATtv1e-zs9BrReFX842djpiVgBPHDYg,2186
37
36
  vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=p-PvlnxpBQ7IKskZi2A19jKAtKnSxJ8LPbGMA83VkFk,2805
38
37
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=aYZSJTxknU4LMiQdWk9LcK6CkhdozeDEMiRxfAyUNEc,2202
39
38
  vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=h8K183cZsU2b86WYQlqFtwMkwIHydnNr4ZaaQcWnFWo,7316
@@ -46,29 +45,30 @@ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=TxcAGZDl_hvJ7Y1hU
46
45
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=lfevlHpGEX14dEDym6qmnkw3nvzQPTB1_D2ch12B_Rk,2701
47
46
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=JVIMPR3WpveOCWZubHKZkE04mavnTdb_9QY_r3XliRg,3424
48
47
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=ulrpoYUW-5kIxfG4Lf5F2p0k_EoYKhmahEbF3P_eruM,1648
49
49
  vellum_ee/workflows/display/nodes/vellum/tests/test_try_node.py,sha256=mtzB8LJlFCHVFM4H5AanLp29gQfaVmnN4A4iaRGJHoI,2427
50
50
  vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=3uT7Gbc0f_mQ3u8uZuCWd0mJ4GtWbz2gbUMySYaVlNE,3774
51
- vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=Ywa8NMNvE4TlEZ_gQA6jhrqykH8-wWgKFa-uEokWhF8,5550
52
- vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=TFChHlSN8B0MOdgFTDmQPKkqwGGYxeF5lNmFp-JXzqo,7882
51
+ vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=EoU1J7HfcszAZr7ROy_xsNhaDBRiI95-wTK-OzgBwvg,5861
52
+ vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=aBmTg9pJloG1BxhYcqzxs5JOA-IixncLVr1XiDzANnA,4313
53
53
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=4jXe7Wyspw6CxghVqKAOu-_QunKFvY4U6--zOiuXvV0,3069
54
+ vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=h4bE187MyM0eT_elFnOxwsCeMHeuzSK0orjgAy8kV1k,4952
55
55
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=RatRmgd1O7OX1r2QfMLPs-WvGQpPLfXIjWNGE4s0yLE,2186
58
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=MtKRKcPJsUJ3le7PLz9H6iH3vmRBZDRy6c-4LUF76zE,1987
59
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=apGjJgH2KrUVA5LuD9b2etjVFFG1cqYTmNATfdkngWA,10193
60
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=nouAROR-L9_u6BfPbKUl20QjbbRpwPeElGS2wIWozLc,6239
61
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=wZekdhIZBwbBoFNAdC9bBLwUxVKk3EnFdNmMwYIdKGA,37308
62
- vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=os6wCZjcOyig8EJu-pTAFWXa0odMxTaR0mrbL0SS_4Y,4480
57
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=EenmEdBtHUFQ0OS-kE7Vboax3JnDdj-K4Qixt5oR0Po,2253
58
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_adornments_serialization.py,sha256=pYBubuTzwNczAGFTYhaMCwvMLAcoJfCLkn5PMPbrlMI,7187
59
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_attributes_serialization.py,sha256=9CV44pY33cL_RF9cKmNVwn5hDGEZbPIETavOrvIL3oY,10229
60
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_outputs_serialization.py,sha256=-12ZkZb3f5gyoNASV2yeQtMo5HmNsVEo8nXwL6IC-I8,6261
61
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_ports_serialization.py,sha256=6th6kCwzql6lddjkTQx4Jbvvs4ChqtJwctW-B4QuBhI,37352
62
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=EbVgg_3_ipTt3MOop4RARX0fmNjwqZtkhIXzx9nGw7Y,4487
63
63
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=bXZWxOKAVjZlbP3iLHPHGA4aPs0EguKlQqmYPNGv3cU,16391
64
64
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=uvABhpstyxNNOz50-XJMAr3SKp8gluPp1mUtJjvRL0c,29410
65
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=Xn8t-SpvQocKdxNofDeDETlFnkCbBxdLGiUG8m6fM6U,48399
66
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=QVlkczxzaKuOhwbRvVP70otPDNnJcSGDfN79j92lFyk,5534
67
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=_gv7vPxBWSOSRKMlXYv8GKj9h1JAXjXIVWkCE_XhkYE,5746
65
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=n3F_Eyru0DYOszBH4jplz7Mzt2FfBNxGlCkTFqvrX-M,48399
66
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=8LhQgW0uzVOhzz0AwdM-EYugVO-0mGWglxWo_lON4D8,6079
67
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=yWDykoHUjuiVYdevcJxWmYDDmbIszpHKYBu19vqR-I8,5746
68
68
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=mEkvKUrt8U6e9bN65QRG7Zd3KdCdoMvHm96LjGwy96k,7427
69
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=-e6svaclv068n66oLnha-CFzW4ihNnhyQuqAfUyI59k,21395
70
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=luj_PdJd8e13C4JO7dkbTlNPko6N7cPFM1iAljdElW8,16043
71
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=mGk21Wp9Gyr-rRwYqhLEyenJF-ArdXjAdj_qYqcldrE,8422
69
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=CxbnZ3tB8gir9xopixjvT0hNYyjMHvT_m8BzY5kl8Dg,21497
70
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=5xXLoUNgGkZvRFPJrdPiD0fErgwdPk-ikI3rP9sCAA4,16145
71
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=ON3TQiIFDiCvasQiNEyuAZDwpTYGOtitdLDLj2kejL8,8422
72
72
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=W_d-hsjSqbqR5BA3aF3KFoEyfLV6x_yhNKmLA1ai2QY,8622
73
73
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=azUVSdXWoYyAjKuM8m9ikOoJPb5JlEvJtR5nSRR0eaA,12989
74
74
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=yq98DHxetpbqYnGVTDmcokU0A4XAD7E-NcKhrEMP66M,11295
@@ -78,12 +78,12 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_ser
78
78
  vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=wQ97k-y9rZwKYlZSA6Z9XGUnGRaJ5BvCFu5QnhuEp4A,7404
79
79
  vellum_ee/workflows/display/types.py,sha256=jWTpfQv3baEWjbP12duc3MBz3TK03Ja1UI5458PVQVY,4211
80
80
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- vellum_ee/workflows/display/utils/vellum.py,sha256=N5VSDYdtHUxvTeSj4zA8aMiAAKn4bAVgpKUDV_obNQ8,3632
81
+ vellum_ee/workflows/display/utils/vellum.py,sha256=0H-c3OaQYZ_sGdI4YmyxEcZ77oWn_Rfts-MLs_QWqls,7289
82
82
  vellum_ee/workflows/display/vellum.py,sha256=8xXRI8b8Tt661H-iZreTQTvLNEKUr4lf-XaKhE7_yUY,8147
83
83
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
84
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=VNYc9n_TvsYxtJ__BaTI9ZGEzTg8JClrZ-nVnFlgiBU,14051
84
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=x4C621UTH_SZLJYmVBiC1q-D-wadJlTiSGlKAI6CUbA,14082
85
85
  vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
86
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=ZGPhfb-4_7bLEYaKnESkZuwWrzh9lmT2wMq2jPQ-ciQ,16518
86
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=wij6U6-20QSDlfLMCeHjmpkWWuSA8fWYWJV17dw6L98,17187
87
87
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=X_DdNK7MfyOjKWekk6YQpOSCT6klKcdjT6nVJcBH1sM,1481
89
89
  vellum_ee/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -112,7 +112,7 @@ vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
112
112
  vellum/client/__init__.py,sha256=8nZt88C9SVwWanjLbIQMU3rzb32h5UZfFMBx3VPHB50,111887
113
113
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
114
114
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
115
- vellum/client/core/client_wrapper.py,sha256=dxLror26l68ej4_dKgIfKbRZE9rDH7pYhicRFBkhKss,1868
115
+ vellum/client/core/client_wrapper.py,sha256=WdGHbGL6B-WAReI6C1XsH60HY57mtWSg-jZ-2xz4eiQ,1869
116
116
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
117
117
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
118
118
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -1252,7 +1252,7 @@ vellum/workflows/context.py,sha256=R8qdsFbD_0p7B6PWnyvSrZ_aOgMtGw-_uk0P0UAmwLA,1
1252
1252
  vellum/workflows/descriptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1253
1253
  vellum/workflows/descriptors/base.py,sha256=gSib3vJpcI_UC8y8jhdp-hOK3_TGTF-SuwdhxF6x5iQ,14332
1254
1254
  vellum/workflows/descriptors/tests/test_utils.py,sha256=63w1P6PELNhWzpg1BqL8y2XQZ8XRt0RUkHgLcsXyOQE,4592
1255
- vellum/workflows/descriptors/utils.py,sha256=lO_dbr5g3PXpHPtVBkdguAK4-1qayZ7RXjl3BgAhrMM,3795
1255
+ vellum/workflows/descriptors/utils.py,sha256=nE51MR0KMy3SVHPBg0wjJ3CSJBTLM3tZnVUC_enQEIw,3826
1256
1256
  vellum/workflows/edges/__init__.py,sha256=wSkmAnz9xyi4vZwtDbKxwlplt2skD7n3NsxkvR_pUus,50
1257
1257
  vellum/workflows/edges/edge.py,sha256=N0SnY3gKVuxImPAdCbPMPlHJIXbkQ3fwq_LbJRvVMFc,677
1258
1258
  vellum/workflows/emitters/__init__.py,sha256=YyOgaoLtVW8eFNEWODzCYb0HzL0PoSeNRf4diJ1Y0dk,80
@@ -1260,7 +1260,7 @@ vellum/workflows/emitters/base.py,sha256=D5SADKIvnbgKwIBgYm77jaqvpo1o0rz4MmuX_mu
1260
1260
  vellum/workflows/environment/__init__.py,sha256=wGHslgSEZ7Octe4C-hNtl84EFelNimgmWQoi7px4-uw,71
1261
1261
  vellum/workflows/environment/environment.py,sha256=IwcVSwA51jW1JTN_MAN22UbeAtZhiAVa_JRV4rmpAAs,219
1262
1262
  vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
1263
- vellum/workflows/errors/types.py,sha256=mvywC2sXtpRrkDRfTx-O6aXAp0hOFyx27a1tqguKt4g,2493
1263
+ vellum/workflows/errors/types.py,sha256=-Ls41oM4HN28b78Ou13FoZnaWRuaxBgTarKgSoBlCKc,3413
1264
1264
  vellum/workflows/events/__init__.py,sha256=6pxxceJo2dcaRkWtkDAYlUQZ-PHBQSZytIoyuUK48Qw,759
1265
1265
  vellum/workflows/events/node.py,sha256=uHT6If0esgZ3nLjrjmUPTKf3qbjGhoV_x5YKpjDBDcU,5280
1266
1266
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1306,7 +1306,7 @@ vellum/workflows/inputs/base.py,sha256=1kMgr0WqCYdWUqgFvgSoAMw2067FAlgwhGXLgbIOr
1306
1306
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1307
1307
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1308
1308
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
1309
- vellum/workflows/nodes/bases/base.py,sha256=P8j70SnO5-xABMbAPCHNKLook5Ip32FpzqfYEUZG8E8,14452
1309
+ vellum/workflows/nodes/bases/base.py,sha256=iYn8XmKZKj43vCx_xs5AbnnLgBydmjlElwjb-0xe63I,14459
1310
1310
  vellum/workflows/nodes/bases/base_adornment_node.py,sha256=eFTgsPCYb3eyGS0-kw7C6crFnwFx437R5wh9-8bWYts,2905
1311
1311
  vellum/workflows/nodes/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1312
1312
  vellum/workflows/nodes/bases/tests/test_base_node.py,sha256=51CueFVty9XYASC0rKr1cXWejho5WElmhfhp6cCONy0,3811
@@ -1334,50 +1334,50 @@ vellum/workflows/nodes/core/try_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW
1334
1334
  vellum/workflows/nodes/core/try_node/tests/test_node.py,sha256=Wc2kLl-MkffsBxl3IiFaqLd16e2Iosxhk7qBnojPvQg,4092
1335
1335
  vellum/workflows/nodes/displayable/__init__.py,sha256=6F_4DlSwvHuilWnIalp8iDjjDXl0Nmz4QzJV2PYe5RI,1023
1336
1336
  vellum/workflows/nodes/displayable/api_node/__init__.py,sha256=MoxdQSnidIj1Nf_d-hTxlOxcZXaZnsWFDbE-PkTK24o,56
1337
- vellum/workflows/nodes/displayable/api_node/node.py,sha256=ocXjg0Sp52V6DllTDZXUgOp9qBw6l_KbtWcaxowsDM4,2070
1337
+ vellum/workflows/nodes/displayable/api_node/node.py,sha256=KHuDTzOeXO3lCQm3lQqusAEhj84dhvszVpO1Xsx4qPM,2175
1338
1338
  vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
1339
1339
  vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
1340
- vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=ywPwCxDesgnE86Wjyf2ZyG2Dr2O7xW8D4tPHZB5Se_s,2477
1340
+ vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=kKiwrz8XGJkvFjipBthxs9h1e2ndWPgmpEzZiYs0I5I,2579
1341
1341
  vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
1342
- vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=w9HfUhVHtF3Y95duj9bsAj5XHmObN6S6vvfI67u7RyY,2156
1342
+ vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=r_gOmeGFQQfzhAc1_bmzcwUvH-Xllc93gE7miTV4rQE,2824
1343
1343
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
1344
1344
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/constants.py,sha256=fnjiRWLoRlC4Puo5oQcpZD5Hd-EesxsAo9l5tGAkpZQ,270
1345
- vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=TKoxReiGGQfafwrZyy7FLvVGYPlk_NT-bTRX04ozRB8,6311
1346
- vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=rm23ZebJ4nj3wakfLI8bcuHZAydXCk1d7IPdXhiQHys,5039
1347
- vellum/workflows/nodes/displayable/bases/search_node.py,sha256=m37Ukjb75U6e5ehxV9YKz8r0J1e3p_Tv-f8pTvaH4RI,5245
1345
+ vellum/workflows/nodes/displayable/bases/inline_prompt_node/node.py,sha256=j6AKAVIl_uU77a6JMGnMTyFnnK-jsfPVthxrgbltQRE,6453
1346
+ vellum/workflows/nodes/displayable/bases/prompt_deployment_node.py,sha256=FAY6cR3rlIWsufprA6WXefOaU2J1LK0HFfQkBxCQ-yI,5181
1347
+ vellum/workflows/nodes/displayable/bases/search_node.py,sha256=3UtbqY3QO4kzfJHbmUNZGnEEfJmaoiF892u8H6TGjp8,5381
1348
1348
  vellum/workflows/nodes/displayable/bases/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1349
- vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=uQM9RTVmC-fMQ4hd4481QZbviokshwYSxk1ee9leh3A,2406
1349
+ vellum/workflows/nodes/displayable/bases/tests/test_utils.py,sha256=eqdqbKNRWVMDPevgwLg1i6YK0g4L4bCy-7xCBN5yYZI,3156
1350
1350
  vellum/workflows/nodes/displayable/bases/types.py,sha256=C37B2Qh2YP7s7pUjd-EYKc2Zl1TbnCgI_mENuUSb8bo,1706
1351
- vellum/workflows/nodes/displayable/bases/utils.py,sha256=hlbIRLAAeqRhzZPLK7WDvBzUT2b6tupaXYOF54iYvS0,4973
1351
+ vellum/workflows/nodes/displayable/bases/utils.py,sha256=ckMUenSsNkiYmSw6FmjSMHYaCk8Y8_sUjL6lkFFEqts,5412
1352
1352
  vellum/workflows/nodes/displayable/code_execution_node/__init__.py,sha256=0FLWMMktpzSnmBMizQglBpcPrP80fzVsoJwJgf822Cg,76
1353
- vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=JgyTgZRSb-gSXL4ccHn4VkPcPZFOkVK5ohPazPqSWFw,8652
1353
+ vellum/workflows/nodes/displayable/code_execution_node/node.py,sha256=Hzc0h9sogX8DfFbJqdDLxGU2CMY1WvGosZ7taJC4sPE,8754
1354
1354
  vellum/workflows/nodes/displayable/code_execution_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1355
1355
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1356
1356
  vellum/workflows/nodes/displayable/code_execution_node/tests/fixtures/main.py,sha256=5QsbmkzSlSbcbWTG_JmIqcP-JNJzOPTKxGzdHos19W4,79
1357
1357
  vellum/workflows/nodes/displayable/code_execution_node/tests/test_code_execution_node.py,sha256=s93M_EnU-4n60iSKv3FCf0kppwzFH5FNi9o9E58fQ3I,7510
1358
1358
  vellum/workflows/nodes/displayable/code_execution_node/utils.py,sha256=LfI3kj2zQz6UGMld_uA9z2LjZobqRcgxQO4jdUWkg7o,376
1359
1359
  vellum/workflows/nodes/displayable/conditional_node/__init__.py,sha256=AS_EIqFdU1F9t8aLmbZU-rLh9ry6LCJ0uj0D8F0L5Uw,72
1360
- vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=REFZdEVetXGyOK1RbIN1T6yRblrP0hfyZUls2KfjTKg,1016
1360
+ vellum/workflows/nodes/displayable/conditional_node/node.py,sha256=Qjfl33gZ3JEgxBA1EgzSUebboGvsARthIxxcQyvx5Gg,1152
1361
1361
  vellum/workflows/nodes/displayable/final_output_node/__init__.py,sha256=G7VXM4OWpubvSJtVkGmMNeqgb9GkM7qZT838eL18XU4,72
1362
- vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=iH3ZPOstPku_rg4h97Xz5FMaHWVRCjypaamAFzoJzJ0,1854
1362
+ vellum/workflows/nodes/displayable/final_output_node/node.py,sha256=TFbDZLGEtmg2cOQeJ56pUQdAkuHRa_qjBRIOGZU7Fy4,1990
1363
1363
  vellum/workflows/nodes/displayable/guardrail_node/__init__.py,sha256=Ab5eXmOoBhyV4dMWdzh32HLUmnPIBEK_zFCT38C4Fng,68
1364
- vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=7Ep7Ff7FtFry3Jwxhg_npF_-jT2P6TGKp5MRNnCZ8Tc,3923
1364
+ vellum/workflows/nodes/displayable/guardrail_node/node.py,sha256=h5nIBzQxbXTrdTq1wjDcekk1RV4-rKUNCshqdBAiJJY,4025
1365
1365
  vellum/workflows/nodes/displayable/inline_prompt_node/__init__.py,sha256=gSUOoEZLlrx35-tQhSAd3An8WDwBqyiQh-sIebLU9wU,74
1366
- vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=OPjdEK5mL3D2cwL68GiBFlRJ2b0tgatxsfeUEPeQDxI,2146
1366
+ vellum/workflows/nodes/displayable/inline_prompt_node/node.py,sha256=UWOxIa3kizhDa5joAmEDlh0P66EaqatqxzLLbvbUybw,2294
1367
1367
  vellum/workflows/nodes/displayable/inline_prompt_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1368
- vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=57JYbHvfZAjEGfa4CvYSpAt5yLDj0bPIr1_RoG8n9oI,4725
1368
+ vellum/workflows/nodes/displayable/inline_prompt_node/tests/test_node.py,sha256=BEKdts18soB6gaW_d3VbhDy7IFzFmC76j5lRYiTOj44,6643
1369
1369
  vellum/workflows/nodes/displayable/merge_node/__init__.py,sha256=J8IC08dSH7P76wKlNuxe1sn7toNGtSQdFirUbtPDEs0,60
1370
- vellum/workflows/nodes/displayable/merge_node/node.py,sha256=ZyPvcTgfPOneOm5Dc2kUOoPkwNJqwRPZSj232akXynA,324
1370
+ vellum/workflows/nodes/displayable/merge_node/node.py,sha256=nZtGGVAvY4fvGg8vwV6sTQ8_QLRnigeXt0vf2FL272A,450
1371
1371
  vellum/workflows/nodes/displayable/note_node/__init__.py,sha256=KWA3P4fyYJ-fOTky8qNGlcOotQ-HeHJ9AjZt6mRQmCE,58
1372
- vellum/workflows/nodes/displayable/note_node/node.py,sha256=8rwP7RS1OOyQJ-ZuZBXTCtT2ZW8J6eGD59iKmq_pB24,258
1372
+ vellum/workflows/nodes/displayable/note_node/node.py,sha256=sIN1VBQ7zeT3GhN0kupXbFfdpvgedWV79k4woJNp5IQ,394
1373
1373
  vellum/workflows/nodes/displayable/prompt_deployment_node/__init__.py,sha256=krX1Hds-TSVYZsx0wJFX4wsAKkEFYOX1ifwRGiIM-EA,82
1374
- vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=cpOrqQQanZ0xO4B4B3mgyBWKcnkT5b0DFxOSeS8otrI,2528
1374
+ vellum/workflows/nodes/displayable/prompt_deployment_node/node.py,sha256=ruOgvpg_9KV_HkovPQeu6TKpur9DT_J4CYQo50tULCY,2680
1375
1375
  vellum/workflows/nodes/displayable/search_node/__init__.py,sha256=hpBpvbrDYf43DElRZFLzieSn8weXiwNiiNOJurERQbs,62
1376
- vellum/workflows/nodes/displayable/search_node/node.py,sha256=yhFWulbNmSQoDAwtTSGD4AtKmBbcykezRGRG16xga_0,1311
1376
+ vellum/workflows/nodes/displayable/search_node/node.py,sha256=_VHHuTNN4icZBgc7O5U9SVKrv1zgKipU72fOtxTyrQU,1453
1377
1377
  vellum/workflows/nodes/displayable/search_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1378
1378
  vellum/workflows/nodes/displayable/search_node/tests/test_node.py,sha256=2-QCV7Vk_-YMls33p0GOUtCv3f2uPNZCjkB2CRjek7o,6562
1379
1379
  vellum/workflows/nodes/displayable/subworkflow_deployment_node/__init__.py,sha256=9yYM6001YZeqI1VOk1QuEM_yrffk_EdsO7qaPzINKds,92
1380
- vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=FgS1ZMnIBliqEMNKX2ChE80bw4IVHEQ6IGiTDvF0RZw,7226
1380
+ vellum/workflows/nodes/displayable/subworkflow_deployment_node/node.py,sha256=rDBB94bs9k-I9zmf3C0L_5wO3wW4WBuRXi5ry0rTGRY,7328
1381
1381
  vellum/workflows/nodes/displayable/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1382
1382
  vellum/workflows/nodes/displayable/tests/test_inline_text_prompt_node.py,sha256=CI7iMyyIlnds1rkVSjICOFg2UY0yV51NTKtKpfeEME4,4677
1383
1383
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
@@ -1441,8 +1441,8 @@ vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528
1441
1441
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1442
1442
  vellum/workflows/workflows/base.py,sha256=k0kUWWko4fHyCqLSU_1cBK_pXZpl9MXekWiG-bdOAo0,18353
1443
1443
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1444
- vellum_ai-0.13.9.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1445
- vellum_ai-0.13.9.dist-info/METADATA,sha256=pIFtYGqbPEQ93I_doRy1gCDYIObzB2saS0Wd_2UNfwY,5334
1446
- vellum_ai-0.13.9.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1447
- vellum_ai-0.13.9.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1448
- vellum_ai-0.13.9.dist-info/RECORD,,
1444
+ vellum_ai-0.13.11.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1445
+ vellum_ai-0.13.11.dist-info/METADATA,sha256=NHPCibqYzo79FZeV0pFNsUB0dbOubh76GZRnzEJAc74,5335
1446
+ vellum_ai-0.13.11.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1447
+ vellum_ai-0.13.11.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1448
+ vellum_ai-0.13.11.dist-info/RECORD,,
vellum_cli/__init__.py CHANGED
@@ -37,13 +37,15 @@ class PushGroup(ClickAliasedGroup):
37
37
 
38
38
  @main.group(invoke_without_command=True, cls=PushGroup)
39
39
  @click.pass_context
40
+ @click.option("--workspace", type=str, help="The specific Workspace config to use when pushing")
40
41
  def push(
41
42
  ctx: click.Context,
43
+ workspace: Optional[str],
42
44
  ) -> None:
43
45
  """Push Resources to Vellum"""
44
46
 
45
47
  if ctx.invoked_subcommand is None:
46
- push_command()
48
+ push_command(workspace=workspace)
47
49
 
48
50
 
49
51
  @main.group()
@@ -69,6 +71,7 @@ def workflows():
69
71
  is_flag=True,
70
72
  help="Raises an error if we detect an unexpected discrepancy in the generated artifact.",
71
73
  )
74
+ @click.option("--workspace", type=str, help="The specific Workspace config to use when pushing")
72
75
  def workflows_push(
73
76
  module: Optional[str],
74
77
  deploy: Optional[bool],
@@ -78,6 +81,7 @@ def workflows_push(
78
81
  release_tag: Optional[List[str]],
79
82
  dry_run: Optional[bool],
80
83
  strict: Optional[bool],
84
+ workspace: Optional[str],
81
85
  ) -> None:
82
86
  """
83
87
  Push Workflows to Vellum. If a module is provided, only the Workflow for that module will be pushed.
@@ -93,6 +97,7 @@ def workflows_push(
93
97
  release_tags=release_tag,
94
98
  dry_run=dry_run,
95
99
  strict=strict,
100
+ workspace=workspace,
96
101
  )
97
102
 
98
103
 
@@ -113,6 +118,7 @@ def workflows_push(
113
118
  is_flag=True,
114
119
  help="Raises an error if we detect an unexpected discrepancy in the generated artifact.",
115
120
  )
121
+ @click.option("--workspace", type=str, help="The specific Workspace config to use when pushing")
116
122
  def push_module(
117
123
  ctx: click.Context,
118
124
  deploy: Optional[bool],
@@ -122,6 +128,7 @@ def push_module(
122
128
  release_tag: Optional[List[str]],
123
129
  dry_run: Optional[bool],
124
130
  strict: Optional[bool],
131
+ workspace: Optional[str],
125
132
  ) -> None:
126
133
  """Push a specific module to Vellum"""
127
134
 
@@ -135,6 +142,7 @@ def push_module(
135
142
  release_tags=release_tag,
136
143
  dry_run=dry_run,
137
144
  strict=strict,
145
+ workspace=workspace,
138
146
  )
139
147
 
140
148
 
vellum_cli/config.py CHANGED
@@ -13,6 +13,17 @@ LOCKFILE_PATH = "vellum.lock.json"
13
13
  PYPROJECT_TOML_PATH = "pyproject.toml"
14
14
 
15
15
 
16
+ class WorkspaceConfig(UniversalBaseModel):
17
+ name: str
18
+ api_key: str
19
+
20
+ def merge(self, other: "WorkspaceConfig") -> "WorkspaceConfig":
21
+ return WorkspaceConfig(name=self.name or other.name, api_key=self.api_key or other.api_key)
22
+
23
+
24
+ DEFAULT_WORKSPACE_CONFIG = WorkspaceConfig(name="default", api_key="VELLUM_API_KEY")
25
+
26
+
16
27
  class WorkflowDeploymentConfig(UniversalBaseModel):
17
28
  id: Optional[UUID] = None
18
29
  label: Optional[str] = None
@@ -37,6 +48,7 @@ class WorkflowConfig(UniversalBaseModel):
37
48
  deployments: List[WorkflowDeploymentConfig] = field(default_factory=list)
38
49
  container_image_name: Optional[str] = None
39
50
  container_image_tag: Optional[str] = None
51
+ workspace: str = DEFAULT_WORKSPACE_CONFIG.name
40
52
 
41
53
  def merge(self, other: "WorkflowConfig") -> "WorkflowConfig":
42
54
  self_deployment_by_id = {
@@ -72,12 +84,14 @@ class WorkflowConfig(UniversalBaseModel):
72
84
  deployments=merged_deployments,
73
85
  container_image_tag=self.container_image_tag or other.container_image_tag,
74
86
  container_image_name=self.container_image_name or other.container_image_name,
87
+ workspace=self.workspace or other.workspace,
75
88
  )
76
89
 
77
90
 
78
91
  class VellumCliConfig(UniversalBaseModel):
79
92
  version: Literal["1.0"] = "1.0"
80
93
  workflows: List[WorkflowConfig] = field(default_factory=list)
94
+ workspaces: List[WorkspaceConfig] = field(default_factory=list)
81
95
 
82
96
  def save(self) -> None:
83
97
  lockfile_path = os.path.join(os.getcwd(), LOCKFILE_PATH)
@@ -102,7 +116,21 @@ class VellumCliConfig(UniversalBaseModel):
102
116
  elif other_workflow:
103
117
  merged_workflows.append(other_workflow)
104
118
 
105
- return VellumCliConfig(workflows=merged_workflows, version=self.version)
119
+ self_workspace_by_name = {workspace.name: workspace for workspace in self.workspaces}
120
+ other_workspace_by_name = {workspace.name: workspace for workspace in other.workspaces}
121
+ all_names = sorted(set(self_workspace_by_name.keys()).union(set(other_workspace_by_name.keys())))
122
+ merged_workspaces = []
123
+ for name in all_names:
124
+ self_workspace = self_workspace_by_name.get(name)
125
+ other_workspace = other_workspace_by_name.get(name)
126
+ if self_workspace and other_workspace:
127
+ merged_workspaces.append(self_workspace.merge(other_workspace))
128
+ elif self_workspace:
129
+ merged_workspaces.append(self_workspace)
130
+ elif other_workspace:
131
+ merged_workspaces.append(other_workspace)
132
+
133
+ return VellumCliConfig(workflows=merged_workflows, workspaces=merged_workspaces, version=self.version)
106
134
 
107
135
 
108
136
  def load_vellum_cli_config(root_dir: Optional[str] = None) -> VellumCliConfig:
vellum_cli/push.py CHANGED
@@ -15,7 +15,7 @@ from vellum.types import WorkflowPushDeploymentConfigRequest
15
15
  from vellum.workflows.utils.names import snake_to_title_case
16
16
  from vellum.workflows.vellum_client import create_vellum_client
17
17
  from vellum.workflows.workflows.base import BaseWorkflow
18
- from vellum_cli.config import WorkflowDeploymentConfig, load_vellum_cli_config
18
+ from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
19
19
  from vellum_cli.logger import load_cli_logger
20
20
  from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
21
21
  from vellum_ee.workflows.display.workflows.vellum_workflow_display import VellumWorkflowDisplay
@@ -30,8 +30,9 @@ def push_command(
30
30
  release_tags: Optional[List[str]] = None,
31
31
  dry_run: Optional[bool] = None,
32
32
  strict: Optional[bool] = None,
33
+ workspace: Optional[str] = None,
33
34
  ) -> None:
34
- load_dotenv()
35
+ load_dotenv(dotenv_path=os.path.join(os.getcwd(), ".env"))
35
36
  logger = load_cli_logger()
36
37
  config = load_vellum_cli_config()
37
38
 
@@ -46,7 +47,27 @@ def push_command(
46
47
  raise ValueError(f"No workflow config for '{module}' found in project to push.")
47
48
 
48
49
  logger.info(f"Loading workflow from {workflow_config.module}")
49
- client = create_vellum_client()
50
+ resolved_workspace = workspace or workflow_config.workspace or DEFAULT_WORKSPACE_CONFIG.name
51
+ workspace_config = (
52
+ next((w for w in config.workspaces if w.name == resolved_workspace), DEFAULT_WORKSPACE_CONFIG)
53
+ if workspace
54
+ else DEFAULT_WORKSPACE_CONFIG
55
+ )
56
+ api_key = os.getenv(workspace_config.api_key)
57
+ if not api_key:
58
+ raise ValueError(f"No API key value found in environment for workspace '{workspace_config.name}'.")
59
+
60
+ if workspace_config.name != workflow_config.workspace:
61
+ # We are pushing to a new workspace, so we need a new workflow config
62
+ workflow_config = WorkflowConfig(
63
+ module=workflow_config.module,
64
+ workspace=workspace_config.name,
65
+ )
66
+ config.workflows.append(workflow_config)
67
+
68
+ client = create_vellum_client(
69
+ api_key=api_key,
70
+ )
50
71
  sys.path.insert(0, os.getcwd())
51
72
 
52
73
  # Remove this once we could serialize using the artifact in Vembda
@@ -46,6 +46,9 @@ def mock_module(request) -> Generator[MockModuleResult, None, None]:
46
46
  }
47
47
  )
48
48
 
49
+ with open(os.path.join(temp_dir, ".env"), "w") as f:
50
+ f.write("VELLUM_API_KEY=abcdef123456")
51
+
49
52
  yield MockModuleResult(
50
53
  temp_dir=temp_dir,
51
54
  module=module,
@@ -124,6 +124,7 @@ def test_pull__sandbox_id_with_no_config(vellum_client):
124
124
  lock_data = json.loads(f.read())
125
125
  assert lock_data == {
126
126
  "version": "1.0",
127
+ "workspaces": [],
127
128
  "workflows": [
128
129
  {
129
130
  "module": "workflow_87654321",
@@ -132,6 +133,7 @@ def test_pull__sandbox_id_with_no_config(vellum_client):
132
133
  "deployments": [],
133
134
  "container_image_tag": None,
134
135
  "container_image_name": None,
136
+ "workspace": "default",
135
137
  }
136
138
  ],
137
139
  }
@@ -208,8 +210,10 @@ def test_pull__workflow_deployment_with_no_config(vellum_client):
208
210
  "deployments": [],
209
211
  "container_image_tag": None,
210
212
  "container_image_name": None,
213
+ "workspace": "default",
211
214
  }
212
215
  ],
216
+ "workspaces": [],
213
217
  }
214
218
 
215
219
 
@@ -449,6 +453,7 @@ def test_pull__sandbox_id_with_other_workflow_deployment_in_lock(vellum_client,
449
453
  ],
450
454
  "container_image_name": None,
451
455
  "container_image_tag": None,
456
+ "workspace": "default",
452
457
  },
453
458
  {
454
459
  "module": "workflow_87654321",
@@ -457,6 +462,7 @@ def test_pull__sandbox_id_with_other_workflow_deployment_in_lock(vellum_client,
457
462
  "deployments": [],
458
463
  "container_image_name": "test",
459
464
  "container_image_tag": "1.0",
465
+ "workspace": "default",
460
466
  },
461
467
  ]
462
468
 
@@ -3,6 +3,7 @@ import io
3
3
  import json
4
4
  import os
5
5
  import tarfile
6
+ from unittest import mock
6
7
  from uuid import uuid4
7
8
 
8
9
  from click.testing import CliRunner
@@ -194,7 +195,7 @@ def test_push__dry_run_option_returns_report(mock_module, vellum_client):
194
195
  from typing import Dict
195
196
  from vellum.workflows import BaseWorkflow
196
197
  from vellum.workflows.nodes import BaseNode
197
- from vellum_ee.workflows.display.nodes import BaseNodeDisplay
198
+ from vellum_ee.workflows.display.nodes.base_node_display import BaseNodeDisplay
198
199
 
199
200
  class NotSupportedNode(BaseNode):
200
201
  pass
@@ -318,3 +319,89 @@ Files that were different between the original project and the generated artifac
318
319
  \x1b[0m
319
320
  """
320
321
  )
322
+
323
+
324
+ def test_push__workspace_option__uses_different_api_key(mock_module, vellum_client_class):
325
+ # GIVEN a single workflow configured
326
+ temp_dir = mock_module.temp_dir
327
+ module = mock_module.module
328
+ workflow_sandbox_id = mock_module.workflow_sandbox_id
329
+ set_pyproject_toml = mock_module.set_pyproject_toml
330
+
331
+ # AND a different workspace is set in the pyproject.toml
332
+ set_pyproject_toml(
333
+ {
334
+ "workflows": [
335
+ {
336
+ "module": module,
337
+ "workflow_sandbox_id": workflow_sandbox_id,
338
+ }
339
+ ],
340
+ "workspaces": [
341
+ {
342
+ "name": "my_other_workspace",
343
+ "api_key": "MY_OTHER_VELLUM_API_KEY",
344
+ }
345
+ ],
346
+ }
347
+ )
348
+
349
+ # AND the .env file has the other api key stored
350
+ with open(os.path.join(temp_dir, ".env"), "w") as f:
351
+ f.write(
352
+ """\
353
+ VELLUM_API_KEY=abcdef123456
354
+ MY_OTHER_VELLUM_API_KEY=aaabbbcccddd
355
+ """
356
+ )
357
+
358
+ # AND a workflow exists in the module successfully
359
+ base_dir = os.path.join(temp_dir, *module.split("."))
360
+ os.makedirs(base_dir, exist_ok=True)
361
+ workflow_py_file_content = """\
362
+ from vellum.workflows import BaseWorkflow
363
+
364
+ class ExampleWorkflow(BaseWorkflow):
365
+ pass
366
+ """
367
+ with open(os.path.join(temp_dir, *module.split("."), "workflow.py"), "w") as f:
368
+ f.write(workflow_py_file_content)
369
+
370
+ # AND the push API call returns a new workflow sandbox id
371
+ new_workflow_sandbox_id = str(uuid4())
372
+ vellum_client_class.return_value.workflows.push.return_value = WorkflowPushResponse(
373
+ workflow_sandbox_id=new_workflow_sandbox_id,
374
+ )
375
+
376
+ # WHEN calling `vellum push` on strict mode
377
+ runner = CliRunner()
378
+ result = runner.invoke(cli_main, ["push", module, "--workspace", "my_other_workspace"])
379
+
380
+ # THEN it should succeed
381
+ assert result.exit_code == 0, result.output
382
+
383
+ # AND we should have called the push API once
384
+ vellum_client_class.return_value.workflows.push.assert_called_once()
385
+
386
+ # AND the workflow sandbox id arg passed in should be `None`
387
+ call_args = vellum_client_class.return_value.workflows.push.call_args.kwargs
388
+ assert call_args["workflow_sandbox_id"] is None
389
+
390
+ # AND with the correct api key
391
+ vellum_client_class.assert_called_once_with(
392
+ api_key="aaabbbcccddd",
393
+ environment=mock.ANY,
394
+ )
395
+
396
+ # AND the vellum lock file should have been updated with the correct workspace
397
+ with open(os.path.join(temp_dir, "vellum.lock.json")) as f:
398
+ lock_file_content = json.load(f)
399
+ assert lock_file_content["workflows"][1] == {
400
+ "module": module,
401
+ "workflow_sandbox_id": new_workflow_sandbox_id,
402
+ "workspace": "my_other_workspace",
403
+ "container_image_name": None,
404
+ "container_image_tag": None,
405
+ "deployments": [],
406
+ "ignore": None,
407
+ }