vellum-ai 0.12.14__py3-none-any.whl → 0.12.16__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. vellum/__init__.py +6 -0
  2. vellum/client/__init__.py +2 -6
  3. vellum/client/core/client_wrapper.py +1 -1
  4. vellum/client/environment.py +3 -3
  5. vellum/client/resources/ad_hoc/client.py +2 -6
  6. vellum/client/resources/container_images/client.py +0 -8
  7. vellum/client/resources/metric_definitions/client.py +2 -6
  8. vellum/client/resources/workflows/client.py +8 -8
  9. vellum/client/types/__init__.py +6 -0
  10. vellum/client/types/audio_prompt_block.py +29 -0
  11. vellum/client/types/function_call_prompt_block.py +30 -0
  12. vellum/client/types/image_prompt_block.py +29 -0
  13. vellum/client/types/prompt_block.py +12 -1
  14. vellum/client/types/workflow_push_response.py +1 -0
  15. vellum/prompts/blocks/compilation.py +43 -0
  16. vellum/types/audio_prompt_block.py +3 -0
  17. vellum/types/function_call_prompt_block.py +3 -0
  18. vellum/types/image_prompt_block.py +3 -0
  19. vellum/workflows/nodes/core/inline_subworkflow_node/node.py +10 -2
  20. vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py +16 -0
  21. {vellum_ai-0.12.14.dist-info → vellum_ai-0.12.16.dist-info}/METADATA +11 -9
  22. {vellum_ai-0.12.14.dist-info → vellum_ai-0.12.16.dist-info}/RECORD +59 -48
  23. vellum_cli/__init__.py +14 -0
  24. vellum_cli/config.py +4 -0
  25. vellum_cli/pull.py +20 -5
  26. vellum_cli/push.py +33 -4
  27. vellum_cli/tests/test_pull.py +19 -1
  28. vellum_cli/tests/test_push.py +63 -0
  29. vellum_ee/workflows/display/nodes/vellum/__init__.py +2 -0
  30. vellum_ee/workflows/display/nodes/vellum/api_node.py +3 -3
  31. vellum_ee/workflows/display/nodes/vellum/base_node.py +35 -0
  32. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -2
  33. vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py +2 -2
  34. vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py +20 -6
  35. vellum_ee/workflows/display/nodes/vellum/map_node.py +1 -0
  36. vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py +2 -2
  37. vellum_ee/workflows/display/nodes/vellum/search_node.py +4 -2
  38. vellum_ee/workflows/display/nodes/vellum/templating_node.py +1 -1
  39. vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py +3 -3
  40. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py +0 -0
  41. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py +28 -0
  42. vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py +123 -0
  43. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py +6 -46
  44. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py +3 -25
  45. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py +168 -0
  46. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py +18 -10
  47. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py +18 -10
  48. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py +3 -25
  49. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py +2 -8
  50. vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py +13 -27
  51. vellum_ee/workflows/display/types.py +5 -1
  52. vellum_ee/workflows/display/utils/vellum.py +3 -3
  53. vellum_ee/workflows/display/vellum.py +4 -0
  54. vellum_ee/workflows/display/workflows/base_workflow_display.py +44 -16
  55. vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py +3 -0
  56. vellum_ee/workflows/display/workflows/vellum_workflow_display.py +7 -8
  57. {vellum_ai-0.12.14.dist-info → vellum_ai-0.12.16.dist-info}/LICENSE +0 -0
  58. {vellum_ai-0.12.14.dist-info → vellum_ai-0.12.16.dist-info}/WHEEL +0 -0
  59. {vellum_ai-0.12.14.dist-info → vellum_ai-0.12.16.dist-info}/entry_points.txt +0 -0
@@ -1,18 +1,18 @@
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=iims87aL6HbwggCAh8JfLBNf3C7tN3TGDmlg7V5W9Lg,8506
3
+ vellum_cli/__init__.py,sha256=7liY2AX5t51Vd_usohIU6QSLjAsF6MaHD30L6ng9SSg,8926
4
4
  vellum_cli/aliased_group.py,sha256=ugW498j0yv4ALJ8vS9MsO7ctDW7Jlir9j6nE_uHAP8c,3363
5
- vellum_cli/config.py,sha256=wJQnv3tCgu1BOugg0AOP94yQ-x1yAg8juX_QoFN9Y7w,5223
5
+ vellum_cli/config.py,sha256=998IZbvkrw2avjbvs8bw6NrbEgGz5UBKRbvKAcastJg,5493
6
6
  vellum_cli/image_push.py,sha256=SJwhwWJsLjwGNezNVd_oCVpFMfPsAB3dfLWmriZZUtw,4419
7
7
  vellum_cli/logger.py,sha256=PuRFa0WCh4sAGFS5aqWB0QIYpS6nBWwPJrIXpWxugV4,1022
8
- vellum_cli/pull.py,sha256=AfSQLHwTeq_T22iRbGyefnmrPiddIKb_fqPMSoTlN0Y,6832
9
- vellum_cli/push.py,sha256=gcYhIogeYejZIhNm5Cjp0VBECaXLmVQEvZjrPH0-TSU,5337
8
+ vellum_cli/pull.py,sha256=hYQBe2_-Y4Ieh_Jo54EwBUpqPYq6UYitUBPgqyOVba0,7499
9
+ vellum_cli/push.py,sha256=iQ2H-vY8njqiYgIifGooqopqkb1BUUA3I7IN7VIHKv8,6149
10
10
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  vellum_cli/tests/conftest.py,sha256=eFGwBxib3Nki830lIFintB0b6r4x8T_KMnmzhlTY5x0,1337
12
12
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
13
13
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
14
- vellum_cli/tests/test_pull.py,sha256=Bnf21VjfiRb_j495idz5N8afucagtiktNCtVMvU8tGs,18977
15
- vellum_cli/tests/test_push.py,sha256=NpwGXuZSzrR7B6hBO1UF9O8im13_LlpSqncVSdzYDiQ,5812
14
+ vellum_cli/tests/test_pull.py,sha256=6gbASF6ASy5YcdWjOCt6b5K0u2VWsFegdrTWu6sEVKs,19613
15
+ vellum_cli/tests/test_push.py,sha256=sqPy1N9TOa0Wwk4tfEZm18BnfcwRSoQboTWW_PHQA-E,8145
16
16
  vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -26,60 +26,65 @@ vellum_ee/workflows/display/nodes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5J
26
26
  vellum_ee/workflows/display/nodes/tests/test_base_node_display.py,sha256=QqR3Ly0RNrXwOeLdW5nERDFt0gRPf76n1bPES6o5UN4,1093
27
27
  vellum_ee/workflows/display/nodes/types.py,sha256=St1BB6no528OyELGiyRabWao0GGw6mLhstQAvEACbGk,247
28
28
  vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqUzHxRVnCS9Cd-4,973
