griptape-nodes 0.68.1__tar.gz → 0.70.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.68.1 → griptape_nodes-0.70.0}/PKG-INFO +3 -3
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/pyproject.toml +3 -3
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/api_client/client.py +5 -1
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/app/app.py +51 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/node_groups/base_node_group.py +22 -2
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/node_types.py +1 -1
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/execution_status_component.py +23 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/log_parameter.py +5 -1
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/seed_parameter.py +14 -16
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/node_events.py +38 -3
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/context_manager.py +1 -27
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/flow_manager.py +7 -7
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/node_manager.py +116 -27
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/object_manager.py +0 -1
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/retained_mode.py +17 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/README.md +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/__main__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/api_client/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/api_client/request_client.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/app/.python-version +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/app/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/app/watch.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/utils/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/utils/python_subprocess_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/utils/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/utils/subprocess_script.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_publishers/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_publishers/local_workflow_publisher.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_publishers/utils/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/config.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/engine.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/init.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/libraries.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/models.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/commands/self.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/main.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/cli/shared.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/directed_graph.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/core.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/exceptions.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/formats.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/matching.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/parsing.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/resolution.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/macro_parser/segments.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/node_executor.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/default_project_template.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/defaults/README.md +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/directory.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/loader.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/project.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/situation.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/common/project_templates/validation.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/storage/local_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/thread_storage/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/thread_storage/base_thread_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/thread_storage/griptape_cloud_thread_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/thread_storage/local_thread_storage_driver.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/drivers/thread_storage/thread_storage_backend.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/base_iterative_nodes.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/connections.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/core_types.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/flow.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/node_groups/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/node_groups/base_iterative_node_group.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/node_groups/subflow_node_group.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/README.md +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/api_key_provider_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/artifact_url/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/artifact_url/public_artifact_url_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_variant_parameter.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_components/progress_bar_component.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_audio.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_bool.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_button.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_dict.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_float.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_image.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_int.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_json.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_number.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_range.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_string.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_three_d.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/param_types/parameter_video.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/exe_types/type_validator.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/control_flow.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/dag_builder.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/fsm.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/parallel_resolution.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/machines/sequential_resolution.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/mcp_server/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/node_library/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/node_library/library_registry.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/node_library/workflow_registry.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/py.typed +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/agent_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/app_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/base_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/connection_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/execution_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/flow_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/library_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/mcp_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/model_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/os_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/project_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/resource_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/variable_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/events/workflow_events.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/griptape_nodes.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/config_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/event_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/after_library_callback_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/before_library_callback_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/create_config_category_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/dependency_installation_failed_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/deprecated_node_warning_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_library_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_node_registration_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/engine_version_error_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/incompatible_requirements_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/insufficient_disk_space_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/invalid_version_string_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_json_decode_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_load_exception_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_not_found_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_exception_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_validation_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_deprecation_warning_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_removed_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_base_node_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_found_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_module_import_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/old_xdg_location_warning_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/sandbox_directory_missing_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_incompatible_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_warning_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/update_config_category_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/venv_creation_failed_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/deprecated_node_in_workflow_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_dependency_version_string_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_library_version_string_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_schema_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_section_count_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_toml_format_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_not_registered_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_below_required_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_large_difference_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_major_mismatch_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_minor_difference_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_creation_date_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_last_modified_date_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_toml_section_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_found_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/library_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/mcp_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/model_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/project_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_components/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_components/capability_field.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_components/comparator.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_components/resource_instance.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_components/resource_type.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_types/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_types/compute_resource.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_types/cpu_resource.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/resource_types/os_resource.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/settings.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/sync_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/user_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/variable_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/retained_mode/variable_types.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/servers/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/servers/mcp.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/servers/static.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/add_param_button.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/button.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/clamp.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/color_picker.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/compare.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/compare_images.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/file_system_picker.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/minmax.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/multi_options.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/numbers_selector.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/options.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/slider.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/trait_registry.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/traits/traits.json +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/updater/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/updater/__main__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/async_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/dict_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/file_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/git_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/huggingface_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/image_preview.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/library_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/metaclasses.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/uv_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/utils/version_utils.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_63_8/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_63_8/deprecated_nodegroup_parameters.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_65_4/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_65_4/run_in_parallel_to_run_in_order.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_65_5/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_65_5/flux_2_removed_parameters.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_7_0/__init__.py +0 -0
- {griptape_nodes-0.68.1 → griptape_nodes-0.70.0}/src/griptape_nodes/version_compatibility/versions/v0_7_0/local_executor_argument_addition.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: griptape-nodes
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.70.0
|
|
4
4
|
Summary: Add your description here
|
|
5
|
-
Requires-Dist: griptape>=1.
|
|
5
|
+
Requires-Dist: griptape>=1.9.0
|
|
6
6
|
Requires-Dist: pydantic>=2.10.6
|
|
7
7
|
Requires-Dist: python-dotenv>=1.0.1
|
|
8
8
|
Requires-Dist: xdg-base-dirs>=6.0.2
|
|
9
9
|
Requires-Dist: httpx>=0.28.0,<1.0.0
|
|
10
|
-
Requires-Dist: websockets>=15.0.1,<
|
|
10
|
+
Requires-Dist: websockets>=15.0.1,<17.0.0
|
|
11
11
|
Requires-Dist: tomlkit>=0.13.2
|
|
12
12
|
Requires-Dist: uv>=0.6.16
|
|
13
13
|
Requires-Dist: fastapi>=0.115.12
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "griptape-nodes"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.70.0"
|
|
4
4
|
description = "Add your description here"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12.0, <3.13"
|
|
7
7
|
dependencies = [
|
|
8
|
-
"griptape>=1.
|
|
8
|
+
"griptape>=1.9.0",
|
|
9
9
|
"pydantic>=2.10.6",
|
|
10
10
|
"python-dotenv>=1.0.1",
|
|
11
11
|
"xdg-base-dirs>=6.0.2",
|
|
12
12
|
"httpx>=0.28.0,<1.0.0",
|
|
13
|
-
"websockets>=15.0.1,<
|
|
13
|
+
"websockets>=15.0.1,<17.0.0",
|
|
14
14
|
"tomlkit>=0.13.2",
|
|
15
15
|
# TODO: https://github.com/griptape-ai/griptape-nodes/issues/833
|
|
16
16
|
"uv>=0.6.16",
|
|
@@ -168,7 +168,11 @@ class Client:
|
|
|
168
168
|
logger.debug("WebSocket client connected")
|
|
169
169
|
except TimeoutError as e:
|
|
170
170
|
logger.error("Failed to connect WebSocket client: timeout")
|
|
171
|
-
msg =
|
|
171
|
+
msg = (
|
|
172
|
+
"Connection timeout - failed to connect to Nodes API. "
|
|
173
|
+
"This usually indicates an invalid or missing GT_CLOUD_API_KEY. "
|
|
174
|
+
"Please verify your API key is correct."
|
|
175
|
+
)
|
|
172
176
|
raise ConnectionError(msg) from e
|
|
173
177
|
|
|
174
178
|
async def _disconnect(self) -> None:
|
|
@@ -3,11 +3,14 @@ from __future__ import annotations
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
|
+
import sys
|
|
6
7
|
import threading
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
|
|
10
|
+
from rich.align import Align
|
|
9
11
|
from rich.console import Console
|
|
10
12
|
from rich.logging import RichHandler
|
|
13
|
+
from rich.panel import Panel
|
|
11
14
|
|
|
12
15
|
from griptape_nodes.api_client import Client
|
|
13
16
|
from griptape_nodes.retained_mode.events import app_events, execution_events
|
|
@@ -113,6 +116,35 @@ logging.basicConfig(
|
|
|
113
116
|
console = Console()
|
|
114
117
|
|
|
115
118
|
|
|
119
|
+
def _ensure_api_key() -> str:
|
|
120
|
+
"""Verify that GT_CLOUD_API_KEY is set, exit with clear error message if not.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
The API key value
|
|
124
|
+
|
|
125
|
+
Raises:
|
|
126
|
+
SystemExit: If API key is missing or empty
|
|
127
|
+
"""
|
|
128
|
+
secrets_manager = griptape_nodes.SecretsManager()
|
|
129
|
+
api_key = secrets_manager.get_secret("GT_CLOUD_API_KEY", should_error_on_not_found=False)
|
|
130
|
+
|
|
131
|
+
if not api_key:
|
|
132
|
+
message = Panel(
|
|
133
|
+
Align.center(
|
|
134
|
+
"[bold red]Nodes API key is not set, please run [code]gtn init[/code] with a valid key:[/bold red]\n"
|
|
135
|
+
"[code]gtn init --api-key <your key>[/code]\n\n"
|
|
136
|
+
"[bold red]You can generate a new key from [/bold red][bold blue][link=https://nodes.griptape.ai]https://nodes.griptape.ai[/link][/bold blue]",
|
|
137
|
+
),
|
|
138
|
+
title="[red]X[/red] Missing Nodes API Key",
|
|
139
|
+
border_style="red",
|
|
140
|
+
padding=(1, 4),
|
|
141
|
+
)
|
|
142
|
+
console.print(message)
|
|
143
|
+
sys.exit(1)
|
|
144
|
+
|
|
145
|
+
return api_key
|
|
146
|
+
|
|
147
|
+
|
|
116
148
|
def start_app() -> None:
|
|
117
149
|
"""Legacy sync entry point - runs async app."""
|
|
118
150
|
try:
|
|
@@ -125,6 +157,9 @@ def start_app() -> None:
|
|
|
125
157
|
|
|
126
158
|
async def astart_app() -> None:
|
|
127
159
|
"""New async app entry point."""
|
|
160
|
+
# Verify API key is set before starting
|
|
161
|
+
_ensure_api_key()
|
|
162
|
+
|
|
128
163
|
# Initialize event queue in main thread
|
|
129
164
|
griptape_nodes.EventManager().initialize_queue()
|
|
130
165
|
|
|
@@ -154,6 +189,22 @@ def _start_websocket_connection() -> None:
|
|
|
154
189
|
|
|
155
190
|
# Run the async WebSocket tasks
|
|
156
191
|
loop.run_until_complete(_run_websocket_tasks())
|
|
192
|
+
except ConnectionError:
|
|
193
|
+
# Connection failed - likely due to invalid/missing API key
|
|
194
|
+
message = Panel(
|
|
195
|
+
Align.center(
|
|
196
|
+
"[bold red]Failed to connect to Nodes API.[/bold red]\n\n"
|
|
197
|
+
"This usually indicates an invalid or missing [code]GT_CLOUD_API_KEY[/code].\n\n"
|
|
198
|
+
"[bold red]Please verify your API key:[/bold red]\n"
|
|
199
|
+
"[code]gtn init --api-key <your key>[/code]\n\n"
|
|
200
|
+
"[bold red]You can generate a new key from [/bold red][bold blue][link=https://nodes.griptape.ai]https://nodes.griptape.ai[/link][/bold blue]",
|
|
201
|
+
),
|
|
202
|
+
title="[red]X[/red] Connection Failed",
|
|
203
|
+
border_style="red",
|
|
204
|
+
padding=(1, 4),
|
|
205
|
+
)
|
|
206
|
+
console.print(message)
|
|
207
|
+
sys.exit(1)
|
|
157
208
|
except Exception as e:
|
|
158
209
|
logger.error("WebSocket thread error: %s", e)
|
|
159
210
|
raise
|
|
@@ -65,8 +65,7 @@ class BaseNodeGroup(BaseNode):
|
|
|
65
65
|
Args:
|
|
66
66
|
nodes: A list of nodes to add to this group
|
|
67
67
|
"""
|
|
68
|
-
|
|
69
|
-
self.nodes[node.name] = node
|
|
68
|
+
self._add_nodes_to_group_dict(nodes)
|
|
70
69
|
|
|
71
70
|
node_names_in_group = set(self.nodes.keys())
|
|
72
71
|
self.metadata["node_names_in_group"] = list(node_names_in_group)
|
|
@@ -93,3 +92,24 @@ class BaseNodeGroup(BaseNode):
|
|
|
93
92
|
if node.name not in self.nodes:
|
|
94
93
|
msg = f"Node {node.name} is not in node group {self.name}"
|
|
95
94
|
raise ValueError(msg)
|
|
95
|
+
|
|
96
|
+
def handle_child_node_rename(self, old_name: str, new_name: str) -> None:
|
|
97
|
+
"""Update group membership when a child node is renamed.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
old_name: The old name of the child node
|
|
101
|
+
new_name: The new name of the child node
|
|
102
|
+
"""
|
|
103
|
+
if old_name not in self.nodes:
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
# Update the nodes dictionary
|
|
107
|
+
node = self.nodes.pop(old_name)
|
|
108
|
+
self.nodes[new_name] = node
|
|
109
|
+
|
|
110
|
+
# Update the metadata
|
|
111
|
+
node_names_in_group = self.metadata.get("node_names_in_group", [])
|
|
112
|
+
if old_name in node_names_in_group:
|
|
113
|
+
node_names_in_group.remove(old_name)
|
|
114
|
+
node_names_in_group.append(new_name)
|
|
115
|
+
self.metadata["node_names_in_group"] = node_names_in_group
|
|
@@ -1623,7 +1623,7 @@ class EndNode(BaseNode):
|
|
|
1623
1623
|
self,
|
|
1624
1624
|
was_successful_modes={ParameterMode.PROPERTY},
|
|
1625
1625
|
result_details_modes={ParameterMode.INPUT},
|
|
1626
|
-
parameter_group_initially_collapsed=
|
|
1626
|
+
parameter_group_initially_collapsed=True,
|
|
1627
1627
|
result_details_placeholder="Details about the completion or failure will be shown here.",
|
|
1628
1628
|
)
|
|
1629
1629
|
|
|
@@ -83,6 +83,17 @@ class ExecutionStatusComponent:
|
|
|
83
83
|
"""
|
|
84
84
|
return self._status_group
|
|
85
85
|
|
|
86
|
+
def _update_status_group_display_label(self, *, show_warning: bool) -> None:
|
|
87
|
+
"""Update the Status ParameterGroup display label with optional warning emoji."""
|
|
88
|
+
if show_warning:
|
|
89
|
+
self._status_group.update_ui_options_key("display_name", "⚠️ Status")
|
|
90
|
+
return
|
|
91
|
+
|
|
92
|
+
# Remove display_name to use default "Status" from name
|
|
93
|
+
ui_options = self._status_group.ui_options.copy()
|
|
94
|
+
ui_options.pop("display_name", None)
|
|
95
|
+
self._status_group.ui_options = ui_options
|
|
96
|
+
|
|
86
97
|
def set_execution_result(self, *, was_successful: bool, result_details: str) -> None:
|
|
87
98
|
"""Set the execution result values.
|
|
88
99
|
|
|
@@ -92,6 +103,16 @@ class ExecutionStatusComponent:
|
|
|
92
103
|
"""
|
|
93
104
|
self._update_parameter_value(self._was_successful, was_successful)
|
|
94
105
|
self._update_parameter_value(self._result_details, result_details)
|
|
106
|
+
# Update display label: show warning emoji only on actual failure (not placeholder/initialization messages)
|
|
107
|
+
# While string matching is not the best practice, it's currently the only way to check for placeholder messages.
|
|
108
|
+
# TODO: use a better approach to check for placeholder messages. https://github.com/griptape-ai/griptape-nodes/issues/3686
|
|
109
|
+
is_placeholder = result_details in (
|
|
110
|
+
"<Results will appear when the node executes>",
|
|
111
|
+
"Beginning execution...",
|
|
112
|
+
"",
|
|
113
|
+
)
|
|
114
|
+
show_warning = not was_successful and not is_placeholder
|
|
115
|
+
self._update_status_group_display_label(show_warning=show_warning)
|
|
95
116
|
|
|
96
117
|
def clear_execution_status(self, initial_message: str | None = None) -> None:
|
|
97
118
|
"""Clear execution status and reset parameters.
|
|
@@ -102,6 +123,8 @@ class ExecutionStatusComponent:
|
|
|
102
123
|
if initial_message is None:
|
|
103
124
|
initial_message = ""
|
|
104
125
|
self.set_execution_result(was_successful=False, result_details=initial_message)
|
|
126
|
+
# Reset to "Status" during execution (not a failure yet)
|
|
127
|
+
self._update_status_group_display_label(show_warning=False)
|
|
105
128
|
|
|
106
129
|
def append_to_result_details(self, additional_text: str, separator: str = "\n") -> None:
|
|
107
130
|
"""Append text to the existing result_details.
|
|
@@ -20,7 +20,7 @@ class LogParameter:
|
|
|
20
20
|
output_type="str",
|
|
21
21
|
allowed_modes={ParameterMode.OUTPUT},
|
|
22
22
|
tooltip="logs",
|
|
23
|
-
ui_options={"multiline": True},
|
|
23
|
+
ui_options={"multiline": True, "placeholder_text": ""},
|
|
24
24
|
)
|
|
25
25
|
)
|
|
26
26
|
|
|
@@ -68,6 +68,10 @@ class StdoutCapture:
|
|
|
68
68
|
def flush(self) -> None:
|
|
69
69
|
self._original_stdout.flush()
|
|
70
70
|
|
|
71
|
+
def isatty(self) -> bool:
|
|
72
|
+
# Return False to prevent libraries from outputting ANSI color codes
|
|
73
|
+
return False
|
|
74
|
+
|
|
71
75
|
def __enter__(self) -> "StdoutCapture":
|
|
72
76
|
sys.stdout = self
|
|
73
77
|
return self
|
|
@@ -3,6 +3,8 @@ from typing import Any
|
|
|
3
3
|
|
|
4
4
|
from griptape_nodes.exe_types.core_types import Parameter, ParameterMode
|
|
5
5
|
from griptape_nodes.exe_types.node_types import BaseNode
|
|
6
|
+
from griptape_nodes.exe_types.param_types.parameter_bool import ParameterBool
|
|
7
|
+
from griptape_nodes.exe_types.param_types.parameter_int import ParameterInt
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
class SeedParameter:
|
|
@@ -10,24 +12,20 @@ class SeedParameter:
|
|
|
10
12
|
self._node = node
|
|
11
13
|
self._max_seed = max_seed
|
|
12
14
|
|
|
13
|
-
def add_input_parameters(self) -> None:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
output_type="bool",
|
|
19
|
-
tooltip="randomize the seed on each run",
|
|
20
|
-
default_value=False,
|
|
21
|
-
)
|
|
15
|
+
def add_input_parameters(self, *, inside_param_group: bool = False) -> None:
|
|
16
|
+
randomize_seed_parameter = ParameterBool(
|
|
17
|
+
name="randomize_seed",
|
|
18
|
+
tooltip="randomize the seed on each run",
|
|
19
|
+
default_value=False,
|
|
22
20
|
)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
tooltip="seed",
|
|
28
|
-
default_value=42,
|
|
29
|
-
)
|
|
21
|
+
seed_parameter = ParameterInt(
|
|
22
|
+
name="seed",
|
|
23
|
+
tooltip="the seed to use for the generation",
|
|
24
|
+
default_value=42,
|
|
30
25
|
)
|
|
26
|
+
if not inside_param_group:
|
|
27
|
+
self._node.add_parameter(randomize_seed_parameter)
|
|
28
|
+
self._node.add_parameter(seed_parameter)
|
|
31
29
|
|
|
32
30
|
def remove_input_parameters(self) -> None:
|
|
33
31
|
self._node.remove_parameter_element_by_name("randomize_seed")
|
|
@@ -390,8 +390,6 @@ class GetAllNodeInfoResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure)
|
|
|
390
390
|
class SetLockNodeStateRequest(WorkflowNotAlteredMixin, RequestPayload):
|
|
391
391
|
"""Lock a node.
|
|
392
392
|
|
|
393
|
-
Use when: Implementing locking functionality, preventing changes to nodes.
|
|
394
|
-
|
|
395
393
|
Args:
|
|
396
394
|
node_name: Name of the node to lock
|
|
397
395
|
lock: Whether to lock or unlock the node. If true, the node will be locked, otherwise it will be unlocked.
|
|
@@ -418,6 +416,39 @@ class SetLockNodeStateResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailur
|
|
|
418
416
|
"""Node failed to lock."""
|
|
419
417
|
|
|
420
418
|
|
|
419
|
+
@dataclass
|
|
420
|
+
@PayloadRegistry.register
|
|
421
|
+
class BatchSetNodeLockStateRequest(WorkflowNotAlteredMixin, RequestPayload):
|
|
422
|
+
"""Set lock state for multiple nodes in a single request.
|
|
423
|
+
|
|
424
|
+
Use when: Locking or unlocking multiple nodes at once, consistent with BatchSetNodeMetadataRequest.
|
|
425
|
+
|
|
426
|
+
Args:
|
|
427
|
+
node_names: Names of nodes to lock/unlock.
|
|
428
|
+
lock: Whether to lock (True) or unlock (False) the nodes.
|
|
429
|
+
|
|
430
|
+
Results: BatchSetNodeLockStateResultSuccess | BatchSetNodeLockStateResultFailure
|
|
431
|
+
"""
|
|
432
|
+
|
|
433
|
+
node_names: list[str]
|
|
434
|
+
lock: bool
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
@dataclass
|
|
438
|
+
@PayloadRegistry.register
|
|
439
|
+
class BatchSetNodeLockStateResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
440
|
+
"""Batch node lock state update completed successfully."""
|
|
441
|
+
|
|
442
|
+
updated_nodes: list[str]
|
|
443
|
+
failed_nodes: dict[str, str] = field(default_factory=dict)
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
@dataclass
|
|
447
|
+
@PayloadRegistry.register
|
|
448
|
+
class BatchSetNodeLockStateResultFailure(ResultPayloadFailure):
|
|
449
|
+
"""Batch node lock state update failed. Common causes: all nodes not found."""
|
|
450
|
+
|
|
451
|
+
|
|
421
452
|
# A Node's state can be serialized to a sequence of commands that the engine runs.
|
|
422
453
|
@dataclass
|
|
423
454
|
class SerializedNodeCommands:
|
|
@@ -533,6 +564,7 @@ class SerializeNodeToCommandsRequest(RequestPayload):
|
|
|
533
564
|
serialized_parameter_value_tracker: SerializedParameterValueTracker = field(
|
|
534
565
|
default_factory=SerializedParameterValueTracker
|
|
535
566
|
)
|
|
567
|
+
use_pickling: bool = False
|
|
536
568
|
|
|
537
569
|
|
|
538
570
|
@dataclass
|
|
@@ -617,7 +649,8 @@ class SerializeSelectedNodesToCommandsResultSuccess(WorkflowNotAlteredMixin, Res
|
|
|
617
649
|
|
|
618
650
|
# They will be passed with node_name, timestamp
|
|
619
651
|
# Could be a flow command if it's all nodes in a flow.
|
|
620
|
-
serialized_selected_node_commands:
|
|
652
|
+
serialized_selected_node_commands: str
|
|
653
|
+
pickled_values: dict[str, str]
|
|
621
654
|
|
|
622
655
|
|
|
623
656
|
@dataclass
|
|
@@ -643,6 +676,8 @@ class DeserializeSelectedNodesFromCommandsRequest(WorkflowNotAlteredMixin, Reque
|
|
|
643
676
|
Results: DeserializeSelectedNodesFromCommandsResultSuccess (with node names) | DeserializeSelectedNodesFromCommandsResultFailure (deserialization error)
|
|
644
677
|
"""
|
|
645
678
|
|
|
679
|
+
deserialize_commands: str
|
|
680
|
+
pickled_values: dict[str, str]
|
|
646
681
|
positions: list[NewPosition] | None = None
|
|
647
682
|
|
|
648
683
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import TYPE_CHECKING
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
5
|
|
|
6
6
|
from griptape_nodes.exe_types.flow import ControlFlow
|
|
7
7
|
from griptape_nodes.retained_mode.events.context_events import (
|
|
@@ -18,8 +18,6 @@ if TYPE_CHECKING:
|
|
|
18
18
|
from griptape_nodes.exe_types.core_types import BaseNodeElement
|
|
19
19
|
from griptape_nodes.exe_types.node_types import BaseNode
|
|
20
20
|
from griptape_nodes.retained_mode.events.base_events import ResultPayload
|
|
21
|
-
from griptape_nodes.retained_mode.events.flow_events import SerializedFlowCommands
|
|
22
|
-
from griptape_nodes.retained_mode.events.node_events import SerializedSelectedNodesCommands
|
|
23
21
|
from griptape_nodes.retained_mode.managers.event_manager import EventManager
|
|
24
22
|
|
|
25
23
|
logger = logging.getLogger("griptape_nodes")
|
|
@@ -34,7 +32,6 @@ class ContextManager:
|
|
|
34
32
|
"""
|
|
35
33
|
|
|
36
34
|
_workflow_stack: list[ContextManager.WorkflowContextState]
|
|
37
|
-
_clipboard: ClipBoard
|
|
38
35
|
|
|
39
36
|
class WorkflowContextError(Exception):
|
|
40
37
|
"""Base exception for workflow context errors."""
|
|
@@ -242,32 +239,9 @@ class ContextManager:
|
|
|
242
239
|
) -> None:
|
|
243
240
|
self._manager.pop_element()
|
|
244
241
|
|
|
245
|
-
class ClipBoard:
|
|
246
|
-
"""Keeps Commands for Copying or Pasting."""
|
|
247
|
-
|
|
248
|
-
# Contains flow, node, parameter, connections
|
|
249
|
-
flow_commands: SerializedFlowCommands | None
|
|
250
|
-
# Contains node and Parameter and relevant connections
|
|
251
|
-
node_commands: SerializedSelectedNodesCommands | None
|
|
252
|
-
parameter_uuid_to_values: dict[str, Any] | None
|
|
253
|
-
|
|
254
|
-
def __init__(self) -> None:
|
|
255
|
-
self.flow_commands = None
|
|
256
|
-
self.node_commands = None
|
|
257
|
-
self.parameter_uuid_to_values = None
|
|
258
|
-
|
|
259
|
-
def clear(self) -> None:
|
|
260
|
-
del self.flow_commands
|
|
261
|
-
self.flow_commands = None
|
|
262
|
-
del self.node_commands
|
|
263
|
-
self.node_commands = None
|
|
264
|
-
if self.parameter_uuid_to_values is not None:
|
|
265
|
-
self.parameter_uuid_to_values.clear()
|
|
266
|
-
|
|
267
242
|
def __init__(self, event_manager: EventManager) -> None:
|
|
268
243
|
"""Initialize the context manager with empty workflow and flow stacks."""
|
|
269
244
|
self._workflow_stack = []
|
|
270
|
-
self._clipboard = self.ClipBoard()
|
|
271
245
|
event_manager.assign_manager_to_request_type(
|
|
272
246
|
request_type=SetWorkflowContextRequest, callback=self.on_set_workflow_context_request
|
|
273
247
|
)
|
|
@@ -17,7 +17,7 @@ from griptape_nodes.exe_types.core_types import (
|
|
|
17
17
|
ParameterTypeBuiltin,
|
|
18
18
|
)
|
|
19
19
|
from griptape_nodes.exe_types.flow import ControlFlow
|
|
20
|
-
from griptape_nodes.exe_types.node_groups import SubflowNodeGroup
|
|
20
|
+
from griptape_nodes.exe_types.node_groups import BaseNodeGroup, SubflowNodeGroup
|
|
21
21
|
from griptape_nodes.exe_types.node_types import (
|
|
22
22
|
BaseNode,
|
|
23
23
|
ErrorProxyNode,
|
|
@@ -1530,9 +1530,9 @@ class FlowManager:
|
|
|
1530
1530
|
if node_name is not None:
|
|
1531
1531
|
node_name_to_uuid[node_name] = serialize_result.serialized_node_commands.node_uuid
|
|
1532
1532
|
|
|
1533
|
-
#
|
|
1533
|
+
# BaseNodeGroups must be serialized LAST because they reference child node names via node_names_to_add
|
|
1534
1534
|
# If we deserialize a NodeGroup before its children, the child nodes won't exist yet
|
|
1535
|
-
if isinstance(node,
|
|
1535
|
+
if isinstance(node, BaseNodeGroup):
|
|
1536
1536
|
serialized_node_group_commands.append(serialize_result.serialized_node_commands)
|
|
1537
1537
|
else:
|
|
1538
1538
|
serialized_node_commands.append(serialize_result.serialized_node_commands)
|
|
@@ -1543,7 +1543,7 @@ class FlowManager:
|
|
|
1543
1543
|
serialize_result.set_parameter_value_commands
|
|
1544
1544
|
)
|
|
1545
1545
|
|
|
1546
|
-
# Update
|
|
1546
|
+
# Update BaseNodeGroup commands to use UUIDs instead of names in node_names_to_add
|
|
1547
1547
|
# This allows workflow generation to directly look up variable names from UUIDs
|
|
1548
1548
|
|
|
1549
1549
|
for node_group_command in serialized_node_group_commands:
|
|
@@ -3224,9 +3224,9 @@ class FlowManager:
|
|
|
3224
3224
|
# Store the serialized node's UUID for correlation to connections and setting parameter values later.
|
|
3225
3225
|
node_name_to_uuid[node_name] = serialized_node.node_uuid
|
|
3226
3226
|
|
|
3227
|
-
#
|
|
3227
|
+
# BaseNodeGroups must be serialized LAST because CreateNodeGroupRequest references child node names
|
|
3228
3228
|
# If we deserialize a NodeGroup before its children, the child nodes won't exist yet
|
|
3229
|
-
if isinstance(node,
|
|
3229
|
+
if isinstance(node, BaseNodeGroup):
|
|
3230
3230
|
serialized_node_group_commands.append(serialized_node)
|
|
3231
3231
|
else:
|
|
3232
3232
|
serialized_node_commands.append(serialized_node)
|
|
@@ -3299,7 +3299,7 @@ class FlowManager:
|
|
|
3299
3299
|
# This ensures child nodes exist before their parent NodeGroups are created during deserialization
|
|
3300
3300
|
serialized_node_commands.extend(serialized_node_group_commands)
|
|
3301
3301
|
|
|
3302
|
-
# Update
|
|
3302
|
+
# Update BaseNodeGroup commands to use UUIDs instead of names in node_names_to_add
|
|
3303
3303
|
# This allows workflow generation to directly look up variable names from UUIDs
|
|
3304
3304
|
# Build a complete node name to UUID map including nodes from all subflows
|
|
3305
3305
|
complete_node_name_to_uuid = dict(node_name_to_uuid) # Start with current flow's nodes
|