griptape-nodes 0.43.0__py3-none-any.whl → 0.44.0__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 (131) hide show
  1. griptape_nodes/__init__.py +41 -51
  2. griptape_nodes/app/.python-version +0 -0
  3. griptape_nodes/app/__init__.py +0 -0
  4. griptape_nodes/app/api.py +35 -6
  5. griptape_nodes/app/app.py +0 -0
  6. griptape_nodes/app/watch.py +0 -0
  7. griptape_nodes/bootstrap/__init__.py +0 -0
  8. griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
  9. griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +7 -1
  10. griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +90 -0
  11. griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +7 -1
  12. griptape_nodes/drivers/__init__.py +0 -0
  13. griptape_nodes/drivers/storage/__init__.py +0 -0
  14. griptape_nodes/drivers/storage/base_storage_driver.py +53 -0
  15. griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +49 -2
  16. griptape_nodes/drivers/storage/local_storage_driver.py +37 -0
  17. griptape_nodes/drivers/storage/storage_backend.py +0 -0
  18. griptape_nodes/exe_types/__init__.py +0 -0
  19. griptape_nodes/exe_types/connections.py +0 -0
  20. griptape_nodes/exe_types/core_types.py +113 -8
  21. griptape_nodes/exe_types/flow.py +0 -0
  22. griptape_nodes/exe_types/node_types.py +1 -0
  23. griptape_nodes/exe_types/type_validator.py +0 -0
  24. griptape_nodes/machines/__init__.py +0 -0
  25. griptape_nodes/machines/control_flow.py +5 -4
  26. griptape_nodes/machines/fsm.py +0 -0
  27. griptape_nodes/machines/node_resolution.py +110 -74
  28. griptape_nodes/mcp_server/__init__.py +0 -0
  29. griptape_nodes/mcp_server/server.py +16 -8
  30. griptape_nodes/mcp_server/ws_request_manager.py +0 -0
  31. griptape_nodes/node_library/__init__.py +0 -0
  32. griptape_nodes/node_library/advanced_node_library.py +0 -0
  33. griptape_nodes/node_library/library_registry.py +0 -0
  34. griptape_nodes/node_library/workflow_registry.py +0 -0
  35. griptape_nodes/py.typed +0 -0
  36. griptape_nodes/retained_mode/__init__.py +0 -0
  37. griptape_nodes/retained_mode/events/__init__.py +0 -0
  38. griptape_nodes/retained_mode/events/agent_events.py +0 -0
  39. griptape_nodes/retained_mode/events/app_events.py +0 -6
  40. griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
  41. griptape_nodes/retained_mode/events/base_events.py +6 -7
  42. griptape_nodes/retained_mode/events/config_events.py +0 -0
  43. griptape_nodes/retained_mode/events/connection_events.py +0 -0
  44. griptape_nodes/retained_mode/events/context_events.py +0 -0
  45. griptape_nodes/retained_mode/events/execution_events.py +0 -0
  46. griptape_nodes/retained_mode/events/flow_events.py +2 -1
  47. griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
  48. griptape_nodes/retained_mode/events/library_events.py +0 -0
  49. griptape_nodes/retained_mode/events/logger_events.py +0 -0
  50. griptape_nodes/retained_mode/events/node_events.py +36 -0
  51. griptape_nodes/retained_mode/events/object_events.py +0 -0
  52. griptape_nodes/retained_mode/events/os_events.py +98 -6
  53. griptape_nodes/retained_mode/events/parameter_events.py +0 -0
  54. griptape_nodes/retained_mode/events/payload_registry.py +0 -0
  55. griptape_nodes/retained_mode/events/secrets_events.py +0 -0
  56. griptape_nodes/retained_mode/events/static_file_events.py +0 -0
  57. griptape_nodes/retained_mode/events/validation_events.py +0 -0
  58. griptape_nodes/retained_mode/events/workflow_events.py +0 -0
  59. griptape_nodes/retained_mode/griptape_nodes.py +1 -4
  60. griptape_nodes/retained_mode/managers/__init__.py +0 -0
  61. griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
  62. griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
  63. griptape_nodes/retained_mode/managers/config_manager.py +1 -1
  64. griptape_nodes/retained_mode/managers/context_manager.py +0 -0
  65. griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
  66. griptape_nodes/retained_mode/managers/event_manager.py +0 -0
  67. griptape_nodes/retained_mode/managers/flow_manager.py +6 -0
  68. griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -0
  69. griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -0
  70. griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -0
  71. griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -0
  72. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -0
  73. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -0
  74. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -0
  75. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -0
  76. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -0
  77. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -0
  78. griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -0
  79. griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -0
  80. griptape_nodes/retained_mode/managers/library_manager.py +2 -8
  81. griptape_nodes/retained_mode/managers/node_manager.py +76 -5
  82. griptape_nodes/retained_mode/managers/object_manager.py +0 -0
  83. griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
  84. griptape_nodes/retained_mode/managers/os_manager.py +133 -8
  85. griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
  86. griptape_nodes/retained_mode/managers/session_manager.py +0 -0
  87. griptape_nodes/retained_mode/managers/settings.py +0 -0
  88. griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
  89. griptape_nodes/retained_mode/managers/version_compatibility_manager.py +0 -0
  90. griptape_nodes/retained_mode/managers/workflow_manager.py +54 -5
  91. griptape_nodes/retained_mode/retained_mode.py +0 -0
  92. griptape_nodes/retained_mode/utils/__init__.py +0 -0
  93. griptape_nodes/retained_mode/utils/engine_identity.py +0 -0
  94. griptape_nodes/retained_mode/utils/name_generator.py +0 -0
  95. griptape_nodes/traits/__init__.py +0 -0
  96. griptape_nodes/traits/add_param_button.py +0 -0
  97. griptape_nodes/traits/button.py +0 -0
  98. griptape_nodes/traits/clamp.py +0 -0
  99. griptape_nodes/traits/compare.py +0 -0
  100. griptape_nodes/traits/compare_images.py +0 -0
  101. griptape_nodes/traits/file_system_picker.py +18 -0
  102. griptape_nodes/traits/minmax.py +0 -0
  103. griptape_nodes/traits/options.py +0 -0
  104. griptape_nodes/traits/slider.py +0 -0
  105. griptape_nodes/traits/trait_registry.py +0 -0
  106. griptape_nodes/traits/traits.json +0 -0
  107. griptape_nodes/updater/__init__.py +0 -0
  108. griptape_nodes/updater/__main__.py +0 -0
  109. griptape_nodes/utils/__init__.py +0 -0
  110. griptape_nodes/utils/dict_utils.py +0 -0
  111. griptape_nodes/utils/image_preview.py +0 -0
  112. griptape_nodes/utils/metaclasses.py +0 -0
  113. griptape_nodes/utils/version_utils.py +51 -0
  114. griptape_nodes/version_compatibility/__init__.py +0 -0
  115. griptape_nodes/version_compatibility/versions/__init__.py +0 -0
  116. griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
  117. griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
  118. {griptape_nodes-0.43.0.dist-info → griptape_nodes-0.44.0.dist-info}/METADATA +1 -1
  119. {griptape_nodes-0.43.0.dist-info → griptape_nodes-0.44.0.dist-info}/RECORD +31 -39
  120. {griptape_nodes-0.43.0.dist-info → griptape_nodes-0.44.0.dist-info}/WHEEL +1 -1
  121. griptape_nodes/bootstrap/bootstrap_script.py +0 -54
  122. griptape_nodes/bootstrap/post_build_install_script.sh +0 -3
  123. griptape_nodes/bootstrap/pre_build_install_script.sh +0 -4
  124. griptape_nodes/bootstrap/register_libraries_script.py +0 -32
  125. griptape_nodes/bootstrap/structure_config.yaml +0 -15
  126. griptape_nodes/bootstrap/workflow_runners/__init__.py +0 -1
  127. griptape_nodes/bootstrap/workflow_runners/bootstrap_workflow_runner.py +0 -28
  128. griptape_nodes/bootstrap/workflow_runners/local_workflow_runner.py +0 -237
  129. griptape_nodes/bootstrap/workflow_runners/subprocess_workflow_runner.py +0 -62
  130. griptape_nodes/bootstrap/workflow_runners/workflow_runner.py +0 -11
  131. {griptape_nodes-0.43.0.dist-info → griptape_nodes-0.44.0.dist-info}/entry_points.txt +0 -0