29
- vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nmPLj8vkbVCS46XQqmHq8Xj8Mr36wCK_vWf26A9KIkw,1505
30
- vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=4SSQGecKWHuoGy5YIGJeOZVHGKwTs_8Y-gf3GvsHb0M,8506
31
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=qrf2Ne8n2aaoa2xgK3ExCEGI9BA-2g1zmvjSHyzCWmQ,4230
29
+ vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=_raKY9eKi_OvIFn6nGvf9xKSboKtYLHCWaWCwDQFbOc,1567
30
+ vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=zucBb2neqTig5Q3HCiMrksRdg-WISnR2prFxYzk3WL0,8527
31
+ vellum_ee/workflows/display/nodes/vellum/base_node.py,sha256=M59-Kwz6bQ_j8yWLAtJikye-iOl5WtMI8eMnTtvb8SQ,1508
32
+ vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=Kp-0YRZoy_Pi7HdwUgBxV57a6BzyoxotsvFsfoSGg40,4244
32
33
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=EtdqJfhYw03PuT2iyJ6mSAZK4RsQqDie_2AnJAtMelk,13625
33
34
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=ygTjSjYDI4DtkxADWub5rhBnRWItMKWF6fezBrgpOKA,1979
34
35
  vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=t5iJQVoRT5g-v2IiUb4kFYdvUVKch0zn27016pzDZoo,2761
35
36
  vellum_ee/workflows/display/nodes/vellum/guardrail_node.py,sha256=3TJvHX_Uuf_gr94VkYc_zmNH8I5p71ChIeoAbJZ3ddY,2158
36
- vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=DYhxHgFT06CNCpovO4Z-wFPqCjFKxyl89ygFs8AucRQ,7189
37
- vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=IqPQdlxLdaMirgDbOSxq17d8bolqqjjRPy4t3YCBhmc,5028
38
- vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=AqUlItgSZij12qRKguKVmDbbaLuDy3Cdom5uOlJPqrc,3640
37
+ vellum_ee/workflows/display/nodes/vellum/inline_prompt_node.py,sha256=dcrCIIWeL5RDHEmc9eyHEdDvxrzQddm71TUtLVcVH8I,7203
38
+ vellum_ee/workflows/display/nodes/vellum/inline_subworkflow_node.py,sha256=_cdCzwbwB3gvcLz3UOgvmpz_AZwhXaU8CsOj9nuHB0M,5566
39
+ vellum_ee/workflows/display/nodes/vellum/map_node.py,sha256=y05CB-Pa5-H22YYSjqKnwGyUnuFqjiawbmjVPoElIQw,3692
39
40
  vellum_ee/workflows/display/nodes/vellum/merge_node.py,sha256=jzO63B9KiEAncnBqmz2ZTcxjmEHozMEe7WnfpcpsQYg,3195
40
41
  vellum_ee/workflows/display/nodes/vellum/note_node.py,sha256=9VpC3h0RYOxJuRbjDwidBYlLKakkmlEnDMBh2C7lHcY,1107
41
- vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=gLRkizwyw21-Z12IyDbdOJpXayiZZd4HWd6qgZQg8sc,3106
42
- vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=laNWcDt62VRM5hLfcOi-ouAyNhYiFRsD0PWbVGLwlLI,9035
42
+ vellum_ee/workflows/display/nodes/vellum/prompt_deployment_node.py,sha256=3uvSVvNNwVhqxsEh4moW_gIQss1bIuw9Do8XPWr9XLA,3120
43
+ vellum_ee/workflows/display/nodes/vellum/search_node.py,sha256=sSO7n-UXoIdolRAqyKy6MdpdC-hrrt83ntSWe_qLKEM,9071
43
44
  vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=zOp4voBSgB3MR1R93wTOrsiiara_hxEAYFupLl_SvTA,2657
44
- vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=IHumtFFZSanRizU3-0ATFgUnDuSFZMScZce8YTDJiGU,3373
45
+ vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=l_QDDTxHxmnwGKr6IwZZvwUMXAjSHJPNE8hf5tY75b4,3380
45
46
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=aJfQnIvlrRHVKgQid_gg6VQKkJyPgFnzbvWt9_t0Vz0,3860
47
+ vellum_ee/workflows/display/nodes/vellum/tests/test_utils.py,sha256=JPZKf7irQ38Dus5bWV_ysKkG97z0oeqP57lOptA-dPk,3881
47
48
  vellum_ee/workflows/display/nodes/vellum/try_node.py,sha256=hB8dcGMGkuC95kk9hmZUgHsCLwEA37fHTFXj0JzbRjM,4692
48
49
  vellum_ee/workflows/display/nodes/vellum/utils.py,sha256=6mPg9QilJfLw9Sgk_h9LRSyKZpKgRu06mr3X1AmmDCA,4691
49
50
  vellum_ee/workflows/display/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
51
  vellum_ee/workflows/display/tests/test_vellum_workflow_display.py,sha256=TEg3QbdE7rLbEhml9pMWmay--phsekGlfGVhTblxCGE,1727
51
52
  vellum_ee/workflows/display/tests/workflow_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/conftest.py,sha256=5UTzBUKC1H5ve9MJGJMMLGhQ-1ZV4NPn6wYYEdreNxM,1172
55
+ vellum_ee/workflows/display/tests/workflow_serialization/generic_nodes/test_trigger_serialization.py,sha256=nhqi4D_6R9WtQG2WYyPy9RdoollwriWc-72BgOBY9BM,4035
52
56
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_api_node_serialization.py,sha256=e__ae2yepB5vlgVT08sr1DDB8pYjax6VQLo5FtRk-nA,17934
53
57
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_code_execution_node_serialization.py,sha256=F822H2tM3Fvmc2PvunrVCRhtSKQLLpi5y2L1gyJKa78,31576
54
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=d6xWDvi-Uo1KcMHVj_e8TujKhTwMKXAlT8H3P2V0gQU,53693
55
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=MGwIwhCBCVYZmE_8Srts3fEs0BcRqXFFVbqiHiBQ55Q,6798
58
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_conditional_node_serialization.py,sha256=88z_dRc2sARwH73KqyZy6KXJCFPULdPKCeTJ2QJAODY,52192
59
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_error_node_serialization.py,sha256=KNcZR9PhkXYUl-OFKc2XK9qG-C_28K01Le7ecpwPUfU,6143
60
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_generic_node_serialization.py,sha256=ZcKpGLZ-RyqfWzvVEsFywSYEqLHrIjFjx5RJmxJT_u4,6091
56
61
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_guardrail_node_serialization.py,sha256=vA8cd7PJYhf949OUGeYP_moKtMogSyfHN2Z-qzNQLwM,8294
57
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=N2ACycHn-EwP5paxHwDu2fufABssE293wiunhm-bCGg,22076
58
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=H1bVDG_mFPokJ7OYrnl9rM9M3gEa5bctGmhUuKccB4U,15950
59
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=vm-dRH_Y-qU9whkwBUNnhVPYL_Ua6cqpaDsDSEgRkxo,9998
62
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_inline_subworkflow_serialization.py,sha256=7XaPhlX4TU7Ehq62opb_1vGHvynjxJLP_pYqyMt6IOI,22621
63
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_map_node_serialization.py,sha256=lukNCF0w45X2i5SCT5KDMGFn0C0acBNY8t78sC4mBXQ,16485
64
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_merge_node_serialization.py,sha256=qXEVZ_OZUUvHZvQyXgVrjvhmvFp5As3DrHZWIvlhGsc,9345
60
65
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_prompt_deployment_serialization.py,sha256=NkpgaTbu6nLr3iwgsSNtiHyiNDCUaFakd1JaoW6CC6Y,9489
61
66
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_serialization.py,sha256=9R6ELHBn9tsp3cy15q1qp1OByyCxFOVdrM67EwCYY50,12984
62
67
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=8bz0vm_EyQKSjnwS5vqqgnjE9ygvm-CaPKcwCfeOrlo,12704
63
68
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=6LrGPS7e9CWpjFq2hpliSzP9kDpZ9KqvBNlNO3sq8cs,8063
64
69
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=xG8nKA1iKXxUe1fnD2X6qm7cUGW14iq2P-L16zhcKC8,4271
65
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=1_02RbghUwhKMr8VtRaPjHOXAX59hgWw1rJ2EDyKs-E,2880
66
- vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=BGCgJ3WWiYK5fWJp_Yz-aWQPli5sIKOhLTVYfG9Tpq8,9177
67
- vellum_ee/workflows/display/types.py,sha256=FSPg3TO8iNE2gnl1vn-nsMfit2V6yeBXW0Igh089A9w,2011
70
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_try_node_serialization.py,sha256=cE6dmre7LRfUV2sZReDhES1zHpYcNH07cDZCrXQsRDw,2638
71
+ vellum_ee/workflows/display/tests/workflow_serialization/test_complex_terminal_node_serialization.py,sha256=stOOF7n7oZvZby9Zyk0vr7dK3OG6bx9TEaIXFEZjX0o,8478
72
+ vellum_ee/workflows/display/types.py,sha256=-ninso8Yf2EBn_RkFhpOEOjRhX2bYgCeMWssHoEgPRg,2248
68
73
  vellum_ee/workflows/display/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- vellum_ee/workflows/display/utils/vellum.py,sha256=-cz3xB-_-r1O9TBdLQPBvlpptg9CrZVNQ50QimmJFnA,5032
