griptape-nodes 0.50.0__tar.gz → 0.51.0__tar.gz
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.
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/PKG-INFO +1 -1
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/pyproject.toml +1 -1
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/node_types.py +2 -2
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/node_events.py +44 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/flow_manager.py +21 -5
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/node_manager.py +46 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/README.md +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/app/.python-version +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/app/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/app/api.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/app/app.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/app/watch.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/bootstrap/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/local_storage_driver.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/connections.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/core_types.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/flow.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/type_validator.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/machines/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/machines/control_flow.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/machines/fsm.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/machines/node_resolution.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/mcp_server/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/mcp_server/server.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/mcp_server/ws_request_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/library_registry.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/workflow_registry.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/py.typed +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/agent_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/app_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/base_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/connection_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/execution_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/flow_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/library_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/os_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/workflow_events.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/griptape_nodes.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/config_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/context_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/event_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/library_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/object_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/settings.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/sync_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/retained_mode.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/utils/engine_identity.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/add_param_button.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/button.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/clamp.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/compare.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/compare_images.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/file_system_picker.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/minmax.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/options.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/slider.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/trait_registry.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/traits.json +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/updater/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/updater/__main__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/dict_utils.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/image_preview.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/metaclasses.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/uv_utils.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/utils/version_utils.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py +0 -0
- {griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py +0 -0
|
@@ -1175,8 +1175,8 @@ class ErrorProxyNode(BaseNode):
|
|
|
1175
1175
|
f"\nfrom the '{self.original_library_name}' library."
|
|
1176
1176
|
f"\nIt encountered a problem when loading."
|
|
1177
1177
|
f"\nThe technical issue:\n{self.failure_reason}\n\n"
|
|
1178
|
-
f"Your original node will be restored once the issue above is fixed"
|
|
1179
|
-
f"(which may require registering the appropriate library, or getting"
|
|
1178
|
+
f"Your original node will be restored once the issue above is fixed "
|
|
1179
|
+
f"(which may require registering the appropriate library, or getting "
|
|
1180
1180
|
f"a code fix from the node author)."
|
|
1181
1181
|
)
|
|
1182
1182
|
|
|
@@ -265,6 +265,50 @@ class SetNodeMetadataResultFailure(ResultPayloadFailure):
|
|
|
265
265
|
"""Metadata update failed. Common causes: node not found, no current context, invalid metadata format."""
|
|
266
266
|
|
|
267
267
|
|
|
268
|
+
@dataclass
|
|
269
|
+
@PayloadRegistry.register
|
|
270
|
+
class BatchSetNodeMetadataRequest(RequestPayload):
|
|
271
|
+
"""Update metadata for multiple nodes in a single request.
|
|
272
|
+
|
|
273
|
+
Use when: Updating positions for multiple nodes at once, applying bulk styling changes,
|
|
274
|
+
implementing multi-node selection operations, optimizing performance for UI updates.
|
|
275
|
+
Supports partial updates - only specified metadata fields are updated for each node.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
node_metadata_updates: Dictionary mapping node names to their metadata updates.
|
|
279
|
+
Each node's metadata is merged with existing metadata (partial update).
|
|
280
|
+
If a node name is None, uses the current context node.
|
|
281
|
+
|
|
282
|
+
Results: BatchSetNodeMetadataResultSuccess | BatchSetNodeMetadataResultFailure (some nodes not found, update errors)
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
node_metadata_updates: dict[str | None, dict[str, Any]]
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
@dataclass
|
|
289
|
+
@PayloadRegistry.register
|
|
290
|
+
class BatchSetNodeMetadataResultSuccess(WorkflowAlteredMixin, ResultPayloadSuccess):
|
|
291
|
+
"""Batch node metadata update completed successfully.
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
updated_nodes: List of node names that were successfully updated
|
|
295
|
+
failed_nodes: Dictionary mapping failed node names to error descriptions (if any)
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
updated_nodes: list[str]
|
|
299
|
+
failed_nodes: dict[str, str] = field(default_factory=dict)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
@dataclass
|
|
303
|
+
@PayloadRegistry.register
|
|
304
|
+
class BatchSetNodeMetadataResultFailure(ResultPayloadFailure):
|
|
305
|
+
"""Batch metadata update failed.
|
|
306
|
+
|
|
307
|
+
Common causes: all nodes not found, no current context, invalid metadata format,
|
|
308
|
+
or other systemic errors preventing the batch operation.
|
|
309
|
+
"""
|
|
310
|
+
|
|
311
|
+
|
|
268
312
|
# Get all info via a "jumbo" node event. Batches multiple info requests for, say, a GUI.
|
|
269
313
|
# ...jumbode?
|
|
270
314
|
@dataclass
|
|
@@ -1905,6 +1905,7 @@ class FlowManager:
|
|
|
1905
1905
|
valid_data_nodes = []
|
|
1906
1906
|
start_nodes = []
|
|
1907
1907
|
control_nodes = []
|
|
1908
|
+
cn_mgr = self.get_connections()
|
|
1908
1909
|
for node in all_nodes:
|
|
1909
1910
|
# if it's a start node, start here! Return the first one!
|
|
1910
1911
|
if isinstance(node, StartNode):
|
|
@@ -1915,15 +1916,21 @@ class FlowManager:
|
|
|
1915
1916
|
control_param = False
|
|
1916
1917
|
for parameter in node.parameters:
|
|
1917
1918
|
if ParameterTypeBuiltin.CONTROL_TYPE.value == parameter.output_type:
|
|
1918
|
-
|
|
1919
|
-
|
|
1919
|
+
# Check if the control parameters are being used at all. If they are not, treat it as a data node.
|
|
1920
|
+
incoming_control = (
|
|
1921
|
+
node.name in cn_mgr.incoming_index and parameter.name in cn_mgr.incoming_index[node.name]
|
|
1922
|
+
)
|
|
1923
|
+
outgoing_control = (
|
|
1924
|
+
node.name in cn_mgr.outgoing_index and parameter.name in cn_mgr.outgoing_index[node.name]
|
|
1925
|
+
)
|
|
1926
|
+
if incoming_control or outgoing_control:
|
|
1927
|
+
control_param = True
|
|
1928
|
+
break
|
|
1920
1929
|
if not control_param:
|
|
1921
1930
|
# saving this for later
|
|
1922
1931
|
data_nodes.append(node)
|
|
1923
1932
|
# If this node doesn't have a control connection..
|
|
1924
1933
|
continue
|
|
1925
|
-
|
|
1926
|
-
cn_mgr = self.get_connections()
|
|
1927
1934
|
# check if it has an incoming connection. If it does, it's not a start node
|
|
1928
1935
|
has_control_connection = False
|
|
1929
1936
|
if node.name in cn_mgr.incoming_index:
|
|
@@ -1931,10 +1938,19 @@ class FlowManager:
|
|
|
1931
1938
|
param = node.get_parameter_by_name(param_name)
|
|
1932
1939
|
if param and ParameterTypeBuiltin.CONTROL_TYPE.value == param.output_type:
|
|
1933
1940
|
# there is a control connection coming in
|
|
1941
|
+
# If the node is a StartLoopNode, it may have an incoming hidden connection from it's EndLoopNode for iteration.
|
|
1942
|
+
if isinstance(node, StartLoopNode):
|
|
1943
|
+
connection_id = cn_mgr.incoming_index[node.name][param_name][0]
|
|
1944
|
+
connection = cn_mgr.connections[connection_id]
|
|
1945
|
+
connected_node = connection.get_source_node()
|
|
1946
|
+
# Check if the source node is the end loop node associated with this StartLoopNode.
|
|
1947
|
+
# If it is, then this could still be the first node in the control flow.
|
|
1948
|
+
if connected_node == node.end_node:
|
|
1949
|
+
continue
|
|
1934
1950
|
has_control_connection = True
|
|
1935
1951
|
break
|
|
1936
1952
|
# if there is a connection coming in, isn't a start.
|
|
1937
|
-
if has_control_connection
|
|
1953
|
+
if has_control_connection:
|
|
1938
1954
|
continue
|
|
1939
1955
|
# Does it have an outgoing connection?
|
|
1940
1956
|
if node.name in cn_mgr.outgoing_index:
|
|
@@ -53,6 +53,9 @@ from griptape_nodes.retained_mode.events.library_events import (
|
|
|
53
53
|
GetLibraryMetadataResultSuccess,
|
|
54
54
|
)
|
|
55
55
|
from griptape_nodes.retained_mode.events.node_events import (
|
|
56
|
+
BatchSetNodeMetadataRequest,
|
|
57
|
+
BatchSetNodeMetadataResultFailure,
|
|
58
|
+
BatchSetNodeMetadataResultSuccess,
|
|
56
59
|
CreateNodeRequest,
|
|
57
60
|
CreateNodeResultFailure,
|
|
58
61
|
CreateNodeResultSuccess,
|
|
@@ -152,6 +155,9 @@ class NodeManager:
|
|
|
152
155
|
)
|
|
153
156
|
event_manager.assign_manager_to_request_type(GetNodeMetadataRequest, self.on_get_node_metadata_request)
|
|
154
157
|
event_manager.assign_manager_to_request_type(SetNodeMetadataRequest, self.on_set_node_metadata_request)
|
|
158
|
+
event_manager.assign_manager_to_request_type(
|
|
159
|
+
BatchSetNodeMetadataRequest, self.on_batch_set_node_metadata_request
|
|
160
|
+
)
|
|
155
161
|
event_manager.assign_manager_to_request_type(
|
|
156
162
|
ListConnectionsForNodeRequest, self.on_list_connections_for_node_request
|
|
157
163
|
)
|
|
@@ -665,6 +671,46 @@ class NodeManager:
|
|
|
665
671
|
result = SetNodeMetadataResultSuccess()
|
|
666
672
|
return result
|
|
667
673
|
|
|
674
|
+
def on_batch_set_node_metadata_request(self, request: BatchSetNodeMetadataRequest) -> ResultPayload:
|
|
675
|
+
updated_nodes = []
|
|
676
|
+
failed_nodes = {}
|
|
677
|
+
|
|
678
|
+
for node_name, metadata_update in request.node_metadata_updates.items():
|
|
679
|
+
# Resolve node name and get node object
|
|
680
|
+
node = None
|
|
681
|
+
if node_name is None:
|
|
682
|
+
# Get from current context
|
|
683
|
+
if not GriptapeNodes.ContextManager().has_current_node():
|
|
684
|
+
failed_nodes["current_context"] = "No current context node available"
|
|
685
|
+
continue
|
|
686
|
+
node = GriptapeNodes.ContextManager().get_current_node()
|
|
687
|
+
actual_node_name = node.name
|
|
688
|
+
else:
|
|
689
|
+
actual_node_name = node_name
|
|
690
|
+
|
|
691
|
+
# Look up node if we don't have it yet
|
|
692
|
+
if node is None:
|
|
693
|
+
obj_mgr = GriptapeNodes.ObjectManager()
|
|
694
|
+
node = obj_mgr.attempt_get_object_by_name_as_type(actual_node_name, BaseNode)
|
|
695
|
+
if node is None:
|
|
696
|
+
failed_nodes[actual_node_name] = f"Node '{actual_node_name}' not found"
|
|
697
|
+
continue
|
|
698
|
+
|
|
699
|
+
single_request = SetNodeMetadataRequest(node_name=actual_node_name, metadata=metadata_update)
|
|
700
|
+
result = self.on_set_node_metadata_request(single_request)
|
|
701
|
+
|
|
702
|
+
if isinstance(result, SetNodeMetadataResultSuccess):
|
|
703
|
+
updated_nodes.append(actual_node_name)
|
|
704
|
+
else:
|
|
705
|
+
failed_nodes[actual_node_name] = result.result_details
|
|
706
|
+
|
|
707
|
+
if not updated_nodes:
|
|
708
|
+
return BatchSetNodeMetadataResultFailure(
|
|
709
|
+
result_details=f"Failed to update any nodes. Failed nodes: {failed_nodes}"
|
|
710
|
+
)
|
|
711
|
+
|
|
712
|
+
return BatchSetNodeMetadataResultSuccess(updated_nodes=updated_nodes, failed_nodes=failed_nodes)
|
|
713
|
+
|
|
668
714
|
def on_list_connections_for_node_request(self, request: ListConnectionsForNodeRequest) -> ResultPayload:
|
|
669
715
|
node_name = request.node_name
|
|
670
716
|
node = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/drivers/storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/exe_types/type_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/machines/node_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/mcp_server/ws_request_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/library_registry.py
RENAMED
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/node_library/workflow_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/__init__.py
RENAMED
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/events/os_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/griptape_nodes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/retained_mode.py
RENAMED
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/retained_mode/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/add_param_button.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/traits/file_system_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.50.0 → griptape_nodes-0.51.0}/src/griptape_nodes/version_compatibility/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|