@@ -1,41 +1,32 @@
1
- griptape_nodes/__init__.py,sha256=e3d8dcaf8832bd38e97590ca09e93452ab4031e31d26bf8e2ff1f1ec8adaf021,37026
1
+ griptape_nodes/__init__.py,sha256=5ac41cbebb5fba87db1b5ef09624c4c1f59c8bdfc1f965ef526145ed57a05aad,36785
2
2
  griptape_nodes/app/.python-version,sha256=7b55f8e67b5623c4bef3fa691288da9437d79d3aba156de48d481db32ac7d16d,5
3
3
  griptape_nodes/app/__init__.py,sha256=0c1f834ec81c3676e6102957128bb0cc686b9a8de01c10965c1f4190f1a97502,90
4
- griptape_nodes/app/api.py,sha256=c663628afe8949505b33a8dd187fec2b48ad512138f42e5ab8f9ce430f5b7d6e,6965
4
+ griptape_nodes/app/api.py,sha256=bcd5dc34a1633bd5e2baf677b38a7751154c415b944f05d96b479964da31f23e,8233
5
5
  griptape_nodes/app/app.py,sha256=3b09abab86b5b1712f12e7f2ef4142d641b70fbcc8a27be0bcc61b794456c96a,14950
6
6
  griptape_nodes/app/watch.py,sha256=bbc0f85469be2d8dee9ba518df9b1cc2c312e7485a74bf1fcc7057f6503ea1d4,1974
7
7
  griptape_nodes/bootstrap/__init__.py,sha256=10dbf7488cd0f53b6546b835cb87b80a7a01a49685a454a43694c5055f17e4bb,25
8
- griptape_nodes/bootstrap/bootstrap_script.py,sha256=40b2eedf0bb55469a8514f122867b22c60ce8a32812c600962fd51948f6cb9bd,1312
9
- griptape_nodes/bootstrap/post_build_install_script.sh,sha256=b7622d56f7bfd9593b8cc16c7c07d51c201ce6c1520d24249a3825af551267bb,48
10
- griptape_nodes/bootstrap/pre_build_install_script.sh,sha256=33b7bd97dfd53177f65d72beda07549e21f8a9c4e3e950a910a715bd13b9df99,84
11
- griptape_nodes/bootstrap/register_libraries_script.py,sha256=13a8fcbe13e16be84e54a64128018289b3a95b7808af111194bfbf58479673bf,1019
12
- griptape_nodes/bootstrap/structure_config.yaml,sha256=24a15d67a951adfadb76e6d2bac76f7703a0df20c70de4f952f556857cd68f11,515
13
8
  griptape_nodes/bootstrap/workflow_executors/__init__.py,sha256=a728cdf35f9e2ed8f21021582d73ad3028b18a223da818b9c9a95df3a88cec49,34
14
- griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py,sha256=83ba718b6d187b192335cc55c3ee5d49ad08d6fa0226f21febcf4f67b1d92ed4,8738
15
- griptape_nodes/bootstrap/workflow_executors/workflow_executor.py,sha256=6c4dddcac29d54a53dda32ef50f419ab3278f5c02eb5364033ab5778da3ffe0a,355
16
- griptape_nodes/bootstrap/workflow_runners/__init__.py,sha256=565936aa7e8e025c2e96fb71bd6c1d4b1fff9e98f2d57ee70e8a57d2a9cc5499,32
17
- griptape_nodes/bootstrap/workflow_runners/bootstrap_workflow_runner.py,sha256=ddcb7996b5b4ee8c56ebebe26bfa05f7704329b89662345e6aeed3caa3e3ebeb,1247
18
- griptape_nodes/bootstrap/workflow_runners/local_workflow_runner.py,sha256=6eb637a7d2e222967fd424ca2e67c47cb12aa8e654db9fbd1698a10e983abef4,9722
19
- griptape_nodes/bootstrap/workflow_runners/subprocess_workflow_runner.py,sha256=6d1e44f13c39e48208309b0923f1568961b80f122633c6404e6103112ca607ae,2422
20
- griptape_nodes/bootstrap/workflow_runners/workflow_runner.py,sha256=7e6b421fcfdcfd576e7470320890982fe2f94c57b1c005725488d05c2d0ec065,290
9
+ griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py,sha256=c3711f000d42b3ea63558b574d327073fe8645f460337bd45cf1190a6a4113ba,8816
10
+ griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py,sha256=b610be5ba3b459d1f0f0ee6a01fa104bed225d6081ae1db42626de8c7bc6c90c,3347
11
+ griptape_nodes/bootstrap/workflow_executors/workflow_executor.py,sha256=945000fb96d6cabd8a7f53324b9d2f5f549e1bb976ce66d2adbe7f932c8822ba,417
21
12
  griptape_nodes/drivers/__init__.py,sha256=b479a21509fab89c855610b63eba87811507ddddf20eca8c4295aa45ab266aa0,42