70
- vellum_ee/workflows/display/vellum.py,sha256=OSv0ZS50h1zJbunJ9TH7VEWFw-exXdK_ZsdzPxP9ROs,8814
74
+ vellum_ee/workflows/display/utils/vellum.py,sha256=72wyR_ngYjirPYT8kFDxVPtRdHT7FpzBpsjoGMh1q0c,5053
75
+ vellum_ee/workflows/display/vellum.py,sha256=FHf2GXJ-KNXstMgRg5Prp7BL_dbUt8BSrPxg_QgJmxM,8945
71
76
  vellum_ee/workflows/display/workflows/__init__.py,sha256=kapXsC67VJcgSuiBMa86FdePG5A9kMB5Pi4Uy1O2ob4,207
72
- vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=ydAbFMzcY2LURINZbXYm9BAXZdIa3-7rQ86Kupo7qcA,12804
73
- vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=AMxNnTm2z3LIR5rqxoCAfuy37F2FTuSRDVtKUoezO8M,1184
74
- vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=GhIviEMDWNw1p8z20ta08T5PeNCVJs5p2hrOX1uyNxg,17066
77
+ vellum_ee/workflows/display/workflows/base_workflow_display.py,sha256=u5u_KnDp_ktLBlfkT5wiGHIloodSlUT3D3_DQXijtMA,13735
78
+ vellum_ee/workflows/display/workflows/get_vellum_workflow_display_class.py,sha256=kp0u8LN_2IwshLrhMImhpZx1hRyAcD5gXY-kDuuaGMQ,1269
79
+ vellum_ee/workflows/display/workflows/vellum_workflow_display.py,sha256=sUQVEP2te48G97t-au_utKfMhePi4U5nmotzMln7Ga4,16943
75
80
  vellum_ee/workflows/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
81
  vellum_ee/workflows/server/virtual_file_loader.py,sha256=sQQFqn7xI0GfUlypWkVFl-X5ShXTh9bXq8N6qlQvSoE,1452
77
- vellum/__init__.py,sha256=eS4rbj1wrussRENYQRA1GZ5JgcbIlqDad_ARuOihIYE,35624
82
+ vellum/__init__.py,sha256=wO2rKMEtIjNEb53CstEj-0qkUDiKKmGb_uxXEl-jS8c,35776
78
83
  vellum/client/README.md,sha256=JkCJjmMZl4jrPj46pkmL9dpK4gSzQQmP5I7z4aME4LY,4749
79
- vellum/client/__init__.py,sha256=z59nOGe27vMDqsU-ljfULBwC5J4nyrqFunhmo8xnxbU,111521
84
+ vellum/client/__init__.py,sha256=7yb5YnhvHQUJusa1WyUZcAKGol3z-Lfu07EfD03eEW4,111291
80
85
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
81
86
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
82
- vellum/client/core/client_wrapper.py,sha256=eCp0imbOxsKZE981B9ikNz1dw1PL356Io3515uO93DY,1869
87
+ vellum/client/core/client_wrapper.py,sha256=2N1VoBiQAederYuBKuAwXoDAkbTGPnkciOAPvOv1Xyk,1869
83
88
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
84
89
  vellum/client/core/file.py,sha256=X9IbmkZmB2bB_DpmZAO3crWdXagOakAyn6UCOCImCPg,2322
85
90
  vellum/client/core/http_client.py,sha256=R0pQpCppnEtxccGvXl4uJ76s7ro_65Fo_erlNNLp_AI,19228
@@ -89,7 +94,7 @@ vellum/client/core/query_encoder.py,sha256=ekulqNd0j8TgD7ox-Qbz7liqX8-KP9blvT9Ds
89
94
  vellum/client/core/remove_none_from_dict.py,sha256=EU9SGgYidWq7SexuJbNs4-PZ-5Bl3Vppd864mS6vQZw,342
90
95
  vellum/client/core/request_options.py,sha256=5cCGt5AEGgtP5xifDl4oVQUmSjlIA8FmRItAlJawM18,1417
91
96
  vellum/client/core/serialization.py,sha256=D9h_t-RQON3-CHWs1C4ESY9B-Yd5d-l5lnTLb_X896g,9601
92
- vellum/client/environment.py,sha256=vkEIsMFufsklAMQJxa_E9R60LQsbeqKbWqtyXjffZp8,498
97
+ vellum/client/environment.py,sha256=bcAFjoE9XXd7tiysYS90Os669IJmUMZS2JZ_ZQn0Dpg,498
93
98
  vellum/client/errors/__init__.py,sha256=HZB8vVqzDNx0M2uFJ05S5RcGTH95iVDl4v3rQ4xRqSw,343
94
99
  vellum/client/errors/bad_request_error.py,sha256=_EbO8mWqN9kFZPvIap8qa1lL_EWkRcsZe1HKV9GDWJY,264
95
100
  vellum/client/errors/forbidden_error.py,sha256=QO1kKlhClAPES6zsEK7g9pglWnxn3KWaOCAawWOg6Aw,263
@@ -97,9 +102,9 @@ vellum/client/errors/internal_server_error.py,sha256=8USCagXyJJ1MOm9snpcXIUt6eNX
97
102
  vellum/client/errors/not_found_error.py,sha256=tBVCeBC8n3C811WHRj_n-hs3h8MqwR5gp0vLiobk7W8,262
98
103
  vellum/client/resources/__init__.py,sha256=2B6Oim7PG4IxSUNSzDY1EruQHsaZ7konj3j_WSTydCs,1378
99
104
  vellum/client/resources/ad_hoc/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
100
- vellum/client/resources/ad_hoc/client.py,sha256=HR5NwH12JPlaKBKKXtO9eiEe9_KTH11El3dbpG9nLuU,14403
105
+ vellum/client/resources/ad_hoc/client.py,sha256=_liorv4AsoJ55kVu0a5oWB3Qeff0iUKXqoHEIyDWLxc,14173
101
106
  vellum/client/resources/container_images/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
