vellum-ai 1.0.4__py3-none-any.whl → 1.0.6__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 (33) hide show
  1. vellum/__init__.py +0 -6
  2. vellum/client/core/client_wrapper.py +2 -2
  3. vellum/client/types/__init__.py +0 -6
  4. vellum/client/types/organization_read.py +1 -2
  5. vellum/workflows/events/context.py +111 -0
  6. vellum/workflows/integrations/__init__.py +0 -0
  7. vellum/workflows/integrations/composio_service.py +138 -0
  8. vellum/workflows/nodes/displayable/bases/api_node/node.py +27 -9
  9. vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
  10. vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +47 -0
  11. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +63 -58
  12. vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +21 -1
  13. vellum/workflows/nodes/displayable/tool_calling_node/utils.py +124 -59
  14. vellum/workflows/types/definition.py +4 -2
  15. vellum/workflows/utils/functions.py +13 -1
  16. vellum/workflows/utils/tests/test_functions.py +32 -1
  17. {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/METADATA +1 -3
  18. {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/RECORD +26 -27
  19. vellum_cli/push.py +11 -2
  20. vellum_cli/tests/test_push.py +57 -1
  21. vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -0
  22. vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +16 -0
  23. vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +89 -0
  24. vellum/client/types/organization_limit_config.py +0 -25
  25. vellum/client/types/quota.py +0 -21
  26. vellum/client/types/vembda_service_tier_enum.py +0 -5
  27. vellum/types/organization_limit_config.py +0 -3
  28. vellum/types/quota.py +0 -3
  29. vellum/types/vembda_service_tier_enum.py +0 -3
  30. vellum/workflows/nodes/displayable/tool_calling_node/composio_service.py +0 -83
  31. {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/LICENSE +0 -0
  32. {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/WHEEL +0 -0
  33. {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,7 @@ vellum_cli/init.py,sha256=WpnMXPItPmh0f0bBGIer3p-e5gu8DUGwSArT_FuoMEw,5093
8
8
  vellum_cli/logger.py,sha256=dcM_OmgqXLo93vDYswO5ylyUQQcTfnA5GTd5tbIt3wM,1446
9
9
  vellum_cli/ping.py,sha256=p_BCCRjgPhng6JktuECtkDQLbhopt6JpmrtGoLnLJT8,1161
10
10
  vellum_cli/pull.py,sha256=udYyPlJ6VKDdh78rApNJOZgxHl82fcV6iGnRPSdX1LY,14750
11
- vellum_cli/push.py,sha256=3icrAKRu2ZbOvtVsk-m6pSM9Hau4MrmtMje-fKHMt8A,10940
11
+ vellum_cli/push.py,sha256=d1947A_QwFKSZyDimK6dEK1abf_o8e1uzjpI_A_SCwM,11459
12
12
  vellum_cli/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  vellum_cli/tests/conftest.py,sha256=wx3PlJjVB0HRf5dr2b_idOIw27WPPl0J0FNbhIJJaVk,1689
14
14
  vellum_cli/tests/test_config.py,sha256=uvKGDc8BoVyT9_H0Z-g8469zVxomn6Oi3Zj-vK7O_wU,2631
@@ -18,7 +18,7 @@ vellum_cli/tests/test_init.py,sha256=8UOc_ThfouR4ja5cCl_URuLk7ohr9JXfCnG4yka1OUQ
18
18
  vellum_cli/tests/test_main.py,sha256=qDZG-aQauPwBwM6A2DIu1494n47v3pL28XakTbLGZ-k,272
19
19
  vellum_cli/tests/test_ping.py,sha256=b3aQLd-N59_8w2rRiWqwpB1rlHaKEYVbAj1Y3hi7A-g,2605
20
20
  vellum_cli/tests/test_pull.py,sha256=hxMbW_j0weDDrkzVGpvLpFcwNQdn-fxTv4wBHeYizzc,49904
21
- vellum_cli/tests/test_push.py,sha256=wk9jQTV565TeukR0Vz-2AUQyJa3VlOJrmWxkSTX_Ptw,37860
21
+ vellum_cli/tests/test_push.py,sha256=H9ZU0_E-I1F98SBvj-I_1ooe3RzOlhMTTmEFg6CRrYY,40384
22
22
  vellum_ee/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  vellum_ee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  vellum_ee/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -36,7 +36,7 @@ vellum_ee/workflows/display/nodes/utils.py,sha256=sloya5TpXsnot1HURc9L51INwflRqU
36
36
  vellum_ee/workflows/display/nodes/vellum/__init__.py,sha256=nUIgH2s0-7IbQRNrBhLPyRNe8YIrx3Yo9HeeW-aXXFk,1668
37
37
  vellum_ee/workflows/display/nodes/vellum/api_node.py,sha256=lGS-C9cd-nlYVZuaXmArJUJFdwPUMLNJwf1bpa7Ufys,9400
38
38
  vellum_ee/workflows/display/nodes/vellum/base_adornment_node.py,sha256=FHhPoGmmny4Xcxi2pm12Sk3ZOREanWEVrOWcjRhncH4,6337
39
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=6lavdBw297GwAQqyxjnPUtx5pHv6k5V9Vkuq7s2D0TM,4508
39
+ vellum_ee/workflows/display/nodes/vellum/code_execution_node.py,sha256=zG0u5Wvvo8B6yM0JSWtDdLxsULus3VD3cxYVOHRAgAU,4635
40
40
  vellum_ee/workflows/display/nodes/vellum/conditional_node.py,sha256=OEw8QRPliL4P8J6oEZdQH8Oc-0u7aFa_Jqx0RyL6F-M,11656
41
41
  vellum_ee/workflows/display/nodes/vellum/error_node.py,sha256=YhMsi2TG1zSR8E7IpxzzSncOyVLcvqTuGa3mr4RqHd8,2364
42
42
  vellum_ee/workflows/display/nodes/vellum/final_output_node.py,sha256=zo-nalsuayMqeb2GwR2OB9SFK3y2U5aG-rtwrsjdasQ,3089
@@ -53,7 +53,7 @@ vellum_ee/workflows/display/nodes/vellum/subworkflow_deployment_node.py,sha256=w
53
53
  vellum_ee/workflows/display/nodes/vellum/templating_node.py,sha256=TdIJWh2l8p4tw7ejRexGOFQKnviirUqie3WYwsrVQ4g,3339
54
54
  vellum_ee/workflows/display/nodes/vellum/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  vellum_ee/workflows/display/nodes/vellum/tests/test_api_node.py,sha256=DQAtsabvn6BE6xWwKNHzMOppzoy1-1dssNnrwbHUdRU,1490
56
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=ZasoqG8FmqnZDj2FfL5BGPq9fafOTJqV_4xjOKLi1gc,5434
56
+ vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py,sha256=JFjhOABsFwR1LHZBSU5O7uzPdAuvkOvc0qNDsEH_CSY,6021
57
57
  vellum_ee/workflows/display/nodes/vellum/tests/test_error_node.py,sha256=540FoWMpJ3EN_DPjHsr9ODJWCRVcUa5hZBn-5T2GiHU,1665
58
58
  vellum_ee/workflows/display/nodes/vellum/tests/test_inline_subworkflow_node.py,sha256=SKOYan-dxY4gsO0R4JyQUyWrABHBN8XImKw9Eeo4wGo,3535
59
59
  vellum_ee/workflows/display/nodes/vellum/tests/test_note_node.py,sha256=uiMB0cOxKZzos7YKnj4ef4DFa2bOvZJWIv-hfbUV6Go,1218
@@ -94,6 +94,7 @@ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_search_node_
94
94
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_subworkflow_deployment_serialization.py,sha256=XWrhHg_acLsRHwjstBAii9Pmes9oXFtAUWSAVF1oSBc,11225
95
95
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_templating_node_serialization.py,sha256=V8b6gKghLlO7PJI8xeNdnfn8aII0W_IFQvSQBQM62UQ,7721
96
96
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_terminal_node_serialization.py,sha256=hDWtKXmGI1CKhTwTNqpu_d5RkE5n7SolMLtgd87KqTI,3856
97
+ vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py,sha256=gonapBCyDDt3qc7U02PCuKyPS8f3YiSAZ7QD86CH1Fw,3794
97
98
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_inline_workflow_serialization.py,sha256=4t1lkN2nsZF6lFqP6QnskUQWJlhasF8C2_f6atzk8ZY,26298
98
99
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_serialization.py,sha256=1hoakUkh5kHZYIfY1moJBZYzXgAafkgWsIf4lmZ12vg,9521
99
100
  vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_workflow_deployment_serialization.py,sha256=mova0sPD3evHiHIN1O0VynxlCp-uOcEIKve5Pd_oCDg,4069
@@ -139,12 +140,12 @@ vellum_ee/workflows/tests/test_display_meta.py,sha256=PkXJVnMZs9GNooDkd59n4YTBAX
139
140
  vellum_ee/workflows/tests/test_serialize_module.py,sha256=EVrCRAP0lpvd0GIDlg2tnGfJzDNooNDXPfGFPLAqmbI,1870
140
141
  vellum_ee/workflows/tests/test_server.py,sha256=SsOkS6sGO7uGC4mxvk4iv8AtcXs058P9hgFHzTWmpII,14519
141
142
  vellum_ee/workflows/tests/test_virtual_files.py,sha256=TJEcMR0v2S8CkloXNmCHA0QW0K6pYNGaIjraJz7sFvY,2762
142
- vellum/__init__.py,sha256=-Ou4HwpSHaHMrNOXucTQDBqLeF0Hf3SkNV7ZXbm-9BY,43243
143
+ vellum/__init__.py,sha256=tD6Fm-ml3pDVFPucRvSr5p0uRoEodHXxs6FHATqQU5o,43103
143
144
  vellum/client/README.md,sha256=Dle5iytCXxP1pNeNd7uZyhFo0rl7tp7vU7s8gmi10OQ,4863
144
145
  vellum/client/__init__.py,sha256=KmkyOgReuTsjmXF3WC_dPQ9QqJgYrB3Sr8_LcSUIQyI,125258
145
146
  vellum/client/core/__init__.py,sha256=SQ85PF84B9MuKnBwHNHWemSGuy-g_515gFYNFhvEE0I,1438
146
147
  vellum/client/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
147
- vellum/client/core/client_wrapper.py,sha256=im_0U7PdkUrr4begxJ1IwohjLbmzi8c2diHiklFefHE,2383
148
+ vellum/client/core/client_wrapper.py,sha256=QsKeKLYWV6cj1EDrHG6sVVmh4h2ol3aw7P3Lckn25Wk,2383
148
149
  vellum/client/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
149
150
  vellum/client/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
150
151
  vellum/client/core/http_client.py,sha256=cKs2w0ybDBk1wHQf-fTALm_MmvaMe3cZKcYJxqmCxkE,19539
@@ -214,7 +215,7 @@ vellum/client/resources/workspace_secrets/__init__.py,sha256=FTtvy8EDg9nNNg9WCat
214
215
  vellum/client/resources/workspace_secrets/client.py,sha256=l1FOj0f-IB5_oQ7iWiHopFK3lDXBqiaIc9g10W9PHFU,8381
215
216
  vellum/client/resources/workspaces/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
216
217
  vellum/client/resources/workspaces/client.py,sha256=61eFS8USOtHf4cFoT3dZmAMs6KGAVPbXjAolws2ftsQ,3683
217
- vellum/client/types/__init__.py,sha256=QRZCQZxK7WN5zFYOV0eCdhKfVvYFDfDgkux3CL9S9qc,65478
218
+ vellum/client/types/__init__.py,sha256=rmRNYcVM3VMP28jEp-ChnFQKPgHJxSLoA_07CSL_jyc,65257
218
219
  vellum/client/types/ad_hoc_execute_prompt_event.py,sha256=bCjujA2XsOgyF3bRZbcEqV2rOIymRgsLoIRtZpB14xg,607
219
220
  vellum/client/types/ad_hoc_expand_meta.py,sha256=1gv-NCsy_6xBYupLvZH979yf2VMdxAU-l0y0ynMKZaw,1331
220
221
  vellum/client/types/ad_hoc_fulfilled_prompt_execution_meta.py,sha256=oDG60TpwK1YNSKhRsBbiP2O3ZF9PKR-M9chGIfKw4R4,1004
@@ -499,8 +500,7 @@ vellum/client/types/open_ai_vectorizer_text_embedding_3_small.py,sha256=T_-P7qGj
499
500
  vellum/client/types/open_ai_vectorizer_text_embedding_3_small_request.py,sha256=-lwNeWj7ExP-JLncUp1Uyd20FxweVIDu-aEnenPB98A,841
500
501
  vellum/client/types/open_ai_vectorizer_text_embedding_ada_002.py,sha256=c4vNlR6lRvUjq-67M06sroDMNMG_qC4JUBqwmKEJQ2I,812
501
502
  vellum/client/types/open_ai_vectorizer_text_embedding_ada_002_request.py,sha256=FdpkkNBGgRwfqFjBwpfH4t2zKIM0pIYminX2iZQUzvY,841
502
- vellum/client/types/organization_limit_config.py,sha256=-RXRY_Rpt8hHbJtNxJZvfKo1cUEnlvvGCRhk401jLU0,956
503
- vellum/client/types/organization_read.py,sha256=c5Wl5KY6plC7DuPJq6zAK_UTH2XVhT7H8OdEtxLqN98,854
503
+ vellum/client/types/organization_read.py,sha256=QDFpX4pZCjGSRXZ6FF65SDzRxFqkI87DEEUXtaVoTAs,837
504
504
  vellum/client/types/paginated_container_image_read_list.py,sha256=7lwIgs1q7Z0xDYPGWPnjSNC1kU_peu79CotzaaQfRdA,801
505
505
  vellum/client/types/paginated_deployment_release_tag_read_list.py,sha256=hp7D74CxPY14dEPRZ-fnTCwp63upxkYquL1e74oYXh4,826
506
506
  vellum/client/types/paginated_document_index_read_list.py,sha256=bO7pm3KCZi5LDO17YXgr_lUF9SRdAfMu6wOutX91ANw,797
@@ -540,7 +540,6 @@ vellum/client/types/prompt_request_json_input.py,sha256=vLhwvCWL_yjVfDzT4921xK4Q
540
540
  vellum/client/types/prompt_request_string_input.py,sha256=8GSFhtN3HeYssbDRY7B5SCh5Qrp67340D9c3oINpCmw,714
541
541
  vellum/client/types/prompt_settings.py,sha256=gITevU-SWiStXFKLfpwG5dQJ-bic5CxnM0OHsT9KR0s,635
542
542
  vellum/client/types/prompt_version_build_config_sandbox.py,sha256=SXU62bAueVpoWo178bLIMYi8aNVpsBGTtOQxHcg6Dmo,678
543
- vellum/client/types/quota.py,sha256=e-Y1YHvd6ZDFDvfJdMs5sA9JQh8pl2Ep7bFrzB5LjNI,635
544
543
  vellum/client/types/raw_prompt_execution_overrides_request.py,sha256=x4Chkm_NxXySOEyA6s6J_mhhiM91KCcQbu6pQETB8RI,927
545
544
  vellum/client/types/reducto_chunker_config.py,sha256=by_Dj0hZPkLQAf7l1KAudRB8X2XnlfHiRTsyiR-DTRY,654
546
545
  vellum/client/types/reducto_chunker_config_request.py,sha256=RnulU2a_PUtvRE2qhARQhsCkWI--K_MYkobzLNRGEz4,661
@@ -738,7 +737,6 @@ vellum/client/types/vellum_variable.py,sha256=BDcccISJsycsrW3E5A5RTIOfxS_83ofkle
738
737
  vellum/client/types/vellum_variable_extensions.py,sha256=PsrRo0STOKhxrkSFRrOXCPlf1x5Uxpy3vVMJz02O20E,685
739
738
  vellum/client/types/vellum_variable_type.py,sha256=epYV-PY0NkvUntKzgzqelWMq9Dzmh7Y32c19GB_2mh0,411
740
739
  vellum/client/types/vellum_workflow_execution_event.py,sha256=H8rP3_6a6LTvemoHfsmI2THpTRf8PYrZQcjoeTzf-44,934
741
- vellum/client/types/vembda_service_tier_enum.py,sha256=zIQq6j0BNu1niKkK_G4a_hE5kqkZ5s43k4g5Zj2qiAI,161
742
740
  vellum/client/types/workflow_deployment_event_executions_response.py,sha256=_X9hfsfpCf7DaQpfg83AAcbadZxEVi1NKNf2PZ7PRY8,1190
743
741
  vellum/client/types/workflow_deployment_history_item.py,sha256=w5yqAtmYWw8kTljYEVBa8-fLxKsrBA8Img7IC3GjZG4,1226
744
742
  vellum/client/types/workflow_deployment_parent_context.py,sha256=QwGpZnSNX6RCfkjbxmfln8QefrP8lFHkZ1DAC-oj9-Q,1699
@@ -1199,7 +1197,6 @@ vellum/types/open_ai_vectorizer_text_embedding_3_small.py,sha256=5gsPjLdttszz8Nq
1199
1197
  vellum/types/open_ai_vectorizer_text_embedding_3_small_request.py,sha256=kqph8wL-8Cn6vVoJMEYIkFc4kvERvF3pzHjUQxFZAOM,187
1200
1198
  vellum/types/open_ai_vectorizer_text_embedding_ada_002.py,sha256=VTile8qzbXfjXgALK7Lr58U4sWGcEOWJ830gdHNpJhY,179
1201
1199
  vellum/types/open_ai_vectorizer_text_embedding_ada_002_request.py,sha256=345s9jJCbxvgIWb_ejW2pVWOz51d4NnkiyWB4J0qQpE,187
1202
- vellum/types/organization_limit_config.py,sha256=wJoKIE_HPe0jbUVQx18QCnNVdAkhK05TAZxu8uSPtQY,163
1203
1200
  vellum/types/organization_read.py,sha256=3VdzuCxr_jNaXSL8P_Imk6vNK6BaJ6b1TX1IHKMiQ_Y,155
1204
1201
  vellum/types/paginated_container_image_read_list.py,sha256=dKnIbX8_sYqWo6tS0W694jojAWKybB8pe9Zw8-hvlo8,173
1205
1202
  vellum/types/paginated_deployment_release_tag_read_list.py,sha256=B-fCqNhU5KiYqIvnrybZr7MZCyOBmihHkrDsEhEzOjg,180
@@ -1240,7 +1237,6 @@ vellum/types/prompt_request_json_input.py,sha256=OlXiUPchxe184SWbmIvbmARpY9YWPi8
1240
1237
  vellum/types/prompt_request_string_input.py,sha256=1V-fTtuyhEw5H4EpqIkCqX7aHGJivUzzc_LMeszPjnc,165
1241
1238
  vellum/types/prompt_settings.py,sha256=6_AzrH73lBHSDxKxidI6zhDjAeWh_nZcaIGlrzJhypU,153
1242
1239
  vellum/types/prompt_version_build_config_sandbox.py,sha256=thz3Ty7FMZr1NWrrtPS1QN32kPpZo9hg9VIN6c6biuc,173
1243
- vellum/types/quota.py,sha256=hhIYDiHDilEV0FJ7LSD-TTzLaDL0kfuJIA9tReithZg,143
1244
1240
  vellum/types/raw_prompt_execution_overrides_request.py,sha256=NvCoHH8ehO0UortbDuDQvwOdxQzXw0_PMGsJc7DtvoA,176
1245
1241
  vellum/types/reducto_chunker_config.py,sha256=6hu2m_WTavxTfKs46BWZGiuOsLE4HYgoP-VdDGS6KTI,160
1246
1242
  vellum/types/reducto_chunker_config_request.py,sha256=KjIZYQu27OIA--0e6RjgUwWmY3iE8s9rlehdhfZRzhQ,168
@@ -1438,7 +1434,6 @@ vellum/types/vellum_variable.py,sha256=rmjuD8hMydLF480--5tWlHbvu6qNaz0Hs9bSrJ8DP
1438
1434
  vellum/types/vellum_variable_extensions.py,sha256=wwKDv_yxtP7gQmfz5HF3zab-FOLt-0OMUYIsHgvrOC0,164
1439
1435
  vellum/types/vellum_variable_type.py,sha256=d3Zkf0ued1QrO90CMGTUnlyg2xT8nKGM4Nv6-L6W_Pg,158
1440
1436
  vellum/types/vellum_workflow_execution_event.py,sha256=EI7XANl17nOtYskD9b4FmdejkKsK7cFDwe9asr2xGC8,169
1441
- vellum/types/vembda_service_tier_enum.py,sha256=IMC8Ftntkplp7lt1OIqPZjFP_1C3t0-EbspoyWXgFQ4,162
1442
1437
  vellum/types/workflow_deployment_event_executions_response.py,sha256=375mHiA7sucHeFSr0LlaLcVgV7F2QicMZaQiOrC5yOg,183
1443
1438
  vellum/types/workflow_deployment_history_item.py,sha256=dp5pwzOVO83KPwAbYeO3NXlKKHswGa0MTGX82nIhAIg,170
1444
1439
  vellum/types/workflow_deployment_parent_context.py,sha256=kB0eeRXagHqRnuDVA9B8aDlvBZVOmQ702JYXD8evh24,172
@@ -1548,6 +1543,7 @@ vellum/workflows/environment/environment.py,sha256=Ck3RPKXJvtMGx_toqYQQQF-ZwXm5i
1548
1543
  vellum/workflows/errors/__init__.py,sha256=tWGPu5xyAU8gRb8_bl0fL7OfU3wxQ9UH6qVwy4X4P_Q,113
1549
1544
  vellum/workflows/errors/types.py,sha256=nUWuniEfrhdtb-_2GzoDGlYnSJ_yuNUGjVkaKLNr-rM,4049
1550
1545
  vellum/workflows/events/__init__.py,sha256=V4mh766fyA70WvHelm9kfVZGrUgEKcJ9tJt8EepfQYU,832
1546
+ vellum/workflows/events/context.py,sha256=81367zwg23PUBsrDJyF0rbcswNOIMTwWveAjmqy9GcM,4501
1551
1547
  vellum/workflows/events/node.py,sha256=n3JdlCmeZ6tFTu_x5tu1oSCe5EBE8B1Cy3CzSWK5B08,5453
1552
1548
  vellum/workflows/events/stream.py,sha256=xhXJTZirFi0xad5neAQNogrIQ4h47fpnKbVC3vCM5Js,889
1553
1549
  vellum/workflows/events/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1600,6 +1596,8 @@ vellum/workflows/inputs/__init__.py,sha256=AbFEteIYEvCb14fM3EK7bhM-40-6s494rSlIh
1600
1596
  vellum/workflows/inputs/base.py,sha256=w3owT5B3rLBmIj-v-jL2l-HD4yd3hXK9RmHVd557BpA,5126
1601
1597
  vellum/workflows/inputs/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1602
1598
  vellum/workflows/inputs/tests/test_inputs.py,sha256=lioA8917mFLYq7Ml69UNkqUjcWbbxkxnpIEJ4FBaYBk,2206
1599
+ vellum/workflows/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1600
+ vellum/workflows/integrations/composio_service.py,sha256=p3V9l7OlOV1zZK9aIgvfhLiDsxbxeSVZJ3MBSedo7Pw,5008
1603
1601
  vellum/workflows/logging.py,sha256=_a217XogktV4Ncz6xKFz7WfYmZAzkfVRVuC0rWob8ls,437
1604
1602
  vellum/workflows/nodes/__init__.py,sha256=aVdQVv7Y3Ro3JlqXGpxwaU2zrI06plDHD2aumH5WUIs,1157
1605
1603
  vellum/workflows/nodes/bases/__init__.py,sha256=cniHuz_RXdJ4TQgD8CBzoiKDiPxg62ErdVpCbWICX64,58
@@ -1637,7 +1635,9 @@ vellum/workflows/nodes/displayable/api_node/tests/__init__.py,sha256=47DEQpj8HBS
1637
1635
  vellum/workflows/nodes/displayable/api_node/tests/test_api_node.py,sha256=qp6v-MrgpNVDt16Kp0EOyeQx3LpzflTlaNSL1EYZ1nE,9185
1638
1636
  vellum/workflows/nodes/displayable/bases/__init__.py,sha256=0mWIx3qUrzllV7jqt7wN03vWGMuI1WrrLZeMLT2Cl2c,304
1639
1637
  vellum/workflows/nodes/displayable/bases/api_node/__init__.py,sha256=1jwx4WC358CLA1jgzl_UD-rZmdMm2v9Mps39ndwCD7U,64
1640
- vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=JDYe21Ou8WGkVRxO5RYdW10yld-IYv3Ugt13L8f6-s0,5247
1638
+ vellum/workflows/nodes/displayable/bases/api_node/node.py,sha256=jkv803kEPlK4lrzk2oWU0J3t6vyFeQkI9ap9RCb1qt0,6183
1639
+ vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1640
+ vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py,sha256=Z39BZn-QgGNCKcwbOwhMpAopwgX6J3v7ulCA6TKyphE,1587
1641
1641
  vellum/workflows/nodes/displayable/bases/base_prompt_node/__init__.py,sha256=Org3xTvgp1pA0uUXFfnJr29D3HzCey2lEdYF4zbIUgo,70
1642
1642
  vellum/workflows/nodes/displayable/bases/base_prompt_node/node.py,sha256=EJsGaz8Umss6-JWGGYbJp93ZHx3IlZQWAySlHAdNYtY,4466
1643
1643
  vellum/workflows/nodes/displayable/bases/inline_prompt_node/__init__.py,sha256=Hl35IAoepRpE-j4cALaXVJIYTYOF3qszyVbxTj4kS1s,82
@@ -1695,14 +1695,13 @@ vellum/workflows/nodes/displayable/tests/test_search_node_error_handling.py,sha2
1695
1695
  vellum/workflows/nodes/displayable/tests/test_search_node_wth_text_output.py,sha256=VepO5z1277c1y5N6LLIC31nnWD1aak2m5oPFplfJHHs,6935
1696
1696
  vellum/workflows/nodes/displayable/tests/test_text_prompt_deployment_node.py,sha256=dc3EEn1sOICpr3GdS8eyeFtExaGwWWcw9eHSdkRhQJU,2584
1697
1697
  vellum/workflows/nodes/displayable/tool_calling_node/__init__.py,sha256=3n0-ysmFKsr40CVxPthc0rfJgqVJeZuUEsCmYudLVRg,117
1698
- vellum/workflows/nodes/displayable/tool_calling_node/composio_service.py,sha256=C53hgStA-BHe7EFu4j_N650LqsLBOiMovs_nGW8J7nc,2669
1699
1698
  vellum/workflows/nodes/displayable/tool_calling_node/node.py,sha256=BRA6YRCEOk0Nw3DCIT13WY7WCZ7Gx30s-egJe_md0FA,6504
1700
1699
  vellum/workflows/nodes/displayable/tool_calling_node/state.py,sha256=oQg_GAtc349nPB5BL_oeDYYD7q1qSDPAqjj8iA8OoAw,215
1701
1700
  vellum/workflows/nodes/displayable/tool_calling_node/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1702
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=BOb4LTAELS-cX5xPH8fH4E2CKl1IBBjiOBYhQl51PpI,4758
1701
+ vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py,sha256=UV0vZpU7-_tHcwnIq36WKwHrJXNurU4bdC3rfaw8eoU,4804
1703
1702
  vellum/workflows/nodes/displayable/tool_calling_node/tests/test_node.py,sha256=raY_E5-EgtYNXEPbO2I-Ythe4YeuFdGsXGZ_BAN98uI,7979
1704
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=eu6WTyENhGLg9pGp_j69rysZjf_qiQXske1YdZn9PzU,1718
1705
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=jMXStMKr3BFfQKdQa9hFFxI7RQp8eAMAknpqkbY0Nk0,13344
1703
+ vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py,sha256=aCK4TDcD4TcgoYbOs712qFiNCVRVffCb5HZCZQGDiUc,2449
1704
+ vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=fOoAr_TTZ5Sjuc2GSyKz87vnfx-RZ6B7BxtQmPdxqfE,16191
1706
1705
  vellum/workflows/nodes/experimental/README.md,sha256=eF6DfIL8t-HbF9-mcofOMymKrraiBHDLKTlnBa51ZiE,284
1707
1706
  vellum/workflows/nodes/experimental/__init__.py,sha256=jCQgvZEknXKfuNhGSOou4XPfrPqZ1_XBj5F0n0fgiWM,106
1708
1707
  vellum/workflows/nodes/experimental/openai_chat_completion_node/__init__.py,sha256=lsyD9laR9p7kx5-BXGH2gUTM242UhKy8SMV0SR6S2iE,90
@@ -1750,7 +1749,7 @@ vellum/workflows/tests/test_undefined.py,sha256=zMCVliCXVNLrlC6hEGyOWDnQADJ2g83y
1750
1749
  vellum/workflows/types/__init__.py,sha256=KxUTMBGzuRCfiMqzzsykOeVvrrkaZmTTo1a7SLu8gRM,68
1751
1750
  vellum/workflows/types/code_execution_node_wrappers.py,sha256=3MNIoFZKzVzNS5qFLVuDwMV17QJw72zo7NRf52yMq5A,3074
1752
1751
  vellum/workflows/types/core.py,sha256=6MW_BRLcx4oEJpItQWQa64xfCrsk76suZSsMKKEsJLg,1314
1753
- vellum/workflows/types/definition.py,sha256=Oq2E5Ae6AsvqAOLWzP0k6H5M7su00JZP_QFhlV2rz7s,3721
1752
+ vellum/workflows/types/definition.py,sha256=K1evpjoxHpZysx8HBcA-IY0fS_p1afS4QcvG2HZ-r0o,3815
1754
1753
  vellum/workflows/types/generics.py,sha256=8jptbEx1fnJV0Lhj0MpCJOT6yNiEWeTOYOwrEAb5CRU,1576
1755
1754
  vellum/workflows/types/stack.py,sha256=h7NE0vXR7l9DevFBIzIAk1Zh59K-kECQtDTKOUunwMY,1314
1756
1755
  vellum/workflows/types/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1758,11 +1757,11 @@ vellum/workflows/types/tests/test_definition.py,sha256=c3GczPtWxuH3BOULwZacxYTQl
1758
1757
  vellum/workflows/types/tests/test_utils.py,sha256=UnZog59tR577mVwqZRqqWn2fScoOU1H6up0EzS8zYhw,2536
1759
1758
  vellum/workflows/types/utils.py,sha256=mTctHITBybpt4855x32oCKALBEcMNLn-9cCmfEKgJHQ,6498
1760
1759
  vellum/workflows/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1761
- vellum/workflows/utils/functions.py,sha256=Gi08SYaTfLF04slbY_YcfP5erIMwtFgtYa59vhWez9k,7195
1760
+ vellum/workflows/utils/functions.py,sha256=4pHaaaOXwvYTLVThTkLYpESBkzNKuZdiyRBGRpcWxqY,7623
1762
1761
  vellum/workflows/utils/names.py,sha256=QLUqfJ1tmSEeUwBKTTiv_Qk3QGbInC2RSmlXfGXc8Wo,380
1763
1762
  vellum/workflows/utils/pydantic_schema.py,sha256=eR_bBtY-T0pttJP-ARwagSdCOnwPUtiT3cegm2lzDTQ,1310
1764
1763
  vellum/workflows/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1765
- vellum/workflows/utils/tests/test_functions.py,sha256=6AQt2Wu2Uj6UAxYzwi1Zd0YL4-ZOL47Yc_X3iE8ol9U,18445
1764
+ vellum/workflows/utils/tests/test_functions.py,sha256=xIk1r0XwbPcbQLHwN5NFUrztfKa3fGtUnfjvhOrYNNg,19449
1766
1765
  vellum/workflows/utils/tests/test_names.py,sha256=aOqpyvMsOEK_9mg_-yaNxQDW7QQfwqsYs37PseyLhxw,402
1767
1766
  vellum/workflows/utils/tests/test_uuids.py,sha256=i77ABQ0M3S-aFLzDXHJq_yr5FPkJEWCMBn1HJ3DObrE,437
1768
1767
  vellum/workflows/utils/tests/test_vellum_variables.py,sha256=vbnKgm41aB5OXlO-ZIPbhQ6xDiZkT8KMxCLqz4zocWY,1791
@@ -1775,8 +1774,8 @@ vellum/workflows/workflows/event_filters.py,sha256=GSxIgwrX26a1Smfd-6yss2abGCnad
1775
1774
  vellum/workflows/workflows/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1776
1775
  vellum/workflows/workflows/tests/test_base_workflow.py,sha256=ptMntHzVyy8ZuzNgeTuk7hREgKQ5UBdgq8VJFSGaW4Y,20832
1777
1776
  vellum/workflows/workflows/tests/test_context.py,sha256=VJBUcyWVtMa_lE5KxdhgMu0WYNYnUQUDvTF7qm89hJ0,2333
1778
- vellum_ai-1.0.4.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1779
- vellum_ai-1.0.4.dist-info/METADATA,sha256=a7IAzLZ3FlACUej3-52w1DORsAgXM5tpzkLJ8XAgnIQ,5649
1780
- vellum_ai-1.0.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1781
- vellum_ai-1.0.4.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1782
- vellum_ai-1.0.4.dist-info/RECORD,,
1777
+ vellum_ai-1.0.6.dist-info/LICENSE,sha256=hOypcdt481qGNISA784bnAGWAE6tyIf9gc2E78mYC3E,1574
1778
+ vellum_ai-1.0.6.dist-info/METADATA,sha256=EmLX2EVjbQ5g5W-PpqXN-5TPUhFu6L5KXLRLSB0st_s,5554
1779
+ vellum_ai-1.0.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1780
+ vellum_ai-1.0.6.dist-info/entry_points.txt,sha256=HCH4yc_V3J_nDv3qJzZ_nYS8llCHZViCDP1ejgCc5Ak,42
1781
+ vellum_ai-1.0.6.dist-info/RECORD,,
vellum_cli/push.py CHANGED
@@ -16,6 +16,7 @@ from vellum.resources.workflows.client import OMIT
16
16
  from vellum.workflows.vellum_client import create_vellum_client
17
17
  from vellum_cli.config import DEFAULT_WORKSPACE_CONFIG, WorkflowConfig, WorkflowDeploymentConfig, load_vellum_cli_config
18
18
  from vellum_cli.logger import handle_cli_error, load_cli_logger
19
+ from vellum_ee.workflows.display.nodes.utils import to_kebab_case
19
20
  from vellum_ee.workflows.display.workflows.base_workflow_display import BaseWorkflowDisplay
20
21
 
21
22
 
@@ -131,9 +132,10 @@ def push_command(
131
132
  )
132
133
 
133
134
  try:
135
+ module_name = workflow_config.module.split(".")[-1]
134
136
  deployment_config = WorkflowPushDeploymentConfigRequest(
135
137
  label=deployment_label or cli_deployment_config.label,
136
- name=deployment_name or cli_deployment_config.name,
138
+ name=deployment_name or cli_deployment_config.name or to_kebab_case(module_name),
137
139
  description=deployment_description or cli_deployment_config.description,
138
140
  release_tags=release_tags or cli_deployment_config.release_tags,
139
141
  )
@@ -274,7 +276,14 @@ Visit at: {base_url}/workflow-sandboxes/{response.workflow_sandbox_id}"""
274
276
  workflow_config.workflow_sandbox_id = response.workflow_sandbox_id
275
277
 
276
278
  if not workflow_config.deployments and response.workflow_deployment_id:
277
- workflow_config.deployments.append(WorkflowDeploymentConfig(id=UUID(response.workflow_deployment_id)))
279
+ stored_deployment_config = WorkflowDeploymentConfig(
280
+ id=UUID(response.workflow_deployment_id),
281
+ label=deployment_config.label if deploy else None,
282
+ name=deployment_config.name if deploy else None,
283
+ description=deployment_config.description if deploy else None,
284
+ release_tags=deployment_config.release_tags if deploy else None,
285
+ )
286
+ workflow_config.deployments.append(stored_deployment_config)
278
287
 
279
288
  config.save()
280
289
  logger.info("Updated vellum.lock.json file.")
@@ -13,6 +13,7 @@ from vellum.client.core.api_error import ApiError
13
13
  from vellum.client.types.workflow_push_response import WorkflowPushResponse
14
14
  from vellum.utils.uuid import is_valid_uuid
15
15
  from vellum_cli import main as cli_main
16
+ from vellum_ee.workflows.display.nodes.utils import to_kebab_case
16
17
 
17
18
 
18
19
  def _extract_tar_gz(tar_gz_bytes: bytes) -> dict[str, str]:
@@ -391,7 +392,9 @@ def test_push__deployment(mock_module, vellum_client, base_command):
391
392
  assert json.loads(call_args["exec_config"])["workflow_raw_data"]["definition"]["name"] == "ExampleWorkflow"
392
393
  assert is_valid_uuid(call_args["workflow_sandbox_id"])
393
394
  assert call_args["artifact"].name == expected_artifact_name
394
- assert call_args["deployment_config"] == "{}"
395
+ expected_deployment_name = to_kebab_case(module.split(".")[-1])
396
+ deployment_config = json.loads(call_args["deployment_config"])
397
+ assert deployment_config["name"] == expected_deployment_name
395
398
 
396
399
  extracted_files = _extract_tar_gz(call_args["artifact"].read())
397
400
  assert extracted_files["workflow.py"] == workflow_py_file_content
@@ -1039,3 +1042,56 @@ def test_push__deploy_with_release_tags_success(mock_module, vellum_client):
1039
1042
  # AND should show success message
1040
1043
  assert "Successfully pushed" in result.output
1041
1044
  assert "Updated vellum.lock.json file." in result.output
1045
+
1046
+
1047
+ def test_push__deploy_stores_deployment_config_in_lock_file(mock_module, vellum_client):
1048
+ # GIVEN a single workflow
1049
+ temp_dir = mock_module.temp_dir
1050
+ module = mock_module.module
1051
+
1052
+ # AND a workflow exists in the module successfully
1053
+ _ensure_workflow_py(temp_dir, module)
1054
+
1055
+ # AND the push API call returns successfully with a deployment
1056
+ workflow_deployment_id = str(uuid4())
1057
+ vellum_client.workflows.push.return_value = WorkflowPushResponse(
1058
+ workflow_sandbox_id=str(uuid4()),
1059
+ workflow_deployment_id=workflow_deployment_id,
1060
+ )
1061
+
1062
+ # WHEN calling `vellum workflows push --deploy` for the first time
1063
+ runner = CliRunner()
1064
+ result = runner.invoke(cli_main, ["workflows", "push", module, "--deploy"])
1065
+
1066
+ # THEN it should succeed
1067
+ assert result.exit_code == 0, result.output
1068
+
1069
+ # AND the deployment config should be stored in the lock file with the deployment ID and module name
1070
+ with open(os.path.join(temp_dir, "vellum.lock.json")) as f:
1071
+ lock_data = json.loads(f.read())
1072
+ assert len(lock_data["workflows"][0]["deployments"]) == 1
1073
+ deployment = lock_data["workflows"][0]["deployments"][0]
1074
+ assert str(deployment["id"]) == workflow_deployment_id
1075
+ assert deployment["name"] == "test-push-deploy-stores-deployment-config-in-lock-file"
1076
+ assert deployment.get("label") is None
1077
+ assert deployment.get("description") is None
1078
+ assert deployment.get("release_tags") is None
1079
+
1080
+ # AND when we do a second push
1081
+ vellum_client.workflows.push.reset_mock()
1082
+ vellum_client.workflows.push.return_value = WorkflowPushResponse(
1083
+ workflow_sandbox_id=str(uuid4()),
1084
+ workflow_deployment_id=workflow_deployment_id,
1085
+ )
1086
+
1087
+ result = runner.invoke(cli_main, ["workflows", "push", module, "--deploy"])
1088
+
1089
+ # THEN it should succeed
1090
+ assert result.exit_code == 0, result.output
1091
+
1092
+ # AND we should have called the push API with the module name as deployment name
1093
+ vellum_client.workflows.push.assert_called_once()
1094
+ call_args = vellum_client.workflows.push.call_args.kwargs
1095
+ deployment_config_str = call_args["deployment_config"]
1096
+ deployment_config = json.loads(deployment_config_str)
1097
+ assert deployment_config["name"] == "test-push-deploy-stores-deployment-config-in-lock-file"
@@ -40,6 +40,8 @@ class BaseCodeExecutionNodeDisplay(BaseNodeDisplay[_CodeExecutionNodeType], Gene
40
40
  node_filepath=node_file_path,
41
41
  script_filepath=filepath,
42
42
  )
43
+ if not file_code:
44
+ raise Exception(f"Filepath '{filepath}' of node {node.__name__} does not exist")
43
45
  code_value = file_code
44
46
  else:
45
47
  code_value = ""
@@ -153,3 +153,19 @@ def test_serialize_node__with_unresolved_secret_references(vellum_client):
153
153
  # warnings = list(workflow_display.errors)
154
154
  # assert len(warnings) == 1
155
155
  # assert "Failed to resolve secret reference 'MY_API_KEY'" in str(warnings[0])
156
+
157
+
158
+ def test_serialize_node__with_non_exist_code_input_path():
159
+ # GIVEN a code node with a non-existent code input path
160
+ class MyNode(CodeExecutionNode):
161
+ filepath = "non_existent_file.py"
162
+
163
+ # AND a workflow with the code node
164
+ class Workflow(BaseWorkflow):
165
+ graph = MyNode
166
+
167
+ # WHEN we serialize the workflow
168
+ workflow_display = get_workflow_display(workflow_class=Workflow)
169
+ with pytest.raises(Exception) as exc_info:
170
+ workflow_display.serialize()
171
+ assert "Filepath 'non_existent_file.py' of node MyNode does not exist" in str(exc_info.value)
@@ -0,0 +1,89 @@
1
+ from vellum_ee.workflows.display.workflows.get_vellum_workflow_display_class import get_workflow_display
2
+
3
+ from tests.workflows.basic_tool_calling_node_with_composio_tool.workflow import (
4
+ BasicToolCallingNodeWithComposioToolWorkflow,
5
+ )
6
+
7
+
8
+ def test_serialize_workflow():
9
+ # GIVEN a Workflow that uses a tool calling node with a composio tool
10
+ # WHEN we serialize it
11
+ workflow_display = get_workflow_display(workflow_class=BasicToolCallingNodeWithComposioToolWorkflow)
12
+
13
+ serialized_workflow: dict = workflow_display.serialize()
14
+
15
+ # THEN we should get a serialized representation of the Workflow
16
+ assert serialized_workflow.keys() == {
17
+ "workflow_raw_data",
18
+ "input_variables",
19
+ "state_variables",
20
+ "output_variables",
21
+ }
22
+
23
+ # AND its input variables should be what we expect
24
+ input_variables = serialized_workflow["input_variables"]
25
+ assert len(input_variables) == 1
26
+
27
+ # AND its output variables should be what we expect
28
+ output_variables = serialized_workflow["output_variables"]
29
+ assert len(output_variables) == 2
30
+
31
+ # Find the text and chat_history outputs
32
+ text_output = next(var for var in output_variables if var["key"] == "text")
33
+ chat_history_output = next(var for var in output_variables if var["key"] == "chat_history")
34
+
35
+ assert text_output["type"] == "STRING"
36
+ assert chat_history_output["type"] == "CHAT_HISTORY"
37
+
38
+ # AND its raw data should be what we expect
39
+ workflow_raw_data = serialized_workflow["workflow_raw_data"]
40
+ tool_calling_node = workflow_raw_data["nodes"][1]
41
+
42
+ # AND the tool calling node should have the composio tool properly serialized
43
+ functions_attribute = next(attr for attr in tool_calling_node["attributes"] if attr["name"] == "functions")
44
+ assert functions_attribute["value"]["type"] == "CONSTANT_VALUE"
45
+ assert functions_attribute["value"]["value"]["type"] == "JSON"
46
+
47
+ functions_list = functions_attribute["value"]["value"]["value"]
48
+ assert len(functions_list) == 1
49
+
50
+ composio_function = functions_list[0]
51
+ assert composio_function == {
52
+ "type": "COMPOSIO",
53
+ "toolkit": "GITHUB",
54
+ "action": "GITHUB_CREATE_AN_ISSUE",
55
+ "description": "Create a new issue in a GitHub repository",
56
+ "display_name": "Create GitHub Issue",
57
+ "parameters": None,
58
+ "version": None,
59
+ "tags": None,
60
+ }
61
+
62
+ # AND the rest of the node structure should be correct
63
+ assert tool_calling_node["type"] == "GENERIC"
64
+ assert tool_calling_node["base"]["name"] == "ToolCallingNode"
65
+ assert tool_calling_node["definition"]["name"] == "ComposioToolCallingNode"
66
+
67
+ # AND the blocks should be properly serialized
68
+ blocks_attribute = next(attr for attr in tool_calling_node["attributes"] if attr["name"] == "blocks")
69
+ assert blocks_attribute["value"]["type"] == "CONSTANT_VALUE"
70
+ blocks_list = blocks_attribute["value"]["value"]["value"]
71
+ assert len(blocks_list) == 2
72
+ assert blocks_list[0]["chat_role"] == "SYSTEM"
73
+ assert blocks_list[1]["chat_role"] == "USER"
74
+
75
+ # AND the prompt inputs should be properly serialized
76
+ prompt_inputs_attribute = next(attr for attr in tool_calling_node["attributes"] if attr["name"] == "prompt_inputs")
77
+ assert prompt_inputs_attribute["value"]["type"] == "DICTIONARY_REFERENCE"
78
+ entries = prompt_inputs_attribute["value"]["entries"]
79
+ assert len(entries) == 1
80
+ assert entries[0]["key"] == "question"
81
+ assert entries[0]["value"]["type"] == "WORKFLOW_INPUT"
82
+
83
+ # AND the outputs should be correct
84
+ outputs = tool_calling_node["outputs"]
85
+ assert len(outputs) == 2
86
+ assert outputs[0]["name"] == "text"
87
+ assert outputs[0]["type"] == "STRING"
88
+ assert outputs[1]["name"] == "chat_history"
89
+ assert outputs[1]["type"] == "CHAT_HISTORY"
@@ -1,25 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- from ..core.pydantic_utilities import UniversalBaseModel
4
- import typing
5
- from .vembda_service_tier_enum import VembdaServiceTierEnum
6
- from .quota import Quota
7
- from ..core.pydantic_utilities import IS_PYDANTIC_V2
8
- import pydantic
9
-
10
-
11
- class OrganizationLimitConfig(UniversalBaseModel):
12
- vembda_service_tier: typing.Optional[VembdaServiceTierEnum] = None
13
- prompt_executions_quota: typing.Optional[Quota] = None
14
- workflow_executions_quota: typing.Optional[Quota] = None
15
- workflow_runtime_seconds_quota: typing.Optional[Quota] = None
16
- max_workflow_runtime_seconds: typing.Optional[int] = None
17
-
18
- if IS_PYDANTIC_V2:
19
- model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
20
- else:
21
-
22
- class Config:
23
- frozen = True
24
- smart_union = True
25
- extra = pydantic.Extra.allow
@@ -1,21 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- from ..core.pydantic_utilities import UniversalBaseModel
4
- import typing
5
- from ..core.pydantic_utilities import IS_PYDANTIC_V2
6
- import pydantic
7
-
8
-
9
- class Quota(UniversalBaseModel):
10
- name: str
11
- value: typing.Optional[int] = None
12
- period_seconds: typing.Optional[int] = None
13
-
14
- if IS_PYDANTIC_V2:
15
- model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
16
- else:
17
-
18
- class Config:
19
- frozen = True
20
- smart_union = True
21
- extra = pydantic.Extra.allow
@@ -1,5 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- import typing
4
-
5
- VembdaServiceTierEnum = typing.Union[typing.Literal["FREE", "PAID"], typing.Any]
@@ -1,3 +0,0 @@
1
- # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
-
3
- from vellum.client.types.organization_limit_config import *
vellum/types/quota.py DELETED
@@ -1,3 +0,0 @@
1
- # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
-
3
- from vellum.client.types.quota import *
@@ -1,3 +0,0 @@
1
- # WARNING: This file will be removed in a future release. Please import from "vellum.client" instead.
2
-
3
- from vellum.client.types.vembda_service_tier_enum import *
@@ -1,83 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Any, Dict, List
3
-
4
- from composio import Action, Composio
5
- from composio_client import Composio as ComposioClient
6
-
7
-
8
- @dataclass
9
- class ConnectionInfo:
10
- """Information about a user's authorized connection"""
11
-
12
- connection_id: str
13
- integration_name: str
14
- created_at: str
15
- updated_at: str
16
- status: str = "ACTIVE" # TODO: Use enum if we end up supporting integrations that the user has not yet connected to
17
-
18
-
19
- class ComposioAccountService:
20
- """Manages user authorized connections using composio-client"""
21
-
22
- def __init__(self, api_key: str):
23
- self.client = ComposioClient(api_key=api_key)
24
-
25
- def get_user_connections(self) -> List[ConnectionInfo]:
26
- """Get all authorized connections for the user"""
27
- response = self.client.connected_accounts.list()
28
-
29
- return [
30
- ConnectionInfo(
31
- connection_id=item.id,
32
- integration_name=item.toolkit.slug,
33
- status=item.status,
34
- created_at=item.created_at,
35
- updated_at=item.updated_at,
36
- )
37
- for item in response.items
38
- ]
39
-
40
-
41
- class ComposioCoreService:
42
- """Handles tool execution using composio-core"""
43
-
44
- def __init__(self, api_key: str):
45
- self.client = Composio(api_key=api_key)
46
-
47
- def execute_tool(self, tool_name: str, arguments: Dict[str, Any]) -> Any:
48
- """Execute a tool using composio-core
49
-
50
- Args:
51
- tool_name: The name of the tool to execute (e.g., "HACKERNEWS_GET_USER")
52
- arguments: Dictionary of arguments to pass to the tool
53
-
54
- Returns:
55
- The result of the tool execution
56
- """
57
- # Convert tool name string to Action enum
58
- action = getattr(Action, tool_name)
59
- return self.client.actions.execute(action, params=arguments)
60
-
61
-
62
- class ComposioService:
63
- """Unified interface for Composio operations"""
64
-
65
- def __init__(self, api_key: str):
66
- self.accounts = ComposioAccountService(api_key)
67
- self.core = ComposioCoreService(api_key)
68
-
69
- def get_user_connections(self) -> List[ConnectionInfo]:
70
- """Get user's authorized connections"""
71
- return self.accounts.get_user_connections()
72
-
73
- def execute_tool(self, tool_name: str, arguments: Dict[str, Any]) -> Any:
74
- """Execute a tool using composio-core
75
-
76
- Args:
77
- tool_name: The name of the tool to execute (e.g., "HACKERNEWS_GET_USER")
78
- arguments: Dictionary of arguments to pass to the tool
79
-
80
- Returns:
81
- The result of the tool execution
82
- """
83
- return self.core.execute_tool(tool_name, arguments)