22
13
  griptape_nodes/drivers/storage/__init__.py,sha256=ffba7cbc9b776279c5eac0f7531c70dfc73e81acee3081d24be9b71bab1ad909,208
23
- griptape_nodes/drivers/storage/base_storage_driver.py,sha256=762d6da82fa8f2d11e67c87f6ac5316f92a08b1c096d39502defe552da9cba74,1050
24
- griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=cd8407cc7c651374dc3a2b72b64f56a43dd84ca4d1c9faf35be1ffbd7a604cb4,6083
25
- griptape_nodes/drivers/storage/local_storage_driver.py,sha256=be3234619a6652c7af91f5b66f8016a42f7f3961349f472cc41ef29f04d6c3f4,2291
14
+ griptape_nodes/drivers/storage/base_storage_driver.py,sha256=4a0f8cce3eeb4398c0da77def3cf14ee773af7f47ce59f73bc568d655c914b53,2467
15
+ griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=f7447cd3dbd300ec3aa58b8ff7195d52d059ade1323e22acae10dd03170c8a9f,7781
16
+ griptape_nodes/drivers/storage/local_storage_driver.py,sha256=3e912fb41fd35a0e5cd04e5fafe3c3fd55b57d805336c9b8045d480d65153d46,3488
26
17
  griptape_nodes/drivers/storage/storage_backend.py,sha256=dd0048c2b80f73592b04888f60ba0adacc2120f0e22899e7b9c384772c7bcb77,184
27
18
  griptape_nodes/exe_types/__init__.py,sha256=c061b02865fdf9349aad415b5e90ef754fc9ede5c86d64c197f3422ce65af86f,32
28
19
  griptape_nodes/exe_types/connections.py,sha256=ffe54dcdfe8a6b2eb6433265497f8b9474d4873f82285f940ec6d92c9d25e969,12435
29
- griptape_nodes/exe_types/core_types.py,sha256=8245927a1a41dbc905c202a5f0a36b5b831ac41dab70410f4ee3938423a0ea6b,58259
20
+ griptape_nodes/exe_types/core_types.py,sha256=0aeefb74e0549b0f39d3b55ccadd375a67ccb6861e4300ed41e41b2432032618,61398
30
21
  griptape_nodes/exe_types/flow.py,sha256=a42793af1f32ad480bc3553dc90c42edaaf3263c8fdaf6a0fa91b44132aeb7e3,5716
31
- griptape_nodes/exe_types/node_types.py,sha256=dc46f95fda6d146c86456b604730df6e92582564d49a1aca7a8e5cc35ff182ce,46312
22
+ griptape_nodes/exe_types/node_types.py,sha256=a0dc8f7da9f315ac07713ab28d4d84d14b67a0b82f005f6aefe07263f4649b2c,46461
32
23
  griptape_nodes/exe_types/type_validator.py,sha256=453cf5bd7d3d8f34291e1a33213309d2c88e6545efb0444386b0298dd68cd563,1120
33
24
  griptape_nodes/machines/__init__.py,sha256=bf48e4c2bf8214e2e67c461442f5fc04a40b39dbe14ac03ab685e474770f1941,30
34
- griptape_nodes/machines/control_flow.py,sha256=7ee1419e8ae49d9310e724a6448603cb3dd1995aa0e525fa3c8f38351a84d96e,9781
25
+ griptape_nodes/machines/control_flow.py,sha256=ac7e9d4555eb0aa5c30cfa182d4df542e661f24b8871113bb26962de917451d5,9843
35
26
  griptape_nodes/machines/fsm.py,sha256=83a7c5c9ea0d6c8711fe1eb732dd0bdac7233ae58984ac9942c9f170cf2960f5,2248
36
- griptape_nodes/machines/node_resolution.py,sha256=1df9911192a124b0a8daf47fe8bb0ea5f7f929389143bd4ee6236b518df5793e,20049
27
+ griptape_nodes/machines/node_resolution.py,sha256=ddd63c80a6c0ead759a1874d1f0cc835982d80563aec31879471a2a7ad60e12b,22065
37
28
  griptape_nodes/mcp_server/__init__.py,sha256=192a495aa13894809aaf286c411d6891e307db1ea3d5b04bd07571b6be7658b8,42
38
- griptape_nodes/mcp_server/server.py,sha256=891e7cc3da644f834b8e9ee567ecc464a7665b042c6a7177b93a8c1f390efe59,4809
29
+ griptape_nodes/mcp_server/server.py,sha256=c53f5ad20677ebadd1a3da5173817969aef37b7ba96d2539a8b3ce7a9fd16a0c,5058
39
30
  griptape_nodes/mcp_server/ws_request_manager.py,sha256=44c8d6cdf55eee12682afce81657687c7652cad51b8ad00737266dc942781802,10935
40
31
  griptape_nodes/node_library/__init__.py,sha256=53715c49d9aae945bbaade84dd4a773562af5049f9ff996a2febb9a9bcdfc4c4,28
41
32
  griptape_nodes/node_library/advanced_node_library.py,sha256=07565ac6e148cd0eadc7fdcc2c8c65b07b9a86d8440b51f0fede8afc1c88773b,2104
@@ -45,35 +36,35 @@ griptape_nodes/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca
45
36
  griptape_nodes/retained_mode/__init__.py,sha256=5f5d8328be8a84bb224533c896b3e3da1efafec274ab4787e2bd24310928766d,29
46
37
  griptape_nodes/retained_mode/events/__init__.py,sha256=ec1d42f9cd2356f9d286d1c9da57d7e8164f1345350e04308357b80e8ae1286d,22
47
38
  griptape_nodes/retained_mode/events/agent_events.py,sha256=c720ad47e1dfd6fbfa16dfb3d00b74cad20c60145c918ca6a71741c95657ac21,4880
48
- griptape_nodes/retained_mode/events/app_events.py,sha256=7318422afc04d9ebd1eea3a484fcf51fa38fae5287b6d2dfdaadd1f41dd137d0,8547
39
+ griptape_nodes/retained_mode/events/app_events.py,sha256=1e3e4d246a8a9a97de592f20664140f017aad0c5f07bf7bf10bdaffe83385cfb,8358
49
40
  griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=ba17a9d5cd718d473e6103b99c84ad004e3c3d2eab1592d30d022bfd06f7c1ef,1460