102
- vellum/client/resources/container_images/client.py,sha256=jK1n-NFsdBKCeEKh-EIqvw7R8AG9PP4GxxcoH9F0GYs,15463
107
+ vellum/client/resources/container_images/client.py,sha256=g8X3IkWFj43-sJMvirjDrh1-yjOFYV2C9xsGC20Xfjo,15003
103
108
  vellum/client/resources/deployments/__init__.py,sha256=m64MNuPx3qVazOnTNwOY8oEeDrAkNwMJvUEe5xoMDvs,239
104
109
  vellum/client/resources/deployments/client.py,sha256=ssXaHJXBxO_I8JLuijusDVWwsfYadTw3j7o41ICYtrY,38777
105
110
  vellum/client/resources/deployments/types/__init__.py,sha256=29GVdoLOJsADSSSqZwb6CQPeEmPjkKrbsWfru1bemj8,321
@@ -116,7 +121,7 @@ vellum/client/resources/folder_entities/client.py,sha256=ep5dnfJmEuEyrOSUftEVwKa
116
121
  vellum/client/resources/folder_entities/types/__init__.py,sha256=cHabrupjC-HL3kj-UZ9WdVzqHoQHCu6QsLFB3wlOs7k,212
117
122
  vellum/client/resources/folder_entities/types/folder_entities_list_request_entity_status.py,sha256=nK9b9fRSeCfjn2V2Hifl1IbhFeVsNkoeXJ8rCAPADFg,183
118
123
  vellum/client/resources/metric_definitions/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
119
- vellum/client/resources/metric_definitions/client.py,sha256=T3pS0tn2M1e-kdURLemdftGlVGfmxSozcV-SpJN5zvE,10100
124
+ vellum/client/resources/metric_definitions/client.py,sha256=WfR2f9YtDIdb9yXD_xvJf4pfRr0jVH7QKiiUrPAaeLs,9870
120
125
  vellum/client/resources/ml_models/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
121
126
  vellum/client/resources/ml_models/client.py,sha256=XIYapTEY6GRNr7V0Kjy5bEeKmrhv9ul8qlQY2A5LFqQ,3872
122
127
  vellum/client/resources/sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
@@ -133,12 +138,12 @@ vellum/client/resources/workflow_deployments/types/workflow_deployments_list_req
133
138
  vellum/client/resources/workflow_sandboxes/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
134
139
  vellum/client/resources/workflow_sandboxes/client.py,sha256=3wVQxkjrJ5bIS8fB5FpKXCP2dX38299ghWrJ8YmXxwQ,7435
135
140
  vellum/client/resources/workflows/__init__.py,sha256=Z4xi8Nxd9U4t35FQSepTt1p-ns0X1xtdNs168kUcuBk,153
136
- vellum/client/resources/workflows/client.py,sha256=1X9KKRIr-Jwxbkd2a43DYfukKRKgNL1IXkGb9VC15a0,11391
141
+ vellum/client/resources/workflows/client.py,sha256=4TOVbNauZ7x84rot3FBo8KKqmjd1mMGKLLXE7BRFEK0,11179
137
142
  vellum/client/resources/workflows/types/__init__.py,sha256=-uFca4ypncAOvfsg6sjD-5C9zWdA5qNvU6m675GphVg,177
138
143
  vellum/client/resources/workflows/types/workflows_pull_request_format.py,sha256=dOWE_jnDnniIJLoeseeCms23aklghyBkoPmBFzcqqZk,165
139
144
  vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
140
145
  vellum/client/resources/workspace_secrets/client.py,sha256=h7UzXLyTttPq1t-JZGMg1BWxypxJvBGUdqg7KGT7MK4,8027
141
- vellum/client/types/__init__.py,sha256=cCh66eGhjb0bVYtwjjQBGpzjt_LT0SiVToraHqVglTg,53821
146
+ vellum/client/types/__init__.py,sha256=NzUZ2aXt94v1CqcvgIA3vrSUVLDMM39rVeHm3_YqREw,54062
142
147
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
143
148
  vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
144
149
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=Bfvf1d_dkmshxRACVM5vcxbH_7AQY23RmrrnPc0ytYY,939
@@ -159,6 +164,7 @@ vellum/client/types/array_vellum_value.py,sha256=6ZDizIzijUFX29JD4lnNv1mOH-venLD
159
164
  vellum/client/types/array_vellum_value_request.py,sha256=SUIfUTeJTDcsH76mb_PfQv3q0GEUkVr4Gk-dqn2Qr-I,951
160
165
  vellum/client/types/audio_chat_message_content.py,sha256=159ELbeifFmAOvqPKaVSemHytSJ6OR0kOCtspCj4Lmc,725
161
166
  vellum/client/types/audio_chat_message_content_request.py,sha256=0iy-fv_AYp_3FIJUNza3aqCZrnHBsYN-IwQO690qeUk,754
167
+ vellum/client/types/audio_prompt_block.py,sha256=4gbzRmZfT_crv3YcGTq265LE-HnzB_bxxtK0aUKzEJY,1013
162
168
  vellum/client/types/audio_variable_value.py,sha256=GLZMcQ_2IicejsXhvQz0kVNfIKmjLHqwa27qYOo881Y,747
163
169
  vellum/client/types/audio_vellum_value.py,sha256=8tbwNkj5UtnjZhFIQZ18O233yCt4fK3BhXpR7S5VEt4,745
164
170
  vellum/client/types/audio_vellum_value_request.py,sha256=KnEyYDvTVqNdYcb4v2AGs5nLbcWFSj351_A9nM2ad8Y,774
@@ -269,6 +275,7 @@ vellum/client/types/function_call_chat_message_content_request.py,sha256=HVGxHs6
269
275
  vellum/client/types/function_call_chat_message_content_value.py,sha256=DHRZYAMc4Y5MerUS_6CIxQBtORftKn-gBx8Skgivm_A,736
270
276
  vellum/client/types/function_call_chat_message_content_value_request.py,sha256=67EZ3qSR9zO5akOgloswRE0Pv8BcjtWhdTRJIwuQU04,743
271
277
  vellum/client/types/function_call_input.py,sha256=Iiqk2-IX6xUI2UnRj3bum5C0OlQn9jRmBwatUzJQQt8,820
278
+ vellum/client/types/function_call_prompt_block.py,sha256=TFs-XtVM7F-Mg-KwVctOyOcSloVI1vIfsMEeEeLuu7Y,1052
272
279
  vellum/client/types/function_call_request.py,sha256=udGEdk66q1zTpEFE2xq-cu6w_ahMpfQv_9lIey9x1G0,720
273
280
  vellum/client/types/function_call_variable_value.py,sha256=VQKCiEtJsmIK3i7CtFV_2ZpxeX70rqpUViXIvAci8L0,702
274
281
  vellum/client/types/function_call_vellum_value.py,sha256=lLJb-S_-S_UXm6una1BMyCbqLpMhbbMcaVIYNO45h5o,759
@@ -293,6 +300,7 @@ vellum/client/types/hkunlp_instructor_xl_vectorizer.py,sha256=0wDZyilAQD3SQYIOBx
293
300
  vellum/client/types/hkunlp_instructor_xl_vectorizer_request.py,sha256=Mtg_hl-IIfa134LWBonkxOQ1dhjXkGkz7maDZ57o_d4,832
