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.
- vellum/__init__.py +0 -6
- vellum/client/core/client_wrapper.py +2 -2
- vellum/client/types/__init__.py +0 -6
- vellum/client/types/organization_read.py +1 -2
- vellum/workflows/events/context.py +111 -0
- vellum/workflows/integrations/__init__.py +0 -0
- vellum/workflows/integrations/composio_service.py +138 -0
- vellum/workflows/nodes/displayable/bases/api_node/node.py +27 -9
- vellum/workflows/nodes/displayable/bases/api_node/tests/__init__.py +0 -0
- vellum/workflows/nodes/displayable/bases/api_node/tests/test_node.py +47 -0
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_composio_service.py +63 -58
- vellum/workflows/nodes/displayable/tool_calling_node/tests/test_utils.py +21 -1
- vellum/workflows/nodes/displayable/tool_calling_node/utils.py +124 -59
- vellum/workflows/types/definition.py +4 -2
- vellum/workflows/utils/functions.py +13 -1
- vellum/workflows/utils/tests/test_functions.py +32 -1
- {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/METADATA +1 -3
- {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/RECORD +26 -27
- vellum_cli/push.py +11 -2
- vellum_cli/tests/test_push.py +57 -1
- vellum_ee/workflows/display/nodes/vellum/code_execution_node.py +2 -0
- vellum_ee/workflows/display/nodes/vellum/tests/test_code_execution_node.py +16 -0
- vellum_ee/workflows/display/tests/workflow_serialization/test_basic_tool_calling_node_composio_serialization.py +89 -0
- vellum/client/types/organization_limit_config.py +0 -25
- vellum/client/types/quota.py +0 -21
- vellum/client/types/vembda_service_tier_enum.py +0 -5
- vellum/types/organization_limit_config.py +0 -3
- vellum/types/quota.py +0 -3
- vellum/types/vembda_service_tier_enum.py +0 -3
- vellum/workflows/nodes/displayable/tool_calling_node/composio_service.py +0 -83
- {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/LICENSE +0 -0
- {vellum_ai-1.0.4.dist-info → vellum_ai-1.0.6.dist-info}/WHEEL +0 -0
- {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=
|
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=
|
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=
|
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=
|
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
|
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=
|
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=
|
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/
|
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=
|
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=
|
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=
|
1705
|
-
vellum/workflows/nodes/displayable/tool_calling_node/utils.py,sha256=
|
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=
|
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=
|
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=
|
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.
|
1779
|
-
vellum_ai-1.0.
|
1780
|
-
vellum_ai-1.0.
|
1781
|
-
vellum_ai-1.0.
|
1782
|
-
vellum_ai-1.0.
|
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
|
-
|
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.")
|
vellum_cli/tests/test_push.py
CHANGED
@@ -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
|
-
|
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
|
vellum/client/types/quota.py
DELETED
@@ -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
|
vellum/types/quota.py
DELETED
@@ -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)
|
File without changes
|
File without changes
|
File without changes
|