50
- griptape_nodes/retained_mode/events/base_events.py,sha256=988e4550864f74e38e4d3ee3dcc36c07c36185c7d0f9a398fe5547137a8d37e8,19788
41
+ griptape_nodes/retained_mode/events/base_events.py,sha256=764e0d680015897872b73e85f9c4873e38439a8a90811b1b42e0397eb8c90aa1,19738
51
42
  griptape_nodes/retained_mode/events/config_events.py,sha256=f56845c7a983ed017f87595d1403d113f88bb6b40100512f03afccce118ea269,6129
52
43
  griptape_nodes/retained_mode/events/connection_events.py,sha256=4231c0a7449e09b4521be745fe753f08f68e712288b6ad83589fc51d6805d5be,4744
53
44
  griptape_nodes/retained_mode/events/context_events.py,sha256=f852308c8d2126874385f338045fb719347272ef34bf54e5492397df8a00f670,2122
54
45
  griptape_nodes/retained_mode/events/execution_events.py,sha256=cf545a90018942b354994e9253a7af5d295d3dd952970d20066eff4b5e49684a,9946
55
- griptape_nodes/retained_mode/events/flow_events.py,sha256=04a11fb6037aa483021692c5f7223091c968216558e85488c145f96b87dce4a5,14019
46
+ griptape_nodes/retained_mode/events/flow_events.py,sha256=084eda147bc1c98ea28b4848fbf43dba41090db1e4eb92d4791061ae31a4c5b4,14139
56
47
  griptape_nodes/retained_mode/events/generate_request_payload_schemas.py,sha256=3d0d104590140658d22068c1f1085851e4664ab7e62ec27a5d57328092a2d772,1102
57
48
  griptape_nodes/retained_mode/events/library_events.py,sha256=f4a54c1c0e556b36377d71089b7d599b2fab278dc0c4d8276b84b354f9b2f0f8,17629
58
49
  griptape_nodes/retained_mode/events/logger_events.py,sha256=8d8971ccfa26802b09b8fb49d339d60610fc4097c2f2a0b8c5f0a10e2b95bb28,705
59
- griptape_nodes/retained_mode/events/node_events.py,sha256=57d29fd06da5d94431bb79299e55aea42eef3184a1906a58acb7badafe1ef405,24526
50
+ griptape_nodes/retained_mode/events/node_events.py,sha256=69b90367737ff7fb79f7976a9ff5e438e6bc414cf0d797d9c6481ed2a5e81ac5,25587
60
51
  griptape_nodes/retained_mode/events/object_events.py,sha256=7096aa114ef72f37f5451c49ac5a84a65f1e4ebfa00e12a95cacb027ebd50894,2631
61
- griptape_nodes/retained_mode/events/os_events.py,sha256=10bf1fecfcc16e5d0e5146ef53f299fa52373974166bf01cce7dcc879bb93128,5093
52
+ griptape_nodes/retained_mode/events/os_events.py,sha256=5f49a6ca4febe6deaea5a43c7960a50fb276e40897da082c02ec4c6525bd571d,8085
62
53
  griptape_nodes/retained_mode/events/parameter_events.py,sha256=9f93c22ff4f9cf192d5f7852caaa43b1eced26b4fafd18d2f65bba0263410ead,18411
63
54
  griptape_nodes/retained_mode/events/payload_registry.py,sha256=abec3152aa7adef84d8fe3e5d491891e706485479f70202b3e830ddca0511042,1691
64
55
  griptape_nodes/retained_mode/events/secrets_events.py,sha256=52788b47e7c7ece3be71a48608f0c26587fc67476b04aaa845c8ef358ed8dc7b,4021
65
56
  griptape_nodes/retained_mode/events/static_file_events.py,sha256=73c90a92bc403d9c6b13d7ec95da56b7078ad42e13fb5f9d1d6c3fefa4917a13,3764
66
57
  griptape_nodes/retained_mode/events/validation_events.py,sha256=1f6c96a07a76b7b430195fdf0d05d1cbb2688d89cae24e92380944bd16124ff4,3062
67
58
  griptape_nodes/retained_mode/events/workflow_events.py,sha256=e95f33b169dff0c6c16763a2dfacda33f6bb7593b9a0e96afe22313cbfa0f099,11138
68
- griptape_nodes/retained_mode/griptape_nodes.py,sha256=6dffcdf0263e75748e12eb53f7e3c9b011e2b1a5c12c9cd7911b99b36ab0d5be,24273
59
+ griptape_nodes/retained_mode/griptape_nodes.py,sha256=329eb23161f0758e29a714c6812ded0258aa7813271d135eb0a33cba82d94ceb,24245
69
60
  griptape_nodes/retained_mode/managers/__init__.py,sha256=3935f2b0abaca980907806309d58f83db137331bc0513abdc4e653eaf504dc90,24
70
61
  griptape_nodes/retained_mode/managers/agent_manager.py,sha256=766417a01aa7a807307aa3290f5af0f1ebc4facc713706c58d4759eadc292890,11038
71
62
  griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=427a88dbf2240e973d487cdb6fe8f0b326249bdd56d15f642e5c404546db5542,1777
72
- griptape_nodes/retained_mode/managers/config_manager.py,sha256=d1fb3ec5deafa5eb41198aec9bab2a3c18566f4a8284c76d51cc5ca3ddaa4ea4,25344
63
+ griptape_nodes/retained_mode/managers/config_manager.py,sha256=1c9566a88bbda358fc946cb0374094c5343e110134bd82766000f44741471bb5,25402
73
64
  griptape_nodes/retained_mode/managers/context_manager.py,sha256=0e218d874f5367baec2c4717aaa07d62b87689eb41cb9f4b3c5ec6334381412f,22930
74
65
  griptape_nodes/retained_mode/managers/engine_identity_manager.py,sha256=181073ec72412553725cb191740bea0e08a131107f6235aa744c0b3029da7548,4409
75
66
  griptape_nodes/retained_mode/managers/event_manager.py,sha256=ac6a1e18ed004d977dc3c1a6d510c7a0e0c363227e5eac6218989d6228c7fd06,7201
76
- griptape_nodes/retained_mode/managers/flow_manager.py,sha256=75401ac59e6ebac24b9933282c4c204c07ff74e020330645589cdd81af6fde97,106410
67
+ griptape_nodes/retained_mode/managers/flow_manager.py,sha256=e461615747894cdcabdcc137a67278b5f331d51c598bbfb0c23316b92ac84afd,106880
77
68
  griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py,sha256=22aefd5714dd113884c417c559771e26080366a4ba5f73a4cd713d5f015c955c,1340