294
301
  vellum/client/types/image_chat_message_content.py,sha256=1jHmNuLY2kuuSgJCqNmc4wUMw5aot6GLU6_hQ_99r2g,725
295
302
  vellum/client/types/image_chat_message_content_request.py,sha256=b0K1NnY-NneG_V3JAnyr4H2jrPGOC1OQ-OcCmS1GCvE,754
303
+ vellum/client/types/image_prompt_block.py,sha256=JIcfWZAWYcOm04Y6XjmxPG58SaoXwIjuZwnVypEVahU,1008
296
304
  vellum/client/types/image_variable_value.py,sha256=njfgKYFU5lTCeosINThWziVE_jpuBjcgntZ3xAALT58,750
297
305
  vellum/client/types/image_vellum_value.py,sha256=69XnqE9m-bd3dOdMD73WtfDm_kDrVg-y3fi35akuqsk,748
298
306
  vellum/client/types/image_vellum_value_request.py,sha256=-Q66T8M6fAf9K_v0LeRwZjB_6pkBUSyMUQc6plRRK5E,777
@@ -397,7 +405,7 @@ vellum/client/types/pdf_search_result_meta_source_request.py,sha256=nUhaD2Kw1paG
397
405
  vellum/client/types/plain_text_prompt_block.py,sha256=cqEN-B4mcvMw_9lBN7FQG8pk9b5LBJ9xpM6PTgkGiqs,930
398
406
  vellum/client/types/price.py,sha256=ewzXDBVLaleuXMVQ-gQ3G1Nl5J2OWOVEMEFfnQIpiTk,610
399
407
  vellum/client/types/processing_failure_reason_enum.py,sha256=R_KIW7TcQejhc-vLhtNf9SdkYADgoZCn4ch4_RRIvsI,195
400
- vellum/client/types/prompt_block.py,sha256=MIsxxmAmuT0thkkG12xm3THO5dlRLbFeMZBVTSvb788,493
408
+ vellum/client/types/prompt_block.py,sha256=PK3NMPLg0NSmrr7JpMQcbNzCo8DjTP9xvg6ENd2bJZk,747
401
409
  vellum/client/types/prompt_block_state.py,sha256=BRAzTYARoSU36IVZGWMeeqhl5fgFMXCyhJ8rCbfB-f0,163
402
410
  vellum/client/types/prompt_deployment_expand_meta_request.py,sha256=agsiAaHB6lDoZPlnfJ2nmhB4Ud4EiJJTX05YmduyCPo,1910
403
411
  vellum/client/types/prompt_deployment_input_request.py,sha256=KrT4-Ew2VvTWXEkYQz2oyHn5EDOgrMW7FzRFaPH3ARg,353
@@ -611,7 +619,7 @@ vellum/client/types/workflow_output_search_results.py,sha256=r3RRGVVrH2H9NAuxA7q
611
619
  vellum/client/types/workflow_output_string.py,sha256=_jclzbQ-Wlf-7FEVTWXhs9h5FWfj4xGpiODZBOzT43w,810
612
620
  vellum/client/types/workflow_push_deployment_config_request.py,sha256=pG6bZtlw7S0TcXtNRQNa7y_2NodZe7dp5SchIrgRUVU,745
613
621
  vellum/client/types/workflow_push_exec_config.py,sha256=6TaVMVqhSOz4DnY46l8axPDtytSioXDl9nHvFXSxH1g,94
614
- vellum/client/types/workflow_push_response.py,sha256=BHFX9M87__2AwW6krLxumQ3ecOR6qMOMgVmvQdS_6Ls,634
622
+ vellum/client/types/workflow_push_response.py,sha256=1vUSZmZ1GK1242dAkNwJnJI0rL3pBT3_0HOLLjdiutw,724
615
623
  vellum/client/types/workflow_release_tag_read.py,sha256=S7ekl01oVDetL8R7MdBTb4cDhHN0W0iHGNJ1-ZpY3Tc,1155
616
624
  vellum/client/types/workflow_release_tag_workflow_deployment_history_item.py,sha256=pjWobdk9mZD3Px86rwFHfs_PYJBGXDKQUkxsgNEe6EA,825
617
625
  vellum/client/types/workflow_request_chat_history_input_request.py,sha256=WCZvwDuNS8ylWOOoKD3t7fHLSYB0h-fVCqeDRzqPoPA,898
@@ -663,7 +671,7 @@ vellum/plugins/utils.py,sha256=U9ZY9KdE3RRvbcG01hXxu9CvfJD6Fo7nJDgcHjQn0FI,606
663
671
  vellum/plugins/vellum_mypy.py,sha256=VC15EzjTsXOb9uF1bky4rcxePP-0epMVmCsLB2z4Dh8,24816
664
672
  vellum/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
665
673
  vellum/prompts/blocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
666
- vellum/prompts/blocks/compilation.py,sha256=GVxV0iaVp72RCNMlLtUasfg25jBjbeEu3u97QUSbrQo,7506
674
+ vellum/prompts/blocks/compilation.py,sha256=ISuvDHaeVCPb1L7l4umORCECkDn0-rvE49hopz6c2gM,9222
667
675
  vellum/prompts/blocks/exceptions.py,sha256=vmk5PV6Vyw9nKjZYQDUDW0LH8MfQNIgFvFb_mFWdIRI,50
668
676
  vellum/prompts/blocks/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
669
677
  vellum/prompts/blocks/tests/test_compilation.py,sha256=0DhMoc4huHR6YnNL-0aBLmWSyUfw2BpRq_gEdKsQmAc,3693
@@ -733,6 +741,7 @@ vellum/types/array_vellum_value.py,sha256=7_gccasRhEX_dekrfpiM6sqGVXxnT6f5sLB904
733
741
  vellum/types/array_vellum_value_request.py,sha256=-tnyAoCArVJRaTQFPDqgTHuzec1UgWpXqjEbUbhZbyI,164
734
742
  vellum/types/audio_chat_message_content.py,sha256=beZpZqUrJQHis0bkhiPnJO9qbl8c2DZyv74dd1OZf8o,164
735
743
  vellum/types/audio_chat_message_content_request.py,sha256=ySZZ8IARXUocjczLZ27CHEmRX3uY2UhBfTzaOE8CeRo,172
744
+ vellum/types/audio_prompt_block.py,sha256=zpQcvY3Fic82mPlPyOLCjZBBq0dFyCyKuGRkYNDWQko,156
736
745
  vellum/types/audio_variable_value.py,sha256=lDlablFV78mXIRI7IJU1Pyj4SsACLTnwnRBw0UJO3RU,158
737
746
  vellum/types/audio_vellum_value.py,sha256=-9HkLXeBD-IMh_TwKdmQVfAD_F0et2gYKT2ykb_jaAM,156
738
747
  vellum/types/audio_vellum_value_request.py,sha256=YuwrbVZK1EuUKkir5H9-ipeLTPfSF8h6Yy5lS_pAZg4,164
@@ -843,6 +852,7 @@ vellum/types/function_call_chat_message_content_request.py,sha256=Pe-BkV1-7hTxkY
843
852
  vellum/types/function_call_chat_message_content_value.py,sha256=KETBajaPRZGjpNc4H09C0xauVhKkf-mDy6yPFmqKFn0,178
844
853
  vellum/types/function_call_chat_message_content_value_request.py,sha256=nVlQJdvM5mo4z52l8GodiPvoFydUv6X35s83pEvI7Nk,186
