griptape-nodes 0.63.0__tar.gz → 0.63.1__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.63.0 → griptape_nodes-0.63.1}/PKG-INFO +2 -2
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/pyproject.toml +2 -2
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/models.py +21 -4
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/model_events.py +4 -4
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/model_manager.py +182 -205
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/README.md +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/__main__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/api_client/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/api_client/client.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/api_client/request_client.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/app/.python-version +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/app/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/app/app.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/app/watch.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/utils/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/utils/python_subprocess_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/utils/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/utils/subprocess_script.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_publishers/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_publishers/local_workflow_publisher.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_publishers/utils/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/config.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/engine.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/init.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/libraries.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/commands/self.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/main.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/cli/shared.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/directed_graph.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/core.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/exceptions.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/formats.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/matching.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/parsing.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/resolution.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/macro_parser/segments.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/node_executor.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/default_project_template.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/defaults/README.md +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/directory.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/loader.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/project.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/situation.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/common/project_templates/validation.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/storage/local_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/thread_storage/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/thread_storage/base_thread_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/thread_storage/griptape_cloud_thread_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/thread_storage/local_thread_storage_driver.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/drivers/thread_storage/thread_storage_backend.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/connections.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/core_types.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/flow.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/node_types.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/execution_status_component.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/huggingface/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/log_parameter.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/progress_bar_component.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_components/seed_parameter.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_audio.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_bool.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_float.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_image.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_int.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_number.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_string.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_three_d.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/param_types/parameter_video.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/exe_types/type_validator.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/control_flow.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/dag_builder.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/fsm.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/parallel_resolution.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/machines/sequential_resolution.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/mcp_server/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/node_library/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/node_library/library_registry.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/node_library/workflow_registry.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/py.typed +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/agent_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/app_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/base_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/connection_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/execution_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/flow_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/library_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/mcp_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/node_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/os_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/project_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/resource_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/variable_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/events/workflow_events.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/griptape_nodes.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/config_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/context_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/event_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/after_library_callback_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/before_library_callback_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/create_config_category_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/dependency_installation_failed_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/deprecated_node_warning_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_library_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_node_registration_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/engine_version_error_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/insufficient_disk_space_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/invalid_version_string_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_json_decode_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_load_exception_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_not_found_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_exception_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_validation_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_deprecation_warning_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_removed_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_base_node_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_found_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_module_import_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/sandbox_directory_missing_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_incompatible_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_warning_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/update_config_category_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/venv_creation_failed_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/deprecated_node_in_workflow_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_dependency_version_string_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_library_version_string_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_schema_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_section_count_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_toml_format_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_not_registered_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_below_required_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_large_difference_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_major_mismatch_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_minor_difference_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_creation_date_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_last_modified_date_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_toml_section_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_found_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/flow_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/library_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/mcp_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/node_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/object_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/project_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_components/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_components/capability_field.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_components/comparator.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_components/resource_instance.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_components/resource_type.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_types/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_types/cpu_resource.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/resource_types/os_resource.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/settings.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/sync_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/user_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/variable_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/retained_mode.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/retained_mode/variable_types.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/servers/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/servers/mcp.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/servers/static.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/add_param_button.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/button.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/clamp.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/color_picker.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/compare.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/compare_images.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/file_system_picker.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/minmax.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/multi_options.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/numbers_selector.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/options.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/slider.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/trait_registry.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/traits/traits.json +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/updater/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/updater/__main__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/async_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/dict_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/huggingface_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/image_preview.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/metaclasses.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/uv_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/utils/version_utils.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py +0 -0
- {griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: griptape-nodes
|
|
3
|
-
Version: 0.63.
|
|
3
|
+
Version: 0.63.1
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
Requires-Dist: griptape>=1.8.12
|
|
6
6
|
Requires-Dist: pydantic>=2.10.6
|
|
@@ -20,7 +20,7 @@ Requires-Dist: binaryornot>=0.4.4
|
|
|
20
20
|
Requires-Dist: pillow>=11.3.0
|
|
21
21
|
Requires-Dist: watchfiles>=1.1.0
|
|
22
22
|
Requires-Dist: typer>=0.15.0
|
|
23
|
-
Requires-Dist: huggingface-hub>=1.0
|
|
23
|
+
Requires-Dist: huggingface-hub>=1.1.0
|
|
24
24
|
Requires-Dist: rich>=14.1.0
|
|
25
25
|
Requires-Dist: semver>=3.0.4
|
|
26
26
|
Requires-Dist: aiofiles>=25.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "griptape-nodes"
|
|
3
|
-
version = "0.63.
|
|
3
|
+
version = "0.63.1"
|
|
4
4
|
description = "Add your description here"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12.0, <3.13"
|
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
|
24
24
|
"pillow>=11.3.0",
|
|
25
25
|
"watchfiles>=1.1.0",
|
|
26
26
|
"typer>=0.15.0",
|
|
27
|
-
"huggingface-hub>=1.0
|
|
27
|
+
"huggingface-hub>=1.1.0",
|
|
28
28
|
"rich>=14.1.0",
|
|
29
29
|
"semver>=3.0.4",
|
|
30
30
|
"aiofiles>=25.1.0",
|
|
@@ -239,19 +239,36 @@ def _format_download_row(download: "ModelDownloadStatus") -> tuple[str, str, str
|
|
|
239
239
|
|
|
240
240
|
def _format_progress(download: "ModelDownloadStatus") -> str:
|
|
241
241
|
"""Format download progress information."""
|
|
242
|
-
if download.
|
|
243
|
-
progress_percent = (download.
|
|
242
|
+
if download.total_bytes is not None and download.completed_bytes is not None and download.total_bytes > 0:
|
|
243
|
+
progress_percent = (download.completed_bytes / download.total_bytes) * 100
|
|
244
244
|
return f"{progress_percent:.1f}%"
|
|
245
245
|
return "Unknown"
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
def _format_size(download: "ModelDownloadStatus") -> str:
|
|
249
249
|
"""Format download size information."""
|
|
250
|
-
if download.
|
|
251
|
-
return f"{download.
|
|
250
|
+
if download.total_bytes is not None and download.completed_bytes is not None:
|
|
251
|
+
return f"{_format_bytes(download.completed_bytes)}/{_format_bytes(download.total_bytes)}"
|
|
252
252
|
return "Unknown"
|
|
253
253
|
|
|
254
254
|
|
|
255
|
+
def _format_bytes(num_bytes: int) -> str:
|
|
256
|
+
"""Format bytes to human-readable string."""
|
|
257
|
+
if num_bytes == 0:
|
|
258
|
+
return "0 B"
|
|
259
|
+
|
|
260
|
+
bytes_per_unit = 1024.0
|
|
261
|
+
units = ["B", "KB", "MB", "GB", "TB"]
|
|
262
|
+
unit_index = 0
|
|
263
|
+
size = float(num_bytes)
|
|
264
|
+
|
|
265
|
+
while size >= bytes_per_unit and unit_index < len(units) - 1:
|
|
266
|
+
size /= bytes_per_unit
|
|
267
|
+
unit_index += 1
|
|
268
|
+
|
|
269
|
+
return f"{size:.2f} {units[unit_index]}"
|
|
270
|
+
|
|
271
|
+
|
|
255
272
|
def _format_eta(download: "ModelDownloadStatus") -> str:
|
|
256
273
|
"""Format estimated time of arrival."""
|
|
257
274
|
# ETA is not available in the current ModelDownloadStatus structure
|
|
@@ -171,15 +171,15 @@ class ListModelDownloadsRequest(RequestPayload):
|
|
|
171
171
|
|
|
172
172
|
@dataclass
|
|
173
173
|
class ModelDownloadStatus:
|
|
174
|
-
"""Model download status tracking
|
|
174
|
+
"""Model download status tracking byte-level progress."""
|
|
175
175
|
|
|
176
176
|
model_id: str
|
|
177
177
|
status: str # "downloading", "completed", "failed"
|
|
178
178
|
started_at: str
|
|
179
179
|
updated_at: str
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
total_bytes: int | None = None
|
|
181
|
+
completed_bytes: int | None = None
|
|
182
|
+
failed_bytes: int | None = None
|
|
183
183
|
# Optional fields for completed downloads
|
|
184
184
|
completed_at: str | None = None
|
|
185
185
|
local_path: str | None = None
|
|
@@ -9,7 +9,7 @@ import threading
|
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from datetime import UTC, datetime
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import TYPE_CHECKING
|
|
12
|
+
from typing import TYPE_CHECKING
|
|
13
13
|
from urllib.parse import urlparse
|
|
14
14
|
|
|
15
15
|
from huggingface_hub import list_models, scan_cache_dir, snapshot_download
|
|
@@ -76,144 +76,186 @@ class DownloadParams:
|
|
|
76
76
|
ignore_patterns: list[str] | None = None
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
"""
|
|
79
|
+
def _create_progress_tracker(model_id: str) -> type[tqdm]: # noqa: C901
|
|
80
|
+
"""Create a tqdm class with model_id pre-configured.
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
Args:
|
|
83
|
+
model_id: The model ID to track progress for
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
Returns:
|
|
86
|
+
A tqdm class that will track progress for the given model
|
|
87
|
+
"""
|
|
88
|
+
logger.info("Creating progress tracker for model: %s", model_id)
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
model_id = self._current_model_id
|
|
90
|
+
class BoundModelDownloadTracker(tqdm):
|
|
91
|
+
"""Tqdm subclass bound to a specific model_id."""
|
|
93
92
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
self.start_time = datetime.now(UTC).isoformat()
|
|
93
|
+
_file_lock = threading.Lock()
|
|
94
|
+
_first_update = True
|
|
97
95
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
self.model_id
|
|
101
|
-
self.
|
|
102
|
-
|
|
103
|
-
args,
|
|
104
|
-
)
|
|
96
|
+
def __init__(self, *args, **kwargs) -> None:
|
|
97
|
+
super().__init__(*args, **kwargs)
|
|
98
|
+
self.model_id = model_id
|
|
99
|
+
self.start_time = datetime.now(UTC).isoformat()
|
|
100
|
+
self._cumulative_bytes = 0
|
|
105
101
|
|
|
106
|
-
|
|
107
|
-
self
|
|
108
|
-
|
|
109
|
-
def update(self, n: int = 1) -> None:
|
|
110
|
-
"""Override update to track progress in status file."""
|
|
111
|
-
logger.debug(
|
|
112
|
-
"ModelDownloadTracker update - model_id: %s, n: %s, self.n: %s, total: %s",
|
|
113
|
-
self.model_id,
|
|
114
|
-
n,
|
|
115
|
-
self.n,
|
|
116
|
-
self.total,
|
|
117
|
-
)
|
|
118
|
-
super().update(n)
|
|
119
|
-
self._update_status_file()
|
|
120
|
-
|
|
121
|
-
def close(self) -> None:
|
|
122
|
-
"""Override close to log download completion."""
|
|
123
|
-
super().close()
|
|
124
|
-
self._update_status_file() # Write final state to status file
|
|
125
|
-
logger.debug(
|
|
126
|
-
"ModelDownloadTracker close - model_id: %s, self.n: %s, total: %s", self.model_id, self.n, self.total
|
|
127
|
-
)
|
|
102
|
+
# Check if this is a byte-level progress bar or file enumeration bar
|
|
103
|
+
unit = getattr(self, "unit", "")
|
|
104
|
+
desc = getattr(self, "desc", "")
|
|
128
105
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
status_dir.mkdir(parents=True, exist_ok=True)
|
|
133
|
-
|
|
134
|
-
sanitized_model_id = re.sub(r"[^\w\-_]", "--", self.model_id)
|
|
135
|
-
return status_dir / f"{sanitized_model_id}.json"
|
|
136
|
-
|
|
137
|
-
def _init_status_file(self) -> None:
|
|
138
|
-
"""Initialize the status file for this model."""
|
|
139
|
-
try:
|
|
140
|
-
with self._file_lock:
|
|
141
|
-
status_file = self._get_status_file_path()
|
|
142
|
-
current_time = datetime.now(UTC).isoformat()
|
|
106
|
+
# Skip file enumeration bars (unit='it', desc='Fetching N files')
|
|
107
|
+
# We only want to track byte-level download progress
|
|
108
|
+
self._should_track = not (unit == "it" and "Fetching" in str(desc))
|
|
143
109
|
|
|
110
|
+
if not self._should_track:
|
|
144
111
|
logger.debug(
|
|
145
|
-
"ModelDownloadTracker
|
|
112
|
+
"ModelDownloadTracker skipping file enumeration bar - model_id: %s, desc: '%s'",
|
|
113
|
+
self.model_id,
|
|
114
|
+
desc,
|
|
146
115
|
)
|
|
116
|
+
return
|
|
147
117
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
"progress_percent": 0.0,
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
with status_file.open("w") as f:
|
|
159
|
-
json.dump(data, f, indent=2)
|
|
118
|
+
logger.debug(
|
|
119
|
+
"ModelDownloadTracker instantiated for tracking - model_id: %s, total: %s, unit: %s, desc: '%s'",
|
|
120
|
+
self.model_id,
|
|
121
|
+
self.total,
|
|
122
|
+
unit,
|
|
123
|
+
desc,
|
|
124
|
+
)
|
|
160
125
|
|
|
161
|
-
|
|
126
|
+
if self.model_id:
|
|
127
|
+
self._init_status_file()
|
|
162
128
|
|
|
163
|
-
|
|
164
|
-
|
|
129
|
+
def update(self, n: int = 1) -> None:
|
|
130
|
+
"""Override update to track progress in status file."""
|
|
131
|
+
super().update(n)
|
|
132
|
+
self._cumulative_bytes += n
|
|
165
133
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
logger.warning("ModelDownloadTracker._update_status_file called with empty model_id")
|
|
170
|
-
return
|
|
134
|
+
# Skip if not tracking this progress bar
|
|
135
|
+
if not getattr(self, "_should_track", True):
|
|
136
|
+
return
|
|
171
137
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
138
|
+
if self._first_update:
|
|
139
|
+
logger.debug("ModelDownloadTracker received first update for model: %s", self.model_id)
|
|
140
|
+
self._first_update = False
|
|
141
|
+
|
|
142
|
+
logger.debug(
|
|
143
|
+
"ModelDownloadTracker update - model_id: %s, added: %s, now: %s/%s (%.1f%%)",
|
|
144
|
+
self.model_id,
|
|
145
|
+
n,
|
|
146
|
+
self._cumulative_bytes,
|
|
147
|
+
self.total,
|
|
148
|
+
(self._cumulative_bytes / self.total * 100) if self.total else 0,
|
|
149
|
+
)
|
|
150
|
+
self._update_status_file(mark_completed=False)
|
|
176
151
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
152
|
+
def close(self) -> None:
|
|
153
|
+
"""Override close to mark download as completed only if fully downloaded."""
|
|
154
|
+
super().close()
|
|
180
155
|
|
|
181
|
-
|
|
182
|
-
|
|
156
|
+
# Skip if not tracking this progress bar
|
|
157
|
+
if not getattr(self, "_should_track", True):
|
|
158
|
+
return
|
|
183
159
|
|
|
184
|
-
|
|
185
|
-
|
|
160
|
+
# Only mark as completed if we actually downloaded everything
|
|
161
|
+
is_complete = self.total > 0 and self._cumulative_bytes >= self.total
|
|
186
162
|
|
|
163
|
+
if is_complete:
|
|
187
164
|
logger.info(
|
|
188
|
-
"ModelDownloadTracker
|
|
189
|
-
self.
|
|
165
|
+
"ModelDownloadTracker closed - model_id: %s, downloaded: %s/%s bytes (COMPLETE)",
|
|
166
|
+
self.model_id,
|
|
167
|
+
self._cumulative_bytes,
|
|
168
|
+
self.total,
|
|
169
|
+
)
|
|
170
|
+
self._update_status_file(mark_completed=True)
|
|
171
|
+
else:
|
|
172
|
+
logger.warning(
|
|
173
|
+
"ModelDownloadTracker closed prematurely - model_id: %s, downloaded: %s/%s bytes (%.1f%%)",
|
|
174
|
+
self.model_id,
|
|
175
|
+
self._cumulative_bytes,
|
|
190
176
|
self.total,
|
|
191
|
-
|
|
177
|
+
(self._cumulative_bytes / self.total * 100) if self.total else 0,
|
|
192
178
|
)
|
|
179
|
+
# Don't mark as completed - leave status as "downloading" or "failed"
|
|
180
|
+
self._update_status_file(mark_completed=False)
|
|
193
181
|
|
|
194
|
-
|
|
195
|
-
|
|
182
|
+
def _get_status_file_path(self) -> Path:
|
|
183
|
+
"""Get the path to the status file for this model."""
|
|
184
|
+
status_dir = xdg_data_home() / "griptape_nodes" / "model_downloads"
|
|
185
|
+
status_dir.mkdir(parents=True, exist_ok=True)
|
|
196
186
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
187
|
+
sanitized_model_id = re.sub(r"[^\w\-_]", "--", self.model_id)
|
|
188
|
+
return status_dir / f"{sanitized_model_id}.json"
|
|
189
|
+
|
|
190
|
+
def _init_status_file(self) -> None:
|
|
191
|
+
"""Initialize the status file for this model."""
|
|
192
|
+
try:
|
|
193
|
+
with self._file_lock:
|
|
194
|
+
status_file = self._get_status_file_path()
|
|
195
|
+
current_time = datetime.now(UTC).isoformat()
|
|
196
|
+
|
|
197
|
+
data = {
|
|
198
|
+
"model_id": self.model_id,
|
|
199
|
+
"status": "downloading",
|
|
200
|
+
"started_at": current_time,
|
|
201
|
+
"updated_at": current_time,
|
|
202
|
+
"total_bytes": self.total or 0,
|
|
203
|
+
"downloaded_bytes": 0,
|
|
204
|
+
"progress_percent": 0.0,
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
with status_file.open("w") as f:
|
|
208
|
+
json.dump(data, f, indent=2)
|
|
209
|
+
|
|
210
|
+
except Exception:
|
|
211
|
+
logger.exception("ModelDownloadTracker._init_status_file failed")
|
|
212
|
+
|
|
213
|
+
def _update_status_file(self, *, mark_completed: bool = False) -> None:
|
|
214
|
+
"""Update the status file with current progress.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
mark_completed: If True, mark the download as completed
|
|
218
|
+
"""
|
|
219
|
+
if not self.model_id:
|
|
220
|
+
logger.warning("ModelDownloadTracker._update_status_file called with empty model_id")
|
|
221
|
+
return
|
|
202
222
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
update_data["completed_at"] = current_time
|
|
223
|
+
try:
|
|
224
|
+
with self._file_lock:
|
|
225
|
+
status_file = self._get_status_file_path()
|
|
207
226
|
|
|
208
|
-
|
|
227
|
+
if not status_file.exists():
|
|
228
|
+
logger.warning("Status file does not exist: %s", status_file)
|
|
229
|
+
return
|
|
209
230
|
|
|
210
|
-
|
|
211
|
-
|
|
231
|
+
with status_file.open() as f:
|
|
232
|
+
data = json.load(f)
|
|
212
233
|
|
|
213
|
-
|
|
234
|
+
current_time = datetime.now(UTC).isoformat()
|
|
235
|
+
progress_percent = (self._cumulative_bytes / self.total * 100) if self.total else 0
|
|
214
236
|
|
|
215
|
-
|
|
216
|
-
|
|
237
|
+
# Always update total_bytes since it grows during aggregated downloads
|
|
238
|
+
update_data = {
|
|
239
|
+
"total_bytes": self.total or 0,
|
|
240
|
+
"downloaded_bytes": self._cumulative_bytes,
|
|
241
|
+
"progress_percent": progress_percent,
|
|
242
|
+
"updated_at": current_time,
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
# Only mark as completed when explicitly requested (from close())
|
|
246
|
+
if mark_completed:
|
|
247
|
+
update_data["status"] = "completed"
|
|
248
|
+
update_data["completed_at"] = current_time
|
|
249
|
+
|
|
250
|
+
data.update(update_data)
|
|
251
|
+
|
|
252
|
+
with status_file.open("w") as f:
|
|
253
|
+
json.dump(data, f, indent=2)
|
|
254
|
+
|
|
255
|
+
except Exception:
|
|
256
|
+
logger.exception("ModelDownloadTracker._update_status_file failed")
|
|
257
|
+
|
|
258
|
+
return BoundModelDownloadTracker
|
|
217
259
|
|
|
218
260
|
|
|
219
261
|
class ModelManager:
|
|
@@ -258,7 +300,8 @@ class ModelManager:
|
|
|
258
300
|
"""Direct model download method that can be used without event system.
|
|
259
301
|
|
|
260
302
|
This method contains the core download logic without going through
|
|
261
|
-
the event system, avoiding recursion issues.
|
|
303
|
+
the event system, avoiding recursion issues. It leverages huggingface_hub v1.1.0+
|
|
304
|
+
aggregated tqdm for clean progress tracking across parallel downloads.
|
|
262
305
|
|
|
263
306
|
Args:
|
|
264
307
|
model_id: Model ID to download
|
|
@@ -273,34 +316,28 @@ class ModelManager:
|
|
|
273
316
|
Raises:
|
|
274
317
|
Exception: If download fails
|
|
275
318
|
"""
|
|
276
|
-
#
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
"repo_type": "model",
|
|
284
|
-
"revision": revision,
|
|
285
|
-
"tqdm_class": ModelDownloadTracker,
|
|
286
|
-
}
|
|
319
|
+
# Build download kwargs with progress tracking
|
|
320
|
+
download_kwargs = {
|
|
321
|
+
"repo_id": model_id,
|
|
322
|
+
"repo_type": "model",
|
|
323
|
+
"revision": revision,
|
|
324
|
+
"tqdm_class": _create_progress_tracker(model_id),
|
|
325
|
+
}
|
|
287
326
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
327
|
+
# Add optional parameters
|
|
328
|
+
if local_dir:
|
|
329
|
+
download_kwargs["local_dir"] = local_dir
|
|
330
|
+
if allow_patterns:
|
|
331
|
+
download_kwargs["allow_patterns"] = allow_patterns
|
|
332
|
+
if ignore_patterns:
|
|
333
|
+
download_kwargs["ignore_patterns"] = ignore_patterns
|
|
295
334
|
|
|
296
|
-
|
|
297
|
-
local_path = snapshot_download(**download_kwargs) # type: ignore[arg-type]
|
|
335
|
+
logger.info("Calling snapshot_download with custom tqdm_class for model: %s", model_id)
|
|
298
336
|
|
|
299
|
-
|
|
337
|
+
# Execute download with progress tracking
|
|
338
|
+
local_path = snapshot_download(**download_kwargs) # type: ignore[arg-type]
|
|
300
339
|
|
|
301
|
-
|
|
302
|
-
# Clear the current model ID when done
|
|
303
|
-
ModelDownloadTracker.set_current_model_id("")
|
|
340
|
+
return str(local_path)
|
|
304
341
|
|
|
305
342
|
def _get_status_directory(self) -> Path:
|
|
306
343
|
"""Get the status directory path for model downloads.
|
|
@@ -407,9 +444,6 @@ class ModelManager:
|
|
|
407
444
|
Args:
|
|
408
445
|
download_params: Download parameters
|
|
409
446
|
|
|
410
|
-
Returns:
|
|
411
|
-
str: Local path where the model was downloaded
|
|
412
|
-
|
|
413
447
|
Raises:
|
|
414
448
|
Exception: If download fails
|
|
415
449
|
"""
|
|
@@ -726,23 +760,23 @@ class ModelManager:
|
|
|
726
760
|
with status_file.open() as f:
|
|
727
761
|
data = json.load(f)
|
|
728
762
|
|
|
729
|
-
# Get
|
|
730
|
-
|
|
731
|
-
|
|
763
|
+
# Get byte counts from status file
|
|
764
|
+
total_bytes = data.get("total_bytes", 0)
|
|
765
|
+
downloaded_bytes = data.get("downloaded_bytes", 0)
|
|
732
766
|
|
|
733
|
-
# For simplified tracking,
|
|
734
|
-
|
|
767
|
+
# For simplified tracking, failed_bytes is calculated
|
|
768
|
+
failed_bytes = 0
|
|
735
769
|
if data.get("status") == "failed":
|
|
736
|
-
|
|
770
|
+
failed_bytes = total_bytes - downloaded_bytes
|
|
737
771
|
|
|
738
772
|
return ModelDownloadStatus(
|
|
739
773
|
model_id=data["model_id"],
|
|
740
774
|
status=data["status"],
|
|
741
775
|
started_at=data["started_at"],
|
|
742
776
|
updated_at=data["updated_at"],
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
777
|
+
total_bytes=total_bytes,
|
|
778
|
+
completed_bytes=downloaded_bytes,
|
|
779
|
+
failed_bytes=failed_bytes,
|
|
746
780
|
completed_at=data.get("completed_at"),
|
|
747
781
|
local_path=data.get("local_path"),
|
|
748
782
|
failed_at=data.get("failed_at"),
|
|
@@ -955,64 +989,6 @@ class ModelManager:
|
|
|
955
989
|
# If we can't parse the directory, skip it
|
|
956
990
|
return None
|
|
957
991
|
|
|
958
|
-
def _download_model(self, download_params: dict[str, str | list[str] | None]) -> Path:
|
|
959
|
-
"""Model download implementation.
|
|
960
|
-
|
|
961
|
-
Args:
|
|
962
|
-
download_params: Dictionary containing download parameters
|
|
963
|
-
|
|
964
|
-
Returns:
|
|
965
|
-
Path: Local path where the model was downloaded
|
|
966
|
-
"""
|
|
967
|
-
# Validate parameters and build download kwargs
|
|
968
|
-
download_kwargs = self._build_download_kwargs(download_params)
|
|
969
|
-
|
|
970
|
-
# Set the current model ID for progress tracking
|
|
971
|
-
model_id = download_params["model_id"]
|
|
972
|
-
if isinstance(model_id, str):
|
|
973
|
-
ModelDownloadTracker.set_current_model_id(model_id)
|
|
974
|
-
|
|
975
|
-
# Execute download with progress tracking
|
|
976
|
-
local_path = snapshot_download(**download_kwargs) # type: ignore[arg-type]
|
|
977
|
-
|
|
978
|
-
# Clear the current model ID when done
|
|
979
|
-
ModelDownloadTracker.set_current_model_id("")
|
|
980
|
-
|
|
981
|
-
return Path(local_path)
|
|
982
|
-
|
|
983
|
-
def _build_download_kwargs(self, download_params: dict[str, str | list[str] | None]) -> dict:
|
|
984
|
-
"""Build kwargs for snapshot_download with validation.
|
|
985
|
-
|
|
986
|
-
Args:
|
|
987
|
-
download_params: Dictionary containing download parameters
|
|
988
|
-
|
|
989
|
-
Returns:
|
|
990
|
-
dict: Validated download kwargs for snapshot_download
|
|
991
|
-
"""
|
|
992
|
-
param_model_id = download_params["model_id"]
|
|
993
|
-
local_dir = download_params["local_dir"]
|
|
994
|
-
revision = download_params["revision"]
|
|
995
|
-
allow_patterns = download_params["allow_patterns"]
|
|
996
|
-
ignore_patterns = download_params["ignore_patterns"]
|
|
997
|
-
|
|
998
|
-
# Build base kwargs with custom progress tracking
|
|
999
|
-
download_kwargs: dict[str, Any] = {
|
|
1000
|
-
"repo_id": param_model_id,
|
|
1001
|
-
"repo_type": "model",
|
|
1002
|
-
"revision": revision,
|
|
1003
|
-
"tqdm_class": ModelDownloadTracker,
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
|
-
# Add optional parameters
|
|
1007
|
-
if local_dir is not None and isinstance(local_dir, str):
|
|
1008
|
-
download_kwargs["local_dir"] = local_dir
|
|
1009
|
-
if allow_patterns is not None and isinstance(allow_patterns, list):
|
|
1010
|
-
download_kwargs["allow_patterns"] = allow_patterns
|
|
1011
|
-
if ignore_patterns is not None and isinstance(ignore_patterns, list):
|
|
1012
|
-
download_kwargs["ignore_patterns"] = ignore_patterns
|
|
1013
|
-
|
|
1014
|
-
return download_kwargs
|
|
1015
|
-
|
|
1016
992
|
def _parse_model_id(self, model_input: str) -> str:
|
|
1017
993
|
"""Parse model ID from either a direct model ID or a Hugging Face URL.
|
|
1018
994
|
|
|
@@ -1086,6 +1062,7 @@ class ModelManager:
|
|
|
1086
1062
|
await cancel_subprocess(process, f"download process for model '{model_id}'")
|
|
1087
1063
|
del self._download_processes[model_id]
|
|
1088
1064
|
|
|
1065
|
+
# Cancel active download task if it exists
|
|
1089
1066
|
if model_id in self._download_tasks:
|
|
1090
1067
|
task = self._download_tasks[model_id]
|
|
1091
1068
|
if not task.done():
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/api_client/request_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.63.0 → griptape_nodes-0.63.1}/src/griptape_nodes/bootstrap/utils/__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
|
|
File without changes
|
|
File without changes
|