78
69
  griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py,sha256=7ef00fd1569818f1d897f2a0dd12f881d265a6ac9af144efa4ff82e3dafde749,6723
79
70
  griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py,sha256=c44e88de3196c524a452db9979bc24d00bee9083f62732c1378b4daaafcc126d,14758
@@ -86,17 +77,17 @@ griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/packa
86
77
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py,sha256=df6b23dba767b3cbaf408654c47366083b0ac975190cffcf34a89f5cf5167878,6111
87
78
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py,sha256=7021abf8c4354655418944d97a960429d5613e00b879b718ae6a6ff2b23755e3,894
88
79
  griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py,sha256=2b750407301d098f70a61c816cbc4360fd10e37698be12d9fcfcfbfd2cdc3de7,443
89
- griptape_nodes/retained_mode/managers/library_manager.py,sha256=cdfbe77f09280558352bc32da5d50a43cb56f8b36998ce590b01b64ffe09cccc,98483
90
- griptape_nodes/retained_mode/managers/node_manager.py,sha256=8724bb57104babdee58694a66843631d94d39b0936228c2b5cf1a7a1379733a3,129235
80
+ griptape_nodes/retained_mode/managers/library_manager.py,sha256=4b79e16b20ca04ec433903ffdc36e02fb000f2f244c6b527d8099679217d0655,98137
81
+ griptape_nodes/retained_mode/managers/node_manager.py,sha256=51d6e30a62b4476357e392884707e2fa35e8068bade4961765316e1d944613dc,132979
91
82
  griptape_nodes/retained_mode/managers/object_manager.py,sha256=1c03325b63a7adb75898ecd14aa9af6e9c8a83a78edf050493afb608ff4441cc,12243
92
83
  griptape_nodes/retained_mode/managers/operation_manager.py,sha256=ea71f1d5f003763ee7cade5d22b34db92911dfad97811d4031511223550217aa,19746
93
- griptape_nodes/retained_mode/managers/os_manager.py,sha256=bb902bf0063824e0734110c9aa5abd11c778a492d290140693139033da071e1b,28419
84
+ griptape_nodes/retained_mode/managers/os_manager.py,sha256=d96eacd389f6235f94ad3277240204ddd116f488b833eaeae7aec7872a685002,33870
94
85
  griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=b86963e4c00be647d2870134c919f9cb0b8870d1943fda8eabd48bb77be44e32,6219
95
86
  griptape_nodes/retained_mode/managers/session_manager.py,sha256=7cb8ed06f80663775aab5bdba493d7ab4ebd9f7e59f99af9745dc1d17c83d896,11817
96
87
  griptape_nodes/retained_mode/managers/settings.py,sha256=a12f930e6cfc2162012be3ac8c86d384d7e29c03b36a825b0d4486953393fe7c,4439
97
88
  griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=45b40719e26045aeed08627089fd2119531b11590781a52de05078e0c711c560,7129
98
89
  griptape_nodes/retained_mode/managers/version_compatibility_manager.py,sha256=4dec32a89fc377d306821a22b129ddbaa0fcc00388302a354d93ffdc0ca7cbad,4386
99
- griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=65c296ee0d1b357b0fb7fdb5be5a91f303d41d97d3853af2d4439ca9c9441e45,138377
90
+ griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=f275d749ab06387a84b7a74577c1be3f9d35f86862c70a17c2ffd79a215d4510,140667
100
91
  griptape_nodes/retained_mode/retained_mode.py,sha256=d9c8d20f517f001a6e2fc926fe71a9027da1e538a3795efbaabd5e3c7fc15998,56272
101
92
  griptape_nodes/retained_mode/utils/__init__.py,sha256=5b976fbfc630bd556affc7954e031ddd9fd507f0edab5b08215abcef8e501ff2,52
102
93
  griptape_nodes/retained_mode/utils/engine_identity.py,sha256=3d999d95833af7e07ee99d45e2225f672566dadc096397121a8894242323d315,7846
@@ -107,7 +98,7 @@ griptape_nodes/traits/button.py,sha256=ae9410efb012287dd825a6dce565b0f43a441d088
107
98
  griptape_nodes/traits/clamp.py,sha256=0595478967c135e3d668f31a2f23a0b5c5b390cecbb3885c3e59bf69f986888b,1030
108
99
  griptape_nodes/traits/compare.py,sha256=5fe05719e9910f1415e045fc5f6e0b76d730316c1f4358c6a83bc7d9b4a24ae7,521
109
100
  griptape_nodes/traits/compare_images.py,sha256=296d16970b093fa9c1a02d62add7919d45949d9209be544e9438725a15fc884b,1594
110
- griptape_nodes/traits/file_system_picker.py,sha256=9c0cb53335342dfa253c9ad7ac307aedba4b72fedc84123d3eb46f3936029d70,4834
101
+ griptape_nodes/traits/file_system_picker.py,sha256=a7e45a1f8c706f6168d30b85b186ec88beba5b6dca744497d10aba100b43163f,5806
111
102
  griptape_nodes/traits/minmax.py,sha256=795c92af3d3658fbe9c1b4aba96ec545399eb4d04e04ac9ff18ad7af3c8e1a79,1312
112
103
  griptape_nodes/traits/options.py,sha256=2a3ee2b30d179212358e608262e5cfeb74ddf0af2b836d67182efbba5b4d5e72,1096
113
104
  griptape_nodes/traits/slider.py,sha256=6cb7b8ea0b429a384c087686cd4b2d216309bf6665d9879eedf913ea0e10e919,1236
@@ -119,11 +110,12 @@ griptape_nodes/utils/__init__.py,sha256=e7e36fa95bf18b0b91c76520cb37a7b8b157ca87
119
110
  griptape_nodes/utils/dict_utils.py,sha256=932962e4c39fcd2a2bd1af259977d80554bf35719fe942b548cea4fd09f96ecf,6889
120
111
  griptape_nodes/utils/image_preview.py,sha256=361608aa885117dbdb16958812f64774f2cb3cafc975406f0b846f340b126b5c,4480
121
112
  griptape_nodes/utils/metaclasses.py,sha256=4522b202f669a47fe16ccba0994988afc42a3a0d6c618e2e44d7d0c9b0f83bc4,287
113
+ griptape_nodes/utils/version_utils.py,sha256=f601cb158cd089036bec69ed7466d74e524e3dfdeaf1f6692024c7a38b001646,1649
122
114
  griptape_nodes/version_compatibility/__init__.py,sha256=24ccf5b01ed9b23ea94b54b9b1db0f474927f3db35034b01d24148bf280961fa,74