845
854
  vellum/types/function_call_input.py,sha256=Ec31jaPDp9ljRe_XBSH0HwtxdJUUNkbK3kBscOhI6UY,157
855
+ vellum/types/function_call_prompt_block.py,sha256=n4gHkUbUsihmlxN-bt_4B-CUpFZjl7Ammusqv_LB648,164
846
856
  vellum/types/function_call_request.py,sha256=Dz9jMUgEjX0Bhv-amoRLKR_oPlq_dcWcr0VFGA0Yi70,159
847
857
  vellum/types/function_call_variable_value.py,sha256=61qbXVPjRivofXeKmdP-3dLhH1tkzKAorxBQlBft_-U,166
848
858
  vellum/types/function_call_vellum_value.py,sha256=IEFGHcyjmksr0fbttwF8URV75jGRbs8WCpg5Kw-PEW4,164
@@ -867,6 +877,7 @@ vellum/types/hkunlp_instructor_xl_vectorizer.py,sha256=JRH8sgsDEfVUF9H-83eoirSU4
867
877
  vellum/types/hkunlp_instructor_xl_vectorizer_request.py,sha256=zb2L8_LUSxtOQOWjr9tDU_mK2a_azmKO8DqNQi52EQM,177
868
878
  vellum/types/image_chat_message_content.py,sha256=hNVlrv_xoUm1-euBK5DkZDInoMfL0eXb4Klx3juCWYU,164
869
879
  vellum/types/image_chat_message_content_request.py,sha256=-_twjYRyGrsbc79xyd0vZ2xkt3Z4rsjJb2Ts0xRX-dY,172
880
+ vellum/types/image_prompt_block.py,sha256=K5eXoltiu3ifZqeLtNUTz6DUKu-aqnK0hUyWNvPGByg,156
870
881
  vellum/types/image_variable_value.py,sha256=AqrNSw5yXLkQ3c3rsxhnQEenUoxyx_NXfiN26lwBNBg,158
871
882
  vellum/types/image_vellum_value.py,sha256=aCrL399s9TeVKI5dvF7_qus43IgGYoy1erUqOk_iHB8,156
872
883
  vellum/types/image_vellum_value_request.py,sha256=dEXmHRhRYDhWuUMHJ0VjwUc5RLVBCEeoW-QSBKc8LEg,164
@@ -1283,9 +1294,9 @@ vellum/workflows/nodes/core/__init__.py,sha256=5zDMCmyt1v0HTJzlUBwq3U9L825yZGZhT
1283
1294
  vellum/workflows/nodes/core/error_node/__init__.py,sha256=g7RRnlHhqu4qByfLjBwCunmgGA8dI5gNsjS3h6TwlSI,60
1284
1295
  vellum/workflows/nodes/core/error_node/node.py,sha256=MFHU5vITYSK-L9CuMZ49In2ZeNLWnhZD0f8r5dWvb5Y,1270
1285
1296
  vellum/workflows/nodes/core/inline_subworkflow_node/__init__.py,sha256=nKNEH1QTl-1PcvmYoqSWEl0-t6gAur8GLTXHzklRQfM,84
1286
- vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=zyKvpeNoD2D7vtGbNuvqXUxVgtkmSbk1XQExwX9KUf8,3602
1297
+ vellum/workflows/nodes/core/inline_subworkflow_node/node.py,sha256=XJLz7Kkk4OwrM-OcPjiLfF3XC49jDwsVKFPTNXkenvQ,3964
1287
1298
  vellum/workflows/nodes/core/inline_subworkflow_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1288
- vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=99LLPgHMqohGL-G4KqOSjeVlDR_FH8Rv1gtRii85MC4,1143
1299
+ vellum/workflows/nodes/core/inline_subworkflow_node/tests/test_node.py,sha256=n0-821Ov9ZfRFX_lbzLy5o2rX8fEw2qoxz0aFWCOxVg,1547
1289
1300
  vellum/workflows/nodes/core/map_node/__init__.py,sha256=MXpZYmGfhsMJHqqlpd64WiJRtbAtAMQz-_3fCU_cLV0,56
1290
1301
  vellum/workflows/nodes/core/map_node/node.py,sha256=DTMoGqtR8MyfZ8jy8apNoN-4KFFFHywo87pfpqyBVEw,7322
1291
1302
  vellum/workflows/nodes/core/map_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1404,8 +1415,8 @@ vellum/workflows/vellum_client.py,sha256=ODrq_TSl-drX2aezXegf7pizpWDVJuTXH-j6528
1404
1415
  vellum/workflows/workflows/__init__.py,sha256=KY45TqvavCCvXIkyCFMEc0dc6jTMOUci93U2DUrlZYc,66
1405
1416
  vellum/workflows/workflows/base.py,sha256=qdZYQq-jjdr0fYT0FCfmFuI5ypE3pANupgYcOqqML0o,18884
1406
1417
  vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnadGsrSZGa7t7LpJA,2008
1407
- vellum_ai-0.12.14.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1408
- vellum_ai-0.12.14.dist-info/METADATA,sha256=pMVsOWid4kf15trT9SP0w9_wfPpc-E6i4dV8rsUAfSc,5161
1409
- vellum_ai-0.12.14.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1410
- vellum_ai-0.12.14.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1411
- vellum_ai-0.12.14.dist-info/RECORD,,
1418
+ vellum_ai-0.12.16.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1419
+ vellum_ai-0.12.16.dist-info/METADATA,sha256=dSVFM4nOL_e1hiNJX-uVrRBdO4-1wDtqhA3MZKwMLTM,5328
1420
+ vellum_ai-0.12.16.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1421
+ vellum_ai-0.12.16.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1422
+ vellum_ai-0.12.16.dist-info/RECORD,,
vellum_cli/__init__.py CHANGED
@@ -49,6 +49,11 @@ def workflows():
49
49
  @click.option("--deployment-name", type=str, help="Unique name for the Deployment")
50
50
  @click.option("--deployment-description", type=str, help="Description for the Deployment")
51
51
  @click.option("--release-tag", type=list, help="Release Tag for the Deployment", multiple=True)
52
+ @click.option(
53
+ "--dry-run",
54
+ is_flag=True,
55
+ help="Check the Workflow for errors and expected changes, without updating its state in Vellum.",
56
+ )
52
57
  def workflows_push(
53
58
  module: Optional[str],
54
59
  deploy: Optional[bool],
@@ -56,6 +61,7 @@ def workflows_push(
56
61
  deployment_name: Optional[str],
57
62
  deployment_description: Optional[str],
58
63
  release_tag: Optional[List[str]],
64
+ dry_run: Optional[bool],
59
65
  ) -> None:
60
66
  """
61
67
  Push Workflows to Vellum. If a module is provided, only the Workflow for that module will be pushed.
@@ -69,6 +75,7 @@ def workflows_push(
69
75
  deployment_name=deployment_name,
70
76
  deployment_description=deployment_description,
71
77
  release_tags=release_tag,
78
+ dry_run=dry_run,
72
79
  )
73
80
 
74
81
 
@@ -79,6 +86,11 @@ def workflows_push(
79
86
  @click.option("--deployment-name", type=str, help="Unique name for the Deployment")
80
87
  @click.option("--deployment-description", type=str, help="Description for the Deployment")
81
88
  @click.option("--release-tag", type=list, help="Release Tag for the Deployment", multiple=True)
89
+ @click.option(
90
+ "--dry-run",
91
+ is_flag=True,
92
+ help="Check the Workflow for errors and expected changes, without updating its state in Vellum.",
93
+ )
82
94
  def push_module(
83
95
  ctx: click.Context,
84
96
  deploy: Optional[bool],
@@ -86,6 +98,7 @@ def push_module(
86
98
  deployment_name: Optional[str],
87
99
  deployment_description: Optional[str],
88
100
  release_tag: Optional[List[str]],
101
+ dry_run: Optional[bool],
89
102
  ) -> None:
90
103
  """Push a specific module to Vellum"""
91
104
 
@@ -97,6 +110,7 @@ def push_module(
97
110
  deployment_name=deployment_name,
98
111
  deployment_description=deployment_description,
99
112
  release_tags=release_tag,
113
+ dry_run=dry_run,
100
114
  )
101
115
 
102
116
 
vellum_cli/config.py CHANGED
@@ -35,6 +35,8 @@ class WorkflowConfig(UniversalBaseModel):
35
35
  workflow_sandbox_id: Optional[str] = None
36
36
  ignore: Optional[Union[str, List[str]]] = None
37
37
  deployments: List[WorkflowDeploymentConfig] = field(default_factory=list)
38
+ container_image_name: Optional[str] = None
39
+ container_image_tag: Optional[str] = None
38
40
 
39
41
  def merge(self, other: "WorkflowConfig") -> "WorkflowConfig":
40
42
  self_deployment_by_id = {
@@ -68,6 +70,8 @@ class WorkflowConfig(UniversalBaseModel):
68
70
  workflow_sandbox_id=self.workflow_sandbox_id or other.workflow_sandbox_id,
69
71
  ignore=self.ignore or other.ignore,
70
72
  deployments=merged_deployments,
73
+ container_image_tag=self.container_image_tag or other.container_image_tag,
74
+ container_image_name=self.container_image_name or other.container_image_name,
71
75
  )
72
76
 
73
77
 
vellum_cli/pull.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import io
2
+ import json
2
3
  import os
3
4
  from pathlib import Path
4
5
  from uuid import UUID
@@ -14,6 +15,7 @@ from vellum_cli.config import VellumCliConfig, WorkflowConfig, load_vellum_cli_c
14
15
  from vellum_cli.logger import load_cli_logger
15
16
 
16
17
  ERROR_LOG_FILE_NAME = "error.log"
18
+ METADATA_FILE_NAME = "metadata.json"
17
19
 
18
20
 
19
21
  def _is_valid_uuid(val: Union[str, UUID, None]) -> bool:
@@ -109,6 +111,7 @@ def pull_command(
109
111
  logger.info(f"Pulling workflow into {workflow_config.module}")
110
112
  client = create_vellum_client()
111
113
  query_parameters = {}
114
+
112
115
  if include_json:
113
116
  query_parameters["include_json"] = include_json
114
117
  if exclude_code:
@@ -128,6 +131,8 @@ def pull_command(
128
131
 
129
132
  target_dir = os.path.join(os.getcwd(), *workflow_config.module.split("."))
130
133
  error_content = ""
134
+ metadata_json: Optional[dict] = None
135
+
131
136
  with zipfile.ZipFile(zip_buffer) as zip_file:
132
137
  # Delete files in target_dir that aren't in the zip file
133
138
  if os.path.exists(target_dir):
@@ -152,16 +157,26 @@ def pull_command(
152
157
  os.remove(file_path)
153
158
 
154
159
  for file_name in zip_file.namelist():
155
- target_file = os.path.join(target_dir, file_name)
156
- os.makedirs(os.path.dirname(target_file), exist_ok=True)
157
- with zip_file.open(file_name) as source, open(target_file, "w") as target:
160
+ with zip_file.open(file_name) as source:
158
161
  content = source.read().decode("utf-8")
159
162
  if file_name == ERROR_LOG_FILE_NAME:
160
163
  error_content = content
161
164
  continue
165
+ if file_name == METADATA_FILE_NAME:
166
+ metadata_json = json.loads(content)
167
+ continue
162
168
 
163
- logger.info(f"Writing to {target_file}...")
164
- target.write(content)
169
+ target_file = os.path.join(target_dir, file_name)
170
+ os.makedirs(os.path.dirname(target_file), exist_ok=True)
171
+ with open(target_file, "w") as target:
172
+ logger.info(f"Writing to {target_file}...")
173
+ target.write(content)
174
+
175
+ if metadata_json:
176
+ workflow_config.container_image_name = metadata_json.get("runner_config", {}).get("container_image_name")
177
+ workflow_config.container_image_tag = metadata_json.get("runner_config", {}).get("container_image_tag")
178
+ if workflow_config.container_image_name and not workflow_config.container_image_tag:
179
+ workflow_config.container_image_tag = "latest"
165
180
 
166
181
  if include_json:
167
182
  logger.warning(
vellum_cli/push.py CHANGED
@@ -27,6 +27,7 @@ def push_command(
27
27
  deployment_name: Optional[str] = None,
28
28
  deployment_description: Optional[str] = None,
29
29
  release_tags: Optional[List[str]] = None,
30
+ dry_run: Optional[bool] = None,
30
31
  ) -> None:
31
32
  load_dotenv()
32
33
  logger = load_cli_logger()
@@ -49,10 +50,21 @@ def push_command(
49
50
  # Remove this once we could serialize using the artifact in Vembda
50
51
  # https://app.shortcut.com/vellum/story/5585
51
52
  workflow = BaseWorkflow.load_from_module(workflow_config.module)
52
- workflow_display = get_workflow_display(base_display_class=VellumWorkflowDisplay, workflow_class=workflow)
53
+ workflow_display = get_workflow_display(
54
+ base_display_class=VellumWorkflowDisplay,
55
+ workflow_class=workflow,
56
+ dry_run=dry_run or False,
57
+ )
53
58
  exec_config = workflow_display.serialize()
59
+
60
+ container_tag = workflow_config.container_image_tag
61
+ if workflow_config.container_image_name and not workflow_config.container_image_tag:
62
+ container_tag = "latest"
63
+
54
64
  exec_config["runner_config"] = {
55
65
  "sdk_version": metadata.version("vellum-ai"),
66
+ "container_image_tag": container_tag,
67
+ "container_image_name": workflow_config.container_image_name,
56
68
  }
57
69
 
58
70
  label = snake_to_title_case(workflow_config.module.split(".")[-1])
@@ -107,11 +119,28 @@ def push_command(
107
119
  # We should check with fern if we could auto-serialize typed object fields for us
108
120
  # https://app.shortcut.com/vellum/story/5568
109
121
  deployment_config=deployment_config_serialized, # type: ignore[arg-type]
122
+ dry_run=dry_run,
110
123
  )
111
- logger.info(
112
- f"""Successfully pushed {label} to Vellum!
124
+
125
+ if dry_run:
126
+ error_messages = [str(e) for e in workflow_display.errors]
127
+ error_message = "\n".join(error_messages) if error_messages else "No errors found."
128
+ logger.info(
129
+ f"""\
130
+ # Workflow Push Report
131
+
132
+ ## Errors
133
+ {error_message}
134
+
135
+ ## Proposed Diffs
136
+ {json.dumps(response.proposed_diffs, indent=2)}
137
+ """
138
+ ) # type: ignore[attr-defined]
139
+ else:
140
+ logger.info(
141
+ f"""Successfully pushed {label} to Vellum!
113
142
  Visit at: https://app.vellum.ai/workflow-sandboxes/{response.workflow_sandbox_id}"""
114
- )
143
+ )
115
144
 