123
115
  griptape_nodes/version_compatibility/versions/__init__.py,sha256=3d64b1336f0b3d47417513c0f7c8f84545afb99e0da9f5f575acb6554e92a8fc,74
124
116
  griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py,sha256=db588a945a6c9815b85ac01ec520f458c0099ec62632adac21b0de602f37d5f7,62
125
117
  griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py,sha256=cf885751e64d4a5909ef1c06e8744921279603b880b592ca4214e24efca14b09,5262
126
- griptape_nodes-0.43.0.dist-info/WHEEL,sha256=b70116f4076fa664af162441d2ba3754dbb4ec63e09d563bdc1e9ab023cce400,78
127
- griptape_nodes-0.43.0.dist-info/entry_points.txt,sha256=aaf7afa9ddc155b015e5371a9ed9c09b4a2ea9aa982a1b113b7a641729962d63,82
128
- griptape_nodes-0.43.0.dist-info/METADATA,sha256=a1032556bba5b6ec43f2751be641a9883c7878239ca80040ca69bd4433b09b2f,4947
129
- griptape_nodes-0.43.0.dist-info/RECORD,,
118
+ griptape_nodes-0.44.0.dist-info/WHEEL,sha256=b6dc288e80aa2d1b1518ddb3502fd5b53e8fd6cb507ed2a4f932e9e6088b264a,78
119
+ griptape_nodes-0.44.0.dist-info/entry_points.txt,sha256=aaf7afa9ddc155b015e5371a9ed9c09b4a2ea9aa982a1b113b7a641729962d63,82
120
+ griptape_nodes-0.44.0.dist-info/METADATA,sha256=d37edb62a82a28101836046f3059951b4e72dc42bde8d19c8dd269dd2a2d2c9a,4947
121
+ griptape_nodes-0.44.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.8.3
2
+ Generator: uv 0.8.4
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,54 +0,0 @@
1
- import argparse
2
- import json
3
- import logging
4
-
5
- from dotenv import load_dotenv
6
-
7
- from griptape_nodes.bootstrap.workflow_runners.bootstrap_workflow_runner import BootstrapWorkflowRunner
8
-
9
- logging.basicConfig(
10
- level=logging.INFO,
11
- )
12
- logger = logging.getLogger(__name__)
13
- logger.setLevel(logging.INFO)
14
-
15
- load_dotenv()
16
-
17
-
18
- if __name__ == "__main__":
19
- parser = argparse.ArgumentParser()
20
- parser.add_argument(
21
- "-n",
22
- "--workflow-name",
23
- default=None,
24
- help="Set the Flow Name to run",
25
- )
26
- parser.add_argument(
27
- "-i",
28
- "--input",
29
- default=None,
30
- help="The input to the flow",
31
- )
32
- parser.add_argument(
33
- "-s",
34
- "--storage-backend",
35
- default="local",
36
- help="The storage backend to use",
37
- )
38
-
39
- args = parser.parse_args()
40
- workflow_name = args.workflow_name
41
- flow_input = args.input
42
- storage_backend = args.storage_backend
43
-
44
- try:
45
- flow_input = json.loads(flow_input) if flow_input else {}
46
- except Exception as e:
47
- msg = f"Error decoding JSON input: {e}"
48
- logger.info(msg)
49
- raise
50
-
51
- workflow_runner = BootstrapWorkflowRunner()
52
- workflow_runner.run(
53
- workflow_path="workflow.py", workflow_name=workflow_name, flow_input=flow_input, storage_backend=storage_backend
54
- )
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- python register_libraries_script.py
@@ -1,4 +0,0 @@
1
- #!/bin/bash
2
-
3
- apt-get install -y curl
4
- curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -1,32 +0,0 @@
1
- import logging
2
-
3
- from griptape_nodes.retained_mode.events.library_events import RegisterLibraryFromFileRequest
4
- from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
5
-
6
- logging.basicConfig(
7
- level=logging.INFO,
8
- )
9
- logger = logging.getLogger(__name__)
10
-
11
- PATHS = ["REPLACE_LIBRARY_PATHS"]
12
-
13
-
14
- def register_libraries(library_paths: list[str]) -> None:
15
- """Register libraries from the specified paths.
16
-
17
- Args:
18
- library_paths (list[str]): A list of paths to the libraries to register.
19
- """
20
- for library_path in library_paths:
21
- msg = f"Registering library from {library_path}"
22
- logger.info(msg)
23
- register_library_request = RegisterLibraryFromFileRequest(file_path=library_path)
24
- register_library_result = GriptapeNodes.handle_request(register_library_request)
25
-
26
- if register_library_result.failed():
27
- msg = f"Failed to register library from {library_path}"
28
- raise ValueError(msg)
29
-
30
-
31
- if __name__ == "__main__":
32
- register_libraries(PATHS)
@@ -1,15 +0,0 @@
1
- version: 1.0
2
- runtime: python3
3
- runtime_version: 3.12
4
- build:
5
- pre_build_install_script: pre_build_install_script.sh
6
- post_build_install_script: post_build_install_script.sh
7
- requirements_file: requirements.txt
8
- cache_build_dependencies: # Configures caching (for faster deployments!)
9
- enabled: true # Toggles caching
10
- watched_files: # List of files that will trigger a full rebuild of the Structure
11
- - requirements.txt
12
- - structure_config.yaml
13
- run:
14
- main_file: structure.py
15
- run_as_module: true
@@ -1 +0,0 @@
1
- """Workflow runners package."""
@@ -1,28 +0,0 @@
1
- import json
2
- import os
3
-
4
- from griptape.artifacts import TextArtifact
5
- from griptape.drivers.event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver
6
- from griptape.events import FinishStructureRunEvent
7
- from register_libraries_script import PATHS # type: ignore[import] - This import is used in the runtime environment
8
-
9
- from griptape_nodes.bootstrap.workflow_runners.local_workflow_runner import LocalWorkflowRunner
10
-
11
-
12
- class BootstrapWorkflowRunner(LocalWorkflowRunner):
13
- def __init__(self) -> None:
14
- super().__init__(libraries=PATHS)
15
-
16
- def _submit_output(self, output: dict) -> None:
17
- if "GT_CLOUD_STRUCTURE_RUN_ID" in os.environ:
18
- kwargs: dict = {
19
- "batched": False,
20
- }
21
- if "GT_CLOUD_BASE_URL" in os.environ:
22
- base_url = os.environ["GT_CLOUD_BASE_URL"]
23
- if "http://localhost" in base_url or "http://127.0.0.1" in base_url:
24
- kwargs["headers"] = {}
25
- gtc_event_listener = GriptapeCloudEventListenerDriver(**kwargs)
26
- gtc_event_listener.try_publish_event_payload(
27
- FinishStructureRunEvent(output_task_output=TextArtifact(json.dumps(output))).to_dict()
28
- )
@@ -1,237 +0,0 @@
1
- import importlib.util
2
- import logging
3
- import sys
4
- from pathlib import Path
5
- from queue import Queue
6
- from typing import Any
7
-
8
- from griptape.events import BaseEvent, EventBus, EventListener
9
-
10
- from griptape_nodes.bootstrap.register_libraries_script import register_libraries
11
- from griptape_nodes.bootstrap.workflow_runners.workflow_runner import WorkflowRunner
12
- from griptape_nodes.exe_types.node_types import EndNode, StartNode
13
- from griptape_nodes.retained_mode.events.base_events import (
14
- AppEvent,
15
- EventRequest,
16
- ExecutionGriptapeNodeEvent,
17
- GriptapeNodeEvent,
18
- ProgressEvent,
19
- )
20
- from griptape_nodes.retained_mode.events.execution_events import SingleExecutionStepRequest, StartFlowRequest
21
- from griptape_nodes.retained_mode.events.parameter_events import SetParameterValueRequest
22
- from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
23
-
24
- logger = logging.getLogger(__name__)
25
-
26
-
27
- class LocalWorkflowRunner(WorkflowRunner):
28
- def __init__(self, libraries: list[Path]) -> None:
29
- self.registered_libraries = False
30
- self.libraries = libraries
31
- self.queue = Queue()
32
-
33
- def _load_user_workflow(self, path_to_workflow: str) -> None:
34
- # Ensure file_path is a Path object
35
- file_path = Path(path_to_workflow)
36
-
37
- # Generate a unique module name
38
- module_name = f"gtn_dynamic_module_{file_path.name.replace('.', '_')}_{hash(str(file_path))}"
39
-
40
- # Load the module specification
41
- spec = importlib.util.spec_from_file_location(module_name, file_path)
42
- if spec is None or spec.loader is None:
43
- msg = f"Could not load module specification from {file_path}"
44
- raise ImportError(msg)
45
-
46
- # Create the module
47
- module = importlib.util.module_from_spec(spec)
48
-
49
- # Add to sys.modules to handle recursive imports
50
- sys.modules[module_name] = module
51
-
52
- # Execute the module
53
- spec.loader.exec_module(module)
54
-
55
- def _load_flow_for_workflow(self) -> str:
56
- context_manager = GriptapeNodes.ContextManager()
57
- return context_manager.get_current_flow().name
58
-
59
- def _set_storage_backend(self, storage_backend: str) -> None:
60
- from griptape_nodes.retained_mode.managers.config_manager import ConfigManager
61
-
62
- config_manager = ConfigManager()
63
- config_manager.set_config_value(
64
- key="storage_backend",
65
- value=storage_backend,
66
- )
67
-
68
- def _register_libraries(self) -> None:
69
- if not self.registered_libraries:
70
- register_libraries([str(p) for p in self.libraries])
71
- self.registered_libraries = True
72
-
73
- def _set_workflow_context(self, workflow_name: str) -> None:
74
- context_manager = GriptapeNodes.ContextManager()
75
- context_manager.push_workflow(workflow_name=workflow_name)
76
-
77
- def _handle_event(self, event: BaseEvent) -> None:
78
- try:
79
- if isinstance(event, GriptapeNodeEvent):
80
- self.__handle_node_event(event)
81
- elif isinstance(event, ExecutionGriptapeNodeEvent):
82
- self.__handle_execution_node_event(event)
83
- elif isinstance(event, ProgressEvent):
84
- self.__handle_progress_event(event)
85
- elif isinstance(event, AppEvent):
86
- self.__handle_app_event(event)
87
- else:
88
- msg = f"Unknown event type: {type(event)}"
89
- logger.info(msg)
90
- self.queue.put(event)
91
- except Exception as e:
92
- logger.info(e)
93
-
94
- def __handle_node_event(self, event: GriptapeNodeEvent) -> None:
95
- result_event = event.wrapped_event
96
- event_json = result_event.json()
97
- event_log = f"GriptapeNodeEvent: {event_json}"
98
- logger.info(event_log)
99
-
100
- def __handle_execution_node_event(self, event: ExecutionGriptapeNodeEvent) -> None:
101
- result_event = event.wrapped_event
102
- if type(result_event.payload).__name__ == "NodeStartProcessEvent":
103
- event_log = f"NodeStartProcessEvent: {result_event.payload}"
104
- logger.info(event_log)
105
-
106
- elif type(result_event.payload).__name__ == "ResumeNodeProcessingEvent":
107
- event_log = f"ResumeNodeProcessingEvent: {result_event.payload}"
108
- logger.info(event_log)
109
-
110
- # Here we need to handle the resume event since this is the callback mechanism
111
- # for the flow to be resumed for any Node that yields a generator in its process method.
112
- node_name = result_event.payload.node_name
113
- flow_name = GriptapeNodes.NodeManager().get_node_parent_flow_by_name(node_name)
114
- event_request = EventRequest(request=SingleExecutionStepRequest(flow_name=flow_name))
115
- GriptapeNodes.handle_request(event_request.request)
116
-
117
- elif type(result_event.payload).__name__ == "NodeFinishProcessEvent":
118
- event_log = f"NodeFinishProcessEvent: {result_event.payload}"
119
- logger.info(event_log)
120
-
121
- else:
122
- event_log = f"ExecutionGriptapeNodeEvent: {result_event.payload}"
123
- logger.info(event_log)
124
-
125
- self.queue.put(event)
126
-
127
- def __handle_progress_event(self, gt_event: ProgressEvent) -> None:
128
- event_log = f"ProgressEvent: {gt_event}"
129
- logger.info(event_log)
130
-
131
- def __handle_app_event(self, event: AppEvent) -> None:
132
- event_log = f"AppEvent: {event.payload}"
133
- logger.info(event_log)
134
-
135
- def _submit_output(self, output: dict) -> None:
136
- self.output = output
137
-
138
- def _set_input_for_flow(self, flow_name: str, flow_input: dict[str, dict]) -> None:
139
- control_flow = GriptapeNodes.FlowManager().get_flow_by_name(flow_name)
140
- nodes = control_flow.nodes
141
- for node_name, node in nodes.items():
142
- if isinstance(node, StartNode):
143
- param_map: dict | None = flow_input.get(node_name)
144
- if param_map is not None:
145
- for parameter_name, parameter_value in param_map.items():
146
- set_parameter_value_request = SetParameterValueRequest(
147
- parameter_name=parameter_name,
148
- value=parameter_value,
149
- node_name=node_name,
150
- )
151
- set_parameter_value_result = GriptapeNodes.handle_request(set_parameter_value_request)
152
-
153
- if set_parameter_value_result.failed():
154
- msg = f"Failed to set parameter {parameter_name} for node {node_name}."
155
- raise ValueError(msg)
156
-
157
- def _get_output_for_flow(self, flow_name: str) -> dict:
158
- control_flow = GriptapeNodes.FlowManager().get_flow_by_name(flow_name)
159
- nodes = control_flow.nodes
160
- output = {}
161
- for node_name, node in nodes.items():
162
- if isinstance(node, EndNode):
163
- output[node_name] = node.parameter_values
164
-
165
- return output
166
-
167
- def run(self, workflow_path: str, workflow_name: str, flow_input: Any, storage_backend: str = "local") -> None:
168
- """Executes a published workflow.
169
-
170
- Executes a workflow by setting up event listeners, registering libraries,
171
- loading the user-defined workflow, and running the specified workflow.
172
-
173
- Parameters:
174
- workflow_name: The name of the workflow to execute.
175
- flow_input: Input data for the flow, typically a dictionary.
176
-
177
- Returns:
178
- None
179
- """
180
- EventBus.add_event_listener(
181
- event_listener=EventListener(
182
- on_event=self._handle_event,
183
- )
184
- )
185
-
186
- # Set the storage backend
187
- self._set_storage_backend(storage_backend=storage_backend)
188
-
189
- # Register all of our relevant libraries
190
- self._register_libraries()
191
-
192
- # Required to set the workflow_context before loading the workflow
193
- # or nothing works. The name can be anything, but how about the workflow_name.
194
- self._set_workflow_context(workflow_name=workflow_name)
195
- self._load_user_workflow(workflow_path)
196
- flow_name = self._load_flow_for_workflow()
197
- # Now let's set the input to the flow
198
- self._set_input_for_flow(flow_name=flow_name, flow_input=flow_input)
199
-
200
- # Now send the run command to actually execute it
201
- start_flow_request = StartFlowRequest(flow_name=flow_name)
202
- start_flow_result = GriptapeNodes.handle_request(start_flow_request)
203
-
204
- if start_flow_result.failed():
205
- msg = f"Failed to start flow {workflow_name}"
206
- raise ValueError(msg)
207
-
208
- logger.info("Workflow started!")
209
-
210
- # Wait for the control flow to finish
211
- is_flow_finished = False
212
- error: Exception | None = None
213
- while not is_flow_finished:
214
- try:
215
- event = self.queue.get(block=True)
216
-
217
- if isinstance(event, ExecutionGriptapeNodeEvent):
218
- result_event = event.wrapped_event
219
-
220
- if type(result_event.payload).__name__ == "ControlFlowResolvedEvent":
221
- self._submit_output(self._get_output_for_flow(flow_name=flow_name))
222
- is_flow_finished = True
223
- logger.info("Workflow finished!")
224
- elif type(result_event.payload).__name__ == "ControlFlowCancelledEvent":
225
- msg = "Control flow cancelled"
226
- is_flow_finished = True
227
- logger.error(msg)
228
- error = ValueError(msg)
229
-
230
- self.queue.task_done()
231
-
232
- except Exception as e:
233
- msg = f"Error handling queue event: {e}"
234
- logger.info(msg)
235
-
236
- if error is not None:
237
- raise error
@@ -1,62 +0,0 @@
1
- import logging
2
- import threading
3
- from multiprocessing import Process, Queue
4
- from multiprocessing import Queue as ProcessQueue
5
- from pathlib import Path
6
- from typing import Any
7
-
8
- from griptape_nodes.app.api import start_api
9
- from griptape_nodes.app.app import _build_static_dir
10
- from griptape_nodes.bootstrap.workflow_runners.local_workflow_runner import LocalWorkflowRunner
11
- from griptape_nodes.bootstrap.workflow_runners.workflow_runner import WorkflowRunner
12
-
13
-
14
- class SubprocessWorkflowRunner(WorkflowRunner):
15
- def __init__(self, libraries: list[Path]) -> None:
16
- self.libraries = libraries
17
-
18
- @staticmethod
19
- def _subprocess_entry(
20
- exception_queue: Queue,
21
- libraries: list[Path],
22
- workflow_path: str,
23
- workflow_name: str,
24
- flow_input: Any,
25
- ) -> None:
26
- # Reset logging to avoid duplicate logs in tests - this does not remove logs
27
- # because griptape nodes is doing some configuration of its own that seems
28
- # difficult to control.
29
- logger = logging.getLogger()
30
- for handler in logger.handlers[:]:
31
- logger.removeHandler(handler)
32
- logger.setLevel(logging.NOTSET)
33
-
34
- try:
35
- static_dir = _build_static_dir()
36
- event_queue = ProcessQueue()
37
- threading.Thread(target=start_api, args=(static_dir, event_queue), daemon=True).start()
38
- workflow_runner = LocalWorkflowRunner(libraries)
39
- workflow_runner.run(workflow_path, workflow_name, flow_input, "local")
40
- except Exception as e:
41
- exception_queue.put(e)
42
- raise
43
-
44
- def run(self, workflow_path: str, workflow_name: str, flow_input: Any, storage_backend: str = "local") -> None: # noqa: ARG002
45
- exception_queue = Queue()
46
- process = Process(
47
- target=self._subprocess_entry,
48
- args=(exception_queue, self.libraries, workflow_path, workflow_name, flow_input),
49
- )
50
- process.start()
51
- process.join()
52
-
53
- if not exception_queue.empty():
54
- exception = exception_queue.get_nowait()
55
- if isinstance(exception, Exception):
56
- raise exception
57
- msg = f"Expected an Exception but got: {type(exception)}"
58
- raise RuntimeError(msg)
59
-
60
- if process.exitcode != 0:
61
- msg = f"Process exited with code {process.exitcode} but no exception was raised."
62
- raise RuntimeError(msg)
@@ -1,11 +0,0 @@
1
- import logging
2
- from abc import ABC, abstractmethod
3
- from typing import Any
4
-
5
- logger = logging.getLogger(__name__)
6
-
7
-
8
- class WorkflowRunner(ABC):
9
- @abstractmethod
10
- def run(self, workflow_path: str, workflow_name: str, flow_input: Any, storage_backend: str = "local") -> None:
11
- pass