116
145
  requires_save = False
117
146
  if not workflow_config.workflow_sandbox_id:
@@ -130,6 +130,8 @@ def test_pull__sandbox_id_with_no_config(vellum_client):
130
130
  "workflow_sandbox_id": "87654321-0000-0000-0000-000000000000",
131
131
  "ignore": None,
132
132
  "deployments": [],
133
+ "container_image_tag": None,
134
+ "container_image_name": None,
133
135
  }
134
136
  ],
135
137
  }
@@ -204,6 +206,8 @@ def test_pull__workflow_deployment_with_no_config(vellum_client):
204
206
  "workflow_sandbox_id": None,
205
207
  "ignore": None,
206
208
  "deployments": [],
209
+ "container_image_tag": None,
210
+ "container_image_name": None,
207
211
  }
208
212
  ],
209
213
  }
@@ -407,7 +411,17 @@ def test_pull__sandbox_id_with_other_workflow_deployment_in_lock(vellum_client,
407
411
  new_workflow_sandbox_id = "87654321-0000-0000-0000-000000000000"
408
412
 
409
413
  # AND the workflow pull API call returns a zip file
410
- vellum_client.workflows.pull.return_value = iter([_zip_file_map({"workflow.py": "print('hello')"})])
414
+ vellum_client.workflows.pull.return_value = iter(
415
+ [
416
+ _zip_file_map(
417
+ {
418
+ "workflow.py": "print('hello')",
419
+ "metadata.json": '{"runner_config": { "container_image_name": "test", '
420
+ '"container_image_tag": "1.0" } }',
421
+ }
422
+ )
423
+ ]
424
+ )
411
425
 
412
426
  # WHEN the user runs the pull command with the new workflow sandbox id
413
427
  runner = CliRunner()
@@ -433,12 +447,16 @@ def test_pull__sandbox_id_with_other_workflow_deployment_in_lock(vellum_client,
433
447
  "release_tags": None,
434
448
  },
435
449
  ],
450
+ "container_image_name": None,
451
+ "container_image_tag": None,
436
452
  },
437
453
  {
438
454
  "module": "workflow_87654321",
439
455
  "workflow_sandbox_id": new_workflow_sandbox_id,
440
456
  "ignore": None,
441
457
  "deployments": [],
458
+ "container_image_name": "test",
459
+ "container_image_tag": "1.0",
442
460
  },
443
461
  ]
444
462
 
@@ -171,3 +171,66 @@ class ExampleWorkflow(BaseWorkflow):
171
171
 
172
172
  extracted_files = _extract_tar_gz(call_args["artifact"].read())
173
173
  assert extracted_files["workflow.py"] == workflow_py_file_content
174
+
175
+
176
+ def test_push__dry_run_option_returns_report(mock_module, vellum_client):
177
+ # GIVEN a single workflow configured
178
+ temp_dir = mock_module.temp_dir
179
+ module = mock_module.module
180
+
181
+ # AND a workflow exists in the module successfully
182
+ base_dir = os.path.join(temp_dir, *module.split("."))
183
+ os.makedirs(base_dir, exist_ok=True)
184
+ workflow_py_file_content = """\
185
+ from typing import Dict
186
+ from vellum.workflows import BaseWorkflow
187
+ from vellum.workflows.nodes import BaseNode
188
+ from vellum_ee.workflows.display.nodes import BaseNodeDisplay
189
+
190
+ class NotSupportedNode(BaseNode):
191
+ pass
192
+
193
+ class NotSupportedNodeDisplay(BaseNodeDisplay[NotSupportedNode]):
194
+ def serialize(self, display_context, **kwargs) -> Dict:
195
+ raise NotImplementedError(f"Serialization is not supported.")
196
+
197
+ class ExampleWorkflow(BaseWorkflow):
198
+ graph = NotSupportedNode
199
+ """
200
+ with open(os.path.join(temp_dir, *module.split("."), "workflow.py"), "w") as f:
201
+ f.write(workflow_py_file_content)
202
+
203
+ # AND the push API call returns successfully
204
+ vellum_client.workflows.push.return_value = WorkflowPushResponse(
205
+ workflow_sandbox_id=str(uuid4()),
206
+ proposed_diffs={
207
+ "iterable_item_added": {
208
+ "root['raw_data']['nodes'][0]": {
209
+ "id": str(uuid4()),
210
+ "type": "GENERIC",
211
+ "definition": None,
212
+ "display_data": None,
213
+ "trigger": {"id": str(uuid4()), "merge_behavior": "AWAIT_ATTRIBUTES"},
214
+ "ports": [{"id": str(uuid4()), "name": "default", "type": "DEFAULT"}],
215
+ },
216
+ },
217
+ },
218
+ )
219
+
220
+ # WHEN calling `vellum push`
221
+ runner = CliRunner(mix_stderr=True)
222
+ result = runner.invoke(cli_main, ["push", module, "--dry-run"])
223
+
224
+ # THEN it should succeed
225
+ assert result.exit_code == 0
226
+
227
+ # AND we should have called the push API with the dry-run option
228
+ vellum_client.workflows.push.assert_called_once()
229
+ call_args = vellum_client.workflows.push.call_args.kwargs
230
+ assert call_args["dry_run"] is True
231
+
232
+ # AND the report should be in the output
233
+ assert "## Errors" in result.output
234
+ # assert "Serialization is not supported." in result.output
235
+ assert "## Proposed Diffs" in result.output
236
+ assert "iterable_item_added" in result.output
@@ -1,4 +1,5 @@
1
1
  from .api_node import BaseAPINodeDisplay
2
+ from .base_node import BaseNodeDisplay
2
3
  from .code_execution_node import BaseCodeExecutionNodeDisplay
3
4
  from .conditional_node import BaseConditionalNodeDisplay
4
5
  from .error_node import BaseErrorNodeDisplay
@@ -27,6 +28,7 @@ __all__ = [
27
28
  "BaseInlineSubworkflowNodeDisplay",
28
29
  "BaseMapNodeDisplay",
29
30
  "BaseMergeNodeDisplay",
31
+ "BaseNodeDisplay",
30
32
  "BaseNoteNodeDisplay",
31
33
  "BasePromptDeploymentNodeDisplay",
32
34
  "BaseSearchNodeDisplay",
@@ -161,9 +161,9 @@ class BaseAPINodeDisplay(BaseNodeVellumDisplay[_APINodeType], Generic[_APINodeTy
161
161
  ]
162
162
  inputs.extend(additional_header_inputs)
163
163
 
164
- _, text_output_display = display_context.node_output_displays[cast(OutputReference, node.Outputs.text)]
165
- _, json_output_display = display_context.node_output_displays[cast(OutputReference, node.Outputs.json)]
166
- _, status_code_output_display = display_context.node_output_displays[
164
+ _, text_output_display = display_context.global_node_output_displays[cast(OutputReference, node.Outputs.text)]
165
+ _, json_output_display = display_context.global_node_output_displays[cast(OutputReference, node.Outputs.json)]
166
+ _, status_code_output_display = display_context.global_node_output_displays[
167
167
  cast(OutputReference, node.Outputs.status_code)
168
168
  ]
169
169