griptape-nodes 0.37.1__py3-none-any.whl → 0.38.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. griptape_nodes/__init__.py +292 -132
  2. griptape_nodes/app/__init__.py +1 -6
  3. griptape_nodes/app/app.py +108 -76
  4. griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +80 -5
  5. griptape_nodes/drivers/storage/local_storage_driver.py +5 -1
  6. griptape_nodes/exe_types/core_types.py +84 -3
  7. griptape_nodes/exe_types/node_types.py +260 -50
  8. griptape_nodes/machines/node_resolution.py +2 -14
  9. griptape_nodes/retained_mode/events/agent_events.py +7 -0
  10. griptape_nodes/retained_mode/events/base_events.py +16 -0
  11. griptape_nodes/retained_mode/events/library_events.py +26 -0
  12. griptape_nodes/retained_mode/events/parameter_events.py +31 -0
  13. griptape_nodes/retained_mode/griptape_nodes.py +32 -0
  14. griptape_nodes/retained_mode/managers/agent_manager.py +25 -12
  15. griptape_nodes/retained_mode/managers/config_manager.py +37 -4
  16. griptape_nodes/retained_mode/managers/event_manager.py +15 -0
  17. griptape_nodes/retained_mode/managers/flow_manager.py +64 -61
  18. griptape_nodes/retained_mode/managers/library_manager.py +215 -45
  19. griptape_nodes/retained_mode/managers/node_manager.py +344 -147
  20. griptape_nodes/retained_mode/managers/operation_manager.py +6 -0
  21. griptape_nodes/retained_mode/managers/os_manager.py +6 -1
  22. griptape_nodes/retained_mode/managers/secrets_manager.py +7 -2
  23. griptape_nodes/retained_mode/managers/settings.py +2 -11
  24. griptape_nodes/retained_mode/managers/static_files_manager.py +12 -3
  25. griptape_nodes/retained_mode/managers/version_compatibility_manager.py +105 -0
  26. griptape_nodes/retained_mode/managers/workflow_manager.py +4 -4
  27. griptape_nodes/updater/__init__.py +14 -8
  28. griptape_nodes/version_compatibility/__init__.py +1 -0
  29. griptape_nodes/version_compatibility/versions/__init__.py +1 -0
  30. griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +1 -0
  31. griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +77 -0
  32. {griptape_nodes-0.37.1.dist-info → griptape_nodes-0.38.0.dist-info}/METADATA +4 -1
  33. {griptape_nodes-0.37.1.dist-info → griptape_nodes-0.38.0.dist-info}/RECORD +36 -33
  34. griptape_nodes/app/app_websocket.py +0 -481
  35. griptape_nodes/app/nodes_api_socket_manager.py +0 -117
  36. {griptape_nodes-0.37.1.dist-info → griptape_nodes-0.38.0.dist-info}/WHEEL +0 -0
  37. {griptape_nodes-0.37.1.dist-info → griptape_nodes-0.38.0.dist-info}/entry_points.txt +0 -0
  38. {griptape_nodes-0.37.1.dist-info → griptape_nodes-0.38.0.dist-info}/licenses/LICENSE +0 -0
@@ -53,6 +53,7 @@ if TYPE_CHECKING:
53
53
  GetParameterDetailsRequest,
54
54
  GetParameterValueRequest,
55
55
  RemoveParameterFromNodeRequest,
56
+ RenameParameterRequest,
56
57
  SetParameterValueRequest,
57
58
  )
58
59
  from griptape_nodes.retained_mode.managers.config_manager import ConfigManager
@@ -411,6 +412,11 @@ class PayloadConverter:
411
412
 
412
413
  return f"""cmd.create_flow({command_params})"""
413
414
 
415
+ @staticmethod
416
+ def _handle_RenameParameterRequest(payload: RenameParameterRequest) -> str:
417
+ """Handle RenameParameterRequest payloads."""
418
+ return f"""cmd.rename_param(node_name="{payload.node_name}",parameter_name="{payload.parameter_name}",new_parameter_name="{payload.new_parameter_name}")"""
419
+
414
420
  # GENERIC HANDLERS FOR PAYLOADS WITHOUT SPECIFIC HANDLERS
415
421
 
416
422
 
@@ -119,7 +119,12 @@ class OSManager:
119
119
 
120
120
  return OpenAssociatedFileResultSuccess()
121
121
  except subprocess.CalledProcessError as e:
122
- logger.error("Process error when opening file: %s", e.stderr)
122
+ logger.error(
123
+ "Process error when opening file: return code=%s, stdout=%s, stderr=%s",
124
+ e.returncode,
125
+ e.stdout,
126
+ e.stderr,
127
+ )
123
128
  return OpenAssociatedFileResultFailure()
124
129
  except Exception as e:
125
130
  logger.error("Exception occurred when trying to open file: %s", type(e).__name__)
@@ -100,13 +100,18 @@ class SecretsManager:
100
100
  return DeleteSecretValueResultSuccess()
101
101
 
102
102
  def get_secret(self, secret_name: str, *, should_error_on_not_found: bool = True) -> str | None:
103
- """Return the secret value, searching workspace env, global env, then OS env."""
103
+ """Return the secret value with the following search precedence (highest to lowest priority).
104
+
105
+ 1. OS environment variables (highest priority)
106
+ 2. Workspace .env file (<workspace>/.env)
107
+ 3. Global .env file (~/.config/griptape_nodes/.env) (lowest priority)
108
+ """
104
109
  secret_name = SecretsManager._apply_secret_name_compliance(secret_name)
105
110
 
106
111
  search_order = [
112
+ ("environment variables", lambda: getenv(secret_name)),
107
113
  (str(self.workspace_env_path), lambda: DotEnv(self.workspace_env_path).get(secret_name)),
108
114
  (str(ENV_VAR_PATH), lambda: DotEnv(ENV_VAR_PATH).get(secret_name)),
109
- ("environment variables", lambda: getenv(secret_name)),
110
115
  ]
111
116
 
112
117
  value = None
@@ -2,20 +2,11 @@ from pathlib import Path
2
2
  from typing import Any, Literal
3
3
 
4
4
  from pydantic import BaseModel, ConfigDict, Field
5
- from xdg_base_dirs import xdg_data_home
6
5
 
7
6
 
8
7
  class AppInitializationComplete(BaseModel):
9
- libraries_to_register: list[str] = Field(
10
- default_factory=lambda: [
11
- str(xdg_data_home() / "griptape_nodes/libraries/griptape_nodes_library/griptape_nodes_library.json")
12
- ]
13
- )
14
- workflows_to_register: list[str] = Field(
15
- default_factory=lambda: [
16
- str(xdg_data_home() / "griptape_nodes/workflows/templates/"),
17
- ]
18
- )
8
+ libraries_to_register: list[str] = Field(default_factory=list)
9
+ workflows_to_register: list[str] = Field(default_factory=list)
19
10
 
20
11
 
21
12
  class AppEvents(BaseModel):
@@ -49,11 +49,20 @@ class StaticFilesManager:
49
49
 
50
50
  match storage_backend:
51
51
  case "gtc":
52
+ bucket_id = secrets_manager.get_secret("GT_CLOUD_BUCKET_ID")
53
+
54
+ if not bucket_id:
55
+ msg = "GT_CLOUD_BUCKET_ID secret is required for gtc storage backend"
56
+ logger.error(msg)
57
+ raise ValueError(msg)
58
+
59
+ static_files_directory = config_manager.get_config_value(
60
+ "static_files_directory", default="staticfiles"
61
+ )
52
62
  self.storage_driver = GriptapeCloudStorageDriver(
53
- # TODO: https://github.com/griptape-ai/griptape-nodes/issues/1332
54
- # Automatically provision a bucket if it doesn't exist
55
- bucket_id=secrets_manager.get_secret("GT_CLOUD_BUCKET_ID"),
63
+ bucket_id=bucket_id,
56
64
  api_key=secrets_manager.get_secret("GT_CLOUD_API_KEY"),
65
+ static_files_directory=static_files_directory,
57
66
  )
58
67
  case "local":
59
68
  self.storage_driver = LocalStorageDriver()
@@ -0,0 +1,105 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib
4
+ import logging
5
+ from abc import ABC, abstractmethod
6
+ from pathlib import Path
7
+ from typing import TYPE_CHECKING, NamedTuple
8
+
9
+ from griptape_nodes.retained_mode.events.app_events import (
10
+ GetEngineVersionRequest,
11
+ GetEngineVersionResultSuccess,
12
+ )
13
+ from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes, Version
14
+
15
+ if TYPE_CHECKING:
16
+ from griptape_nodes.node_library.library_registry import LibrarySchema
17
+ from griptape_nodes.retained_mode.managers.event_manager import EventManager
18
+ from griptape_nodes.retained_mode.managers.library_manager import LibraryManager
19
+
20
+ logger = logging.getLogger("griptape_nodes")
21
+
22
+
23
+ class LibraryVersionCompatibilityIssue(NamedTuple):
24
+ """Represents a library version compatibility issue found in a library."""
25
+
26
+ message: str
27
+ severity: LibraryManager.LibraryStatus
28
+
29
+
30
+ class LibraryVersionCompatibilityCheck(ABC):
31
+ """Abstract base class for library version compatibility checks."""
32
+
33
+ @abstractmethod
34
+ def applies_to_library(self, library_data: LibrarySchema) -> bool:
35
+ """Return True if this check applies to the given library."""
36
+
37
+ @abstractmethod
38
+ def check_library(self, library_data: LibrarySchema) -> list[LibraryVersionCompatibilityIssue]:
39
+ """Perform the library compatibility check."""
40
+
41
+
42
+ class VersionCompatibilityManager:
43
+ """Manages version compatibility checks for libraries and other components."""
44
+
45
+ def __init__(self, event_manager: EventManager) -> None:
46
+ self._event_manager = event_manager
47
+ self._compatibility_checks: list[LibraryVersionCompatibilityCheck] = []
48
+ self._discover_version_checks()
49
+
50
+ def _discover_version_checks(self) -> None:
51
+ """Automatically discover and register library version compatibility checks."""
52
+ # Get the path to the version_compatibility/versions directory
53
+ import griptape_nodes.version_compatibility.versions as versions_module
54
+
55
+ versions_path = Path(versions_module.__file__).parent
56
+
57
+ # Iterate through version directories
58
+ for version_dir in versions_path.iterdir():
59
+ if version_dir.is_dir() and not version_dir.name.startswith("__"):
60
+ self._discover_checks_in_version_dir(version_dir)
61
+
62
+ def _discover_checks_in_version_dir(self, version_dir: Path) -> None:
63
+ """Discover compatibility checks in a specific version directory."""
64
+ # Iterate through Python files in the version directory
65
+ for check_file in version_dir.glob("*.py"):
66
+ if check_file.name.startswith("__"):
67
+ continue
68
+
69
+ # Import the module
70
+ module_path = f"griptape_nodes.version_compatibility.versions.{version_dir.name}.{check_file.stem}"
71
+ module = importlib.import_module(module_path)
72
+
73
+ # Look for classes that inherit from LibraryVersionCompatibilityCheck
74
+ for attr_name in dir(module):
75
+ attr = getattr(module, attr_name)
76
+ if (
77
+ isinstance(attr, type)
78
+ and issubclass(attr, LibraryVersionCompatibilityCheck)
79
+ and attr is not LibraryVersionCompatibilityCheck
80
+ ):
81
+ check_instance = attr()
82
+ self._compatibility_checks.append(check_instance)
83
+ logger.debug("Registered library version compatibility check: %s", attr_name)
84
+
85
+ def check_library_version_compatibility(
86
+ self, library_data: LibrarySchema
87
+ ) -> list[LibraryVersionCompatibilityIssue]:
88
+ """Check a library for version compatibility issues."""
89
+ version_issues = []
90
+
91
+ # Run all discovered compatibility checks
92
+ for check_instance in self._compatibility_checks:
93
+ if check_instance.applies_to_library(library_data):
94
+ issues = check_instance.check_library(library_data)
95
+ version_issues.extend(issues)
96
+
97
+ return version_issues
98
+
99
+ def _get_current_engine_version(self) -> Version:
100
+ """Get the current engine version."""
101
+ result = GriptapeNodes.handle_request(GetEngineVersionRequest())
102
+ if isinstance(result, GetEngineVersionResultSuccess):
103
+ return Version(major=result.major, minor=result.minor, patch=result.patch)
104
+ msg = "Failed to get engine version"
105
+ raise RuntimeError(msg)
@@ -749,18 +749,18 @@ class WorkflowManager:
749
749
  had_critical_error = True
750
750
  elif delta > WorkflowManager.MAX_MINOR_VERSION_DEVIATION:
751
751
  problems.append(
752
- f"Library '{library_name}' is at version '{library_version}', but this workflow requested '{desired_version}'. This version difference is too far out of tolerance to recommend proceeding."
752
+ f"This workflow was built with library '{library_name}' v{desired_version}, but you have v{library_version}. This large version difference may cause compatibility issues. You can update the library to a compatible version or save this workflow to update it to your current library versions."
753
753
  )
754
754
  status = WorkflowManager.WorkflowDependencyStatus.BAD
755
755
  had_critical_error = True
756
756
  else:
757
757
  problems.append(
758
- f"Library '{library_name}' is at version '{library_version}', but this workflow requested '{desired_version}'. There may be incompatibilities. Proceed at your own risk."
758
+ f"This workflow was built with library '{library_name}' v{desired_version}, but you have v{library_version}. Minor differences are usually compatible. If you experience issues, you can update the library or save this workflow to update it to your current library versions."
759
759
  )
760
760
  status = WorkflowManager.WorkflowDependencyStatus.CAUTION
761
761
  else:
762
762
  problems.append(
763
- f"Library '{library_name}' is at version '{library_version}', but this workflow requested '{desired_version}'. Major version differences have breaking changes that this Workflow may not support."
763
+ f"This workflow requires library '{library_name}' v{desired_version}, but you have v{library_version}. Major version changes may include breaking changes. Consider updating the library to match, or save this workflow to update it to your current library versions."
764
764
  )
765
765
  status = WorkflowManager.WorkflowDependencyStatus.BAD
766
766
  had_critical_error = True
@@ -793,7 +793,7 @@ class WorkflowManager:
793
793
 
794
794
  def register_workflows_from_config(self, config_section: str) -> None:
795
795
  workflows_to_register = GriptapeNodes.ConfigManager().get_config_value(config_section)
796
- if workflows_to_register is not None:
796
+ if workflows_to_register:
797
797
  self.register_list_of_workflows(workflows_to_register)
798
798
 
799
799
  def register_list_of_workflows(self, workflows_to_register: list[str]) -> None:
@@ -21,7 +21,7 @@ def main() -> None:
21
21
  """Entry point for the updater CLI."""
22
22
  try:
23
23
  _download_and_run_installer()
24
- _sync_assets()
24
+ _sync_libraries()
25
25
  except subprocess.CalledProcessError:
26
26
  console.print("[red]Error during update process.[/red]")
27
27
  else:
@@ -41,29 +41,35 @@ def _download_and_run_installer() -> None:
41
41
  subprocess.run( # noqa: S603
42
42
  ["uv", "tool", "upgrade", "griptape-nodes"], # noqa: S607
43
43
  text=True,
44
+ capture_output=True,
44
45
  check=True,
45
46
  )
46
47
  except subprocess.CalledProcessError as e:
47
- console.print(f"[red]Error during update: {e}[/red]")
48
+ console.print(
49
+ f"[red]Error during update: return code={e.returncode}, stdout={e.stdout}, stderr={e.stderr}[/red]"
50
+ )
48
51
  raise
49
52
  else:
50
53
  console.print("[green]Finished updating self.[/green]")
51
54
 
52
55
 
53
- def _sync_assets() -> None:
54
- """Syncs the assets for the engine."""
55
- console.print("[bold green]Syncing assets...[/bold green]")
56
+ def _sync_libraries() -> None:
57
+ """Syncs the libraries for the engine."""
58
+ console.print("[bold green]Syncing libraries...[/bold green]")
56
59
  try:
57
60
  subprocess.run( # noqa: S603
58
- ["griptape-nodes", "assets", "sync"], # noqa: S607
61
+ ["griptape-nodes", "libraries", "sync"], # noqa: S607
59
62
  text=True,
63
+ capture_output=True,
60
64
  check=True,
61
65
  )
62
66
  except subprocess.CalledProcessError as e:
63
- console.print(f"[red]Error during asset sync: {e}[/red]")
67
+ console.print(
68
+ f"[red]Error during libraries sync: return code={e.returncode}, stdout={e.stdout}, stderr={e.stderr}[/red]"
69
+ )
64
70
  raise
65
71
  else:
66
- console.print("[green]Finished syncing assets.[/green]")
72
+ console.print("[green]Finished syncing libraries.[/green]")
67
73
 
68
74
 
69
75
  if __name__ == "__main__":
@@ -0,0 +1 @@
1
+ """Version compatibility checking system for Griptape Nodes libraries."""
@@ -0,0 +1 @@
1
+ """Version-specific compatibility checks for Griptape Nodes libraries."""
@@ -0,0 +1 @@
1
+ """Version compatibility checks for Griptape Nodes 0.40.0."""
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from griptape_nodes.retained_mode.events.app_events import (
6
+ GetEngineVersionRequest,
7
+ GetEngineVersionResultSuccess,
8
+ )
9
+ from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes, Version
10
+ from griptape_nodes.retained_mode.managers.library_manager import LibraryManager
11
+ from griptape_nodes.retained_mode.managers.version_compatibility_manager import (
12
+ LibraryVersionCompatibilityCheck,
13
+ LibraryVersionCompatibilityIssue,
14
+ )
15
+
16
+ if TYPE_CHECKING:
17
+ from griptape_nodes.node_library.library_registry import LibrarySchema
18
+
19
+
20
+ class ModifiedParametersSetRemovalCheck(LibraryVersionCompatibilityCheck):
21
+ """Check for libraries impacted by the modified_parameters_set deprecation timeline."""
22
+
23
+ def applies_to_library(self, library_data: LibrarySchema) -> bool:
24
+ """Check applies to libraries with engine_version < 0.39.0."""
25
+ library_version = Version.from_string(library_data.metadata.engine_version)
26
+ return library_version is not None and library_version < Version(0, 39, 0)
27
+
28
+ def check_library(self, library_data: LibrarySchema) -> list[LibraryVersionCompatibilityIssue]:
29
+ """Perform the modified_parameters_set deprecation check."""
30
+ # Get current engine version
31
+ engine_version_result = GriptapeNodes.handle_request(GetEngineVersionRequest())
32
+ if not isinstance(engine_version_result, GetEngineVersionResultSuccess):
33
+ # If we can't get current engine version, skip version-specific warnings
34
+ return []
35
+
36
+ current_engine_version = Version(
37
+ engine_version_result.major, engine_version_result.minor, engine_version_result.patch
38
+ )
39
+
40
+ # Determine which phase we're in based on current engine version
41
+ library_version_str = library_data.metadata.engine_version
42
+
43
+ if current_engine_version >= Version(0, 39, 0):
44
+ # 0.39+ Release: Parameter removed, reject incompatible libraries
45
+ return [
46
+ LibraryVersionCompatibilityIssue(
47
+ message=f"This library (built for engine version {library_version_str}) is incompatible with Griptape Nodes 0.39+. "
48
+ "The 'modified_parameters_set' parameter has been removed from BaseNode methods: 'after_incoming_connection', 'after_outgoing_connection', 'after_incoming_connection_removed', 'after_outgoing_connection_removed', 'before_value_set', and 'after_value_set'. "
49
+ "If this library overrides any of these methods, it will not load or function properly. Please update to a newer version of this library or contact the library author immediately.",
50
+ severity=LibraryManager.LibraryStatus.UNUSABLE,
51
+ ),
52
+ LibraryVersionCompatibilityIssue(
53
+ message=f"This library (built for engine version {library_version_str}) is incompatible with Griptape Nodes 0.39+."
54
+ "The 'ui_options' field has been modified on all Elements. In order to function properly, all nodes must update ui_options by setting its value to a new dictionary. Updating ui_options by accessing the private field _ui_options will no longer create UI updates in the editor."
55
+ "If this library accesses the private _ui_options field, it will not update the editor properly. Please update to a newer version of this library or contact the library author immediately.",
56
+ severity=LibraryManager.LibraryStatus.UNUSABLE,
57
+ ),
58
+ ]
59
+ if current_engine_version >= Version(0, 38, 0):
60
+ # 0.38 Release: Warning about upcoming removal in 0.39
61
+ return [
62
+ LibraryVersionCompatibilityIssue(
63
+ message=f"WARNING: The 'modified_parameters_set' parameter will be removed in Griptape Nodes 0.39 from BaseNode methods: 'after_incoming_connection', 'after_outgoing_connection', 'after_incoming_connection_removed', 'after_outgoing_connection_removed', 'before_value_set', and 'after_value_set'. "
64
+ f"This library (built for engine version {library_version_str}) must be updated before the 0.39 release. "
65
+ "If this library overrides any of these methods, it will fail to load in 0.39. If not, no action is necessary. Please contact the library author to confirm whether this library is impacted.",
66
+ severity=LibraryManager.LibraryStatus.FLAWED,
67
+ ),
68
+ LibraryVersionCompatibilityIssue(
69
+ message="WARNING: The 'ui_options' field has been modified in Griptape Nodes 0.38 on all BaseNodeElements."
70
+ "In order to function properly, all nodes must update ui_options by setting its value to a new dictionary. Updating ui_options by accessing the private field _ui_options will no longer create UI updates in the editor."
71
+ "If this library accesses the private _ui_options field, it will not update the editor properly. Please update to a newer version of this library or contact the library author immediately.",
72
+ severity=LibraryManager.LibraryStatus.FLAWED,
73
+ ),
74
+ ]
75
+
76
+ # No compatibility issues for current version
77
+ return []
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: griptape-nodes
3
- Version: 0.37.1
3
+ Version: 0.38.0
4
4
  Summary: Add your description here
5
5
  License-File: LICENSE
6
6
  Requires-Python: ~=3.12
7
7
  Requires-Dist: fastapi>=0.115.12
8
8
  Requires-Dist: griptape[drivers-prompt-amazon-bedrock,drivers-prompt-anthropic,drivers-prompt-cohere,drivers-prompt-ollama,drivers-web-scraper-trafilatura,drivers-web-search-duckduckgo,drivers-web-search-exa,loaders-image]>=1.7.1
9
9
  Requires-Dist: httpx<1.0.0,>=0.28.0
10
+ Requires-Dist: imageio-ffmpeg>=0.6.0
10
11
  Requires-Dist: json-repair>=0.46.1
11
12
  Requires-Dist: packaging>=25.0
12
13
  Requires-Dist: pydantic>=2.10.6
@@ -17,6 +18,8 @@ Requires-Dist: uv>=0.6.16
17
18
  Requires-Dist: uvicorn>=0.34.2
18
19
  Requires-Dist: websockets<16.0.0,>=15.0.1
19
20
  Requires-Dist: xdg-base-dirs>=6.0.2
21
+ Provides-Extra: profiling
22
+ Requires-Dist: austin-dist>=3.7.0; extra == 'profiling'
20
23
  Description-Content-Type: text/markdown
21
24
 
22
25
  # Griptape Nodes
@@ -1,10 +1,8 @@
1
- griptape_nodes/__init__.py,sha256=xWgz0ZZ3EoD-usn8QJiH-vgjHeBjuoEzOQNmrcW-Ldw,31459
1
+ griptape_nodes/__init__.py,sha256=eR5gLjOtO8XGKLHIq8r076vx_t6uEY36EOZ1OJedgg0,36638
2
2
  griptape_nodes/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  griptape_nodes/app/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
4
- griptape_nodes/app/__init__.py,sha256=EUNovAS-nwKAlquYdhPgJgXQ-W3JMZB4p-0PdsKbzSU,232
5
- griptape_nodes/app/app.py,sha256=rjuJt40x9cTOs4Jqch8RE6PKkQzqDVtuWkssq9A0O1M,17778
6
- griptape_nodes/app/app_websocket.py,sha256=XPJ11HcbAugq2m0O_43YJFZd1O-TNy3b4lcIJHiWvCE,18921
7
- griptape_nodes/app/nodes_api_socket_manager.py,sha256=J7K4yi7jfzJat2xIW0upqNJz3jnQBOb0eJGWT7CCJ9Q,4745
4
+ griptape_nodes/app/__init__.py,sha256=DB-DTsgcNnbmEClXEouwzGhrmo3gHBCWXB9BkPGpdQI,90
5
+ griptape_nodes/app/app.py,sha256=O5zLX_xroifpOR-hAeStkhAZ-LUFjAgaGY3A-_RHVKY,18920
8
6
  griptape_nodes/app/watch.py,sha256=Jh7sQoptOuVzEobyhHG5EThxOcb8wfkW0JOmYE-WDpE,1848
9
7
  griptape_nodes/bootstrap/__init__.py,sha256=ENv3SIzQ9TtlRrg1y4e4CnoBpJaFpFSkNpTFBV8X5Ls,25
10
8
  griptape_nodes/bootstrap/bootstrap_script.py,sha256=QLLu3wu1VGmoUU8SKGeyLGDOijKBLGAJYv1RlI9sub0,1312
@@ -20,62 +18,63 @@ griptape_nodes/bootstrap/workflow_runners/workflow_runner.py,sha256=fmtCH8_c_Vdu
20
18
  griptape_nodes/drivers/__init__.py,sha256=tHmiFQn6uJyFVhC2PrqHgRUH3d3yDsqMQpWqRasmaqA,42
21
19
  griptape_nodes/drivers/storage/__init__.py,sha256=Ld66cE_B8mxl0ydcZzbX84hc9o2EV5E5q6sb2EUiqnA,133
22
20
  griptape_nodes/drivers/storage/base_storage_driver.py,sha256=di1tqC-o8tEeZ8h_asUxb5KgixwJbTlQLe_lUtqcunQ,1050
23
- griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=jqCBlBcCyYp7mle7svyD-SotqSHgbHUek0OJ_yam3Iw,3388
24
- griptape_nodes/drivers/storage/local_storage_driver.py,sha256=089XA0khpjIszltI-SfU4xEybufO8q704WynURpSayI,1986
21
+ griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=zYQHzHxlE3TcOitytk9WpD3YTKTRyfrzW-H_vXpgTLQ,6083
22
+ griptape_nodes/drivers/storage/local_storage_driver.py,sha256=PnKgnjkhmnzI5SOI3VKXTkwbb5G1lLs25pLTr022W_c,2196
25
23
  griptape_nodes/exe_types/__init__.py,sha256=wGGwKGX9-TSarUFbXpDvdU_J7eXIbWTBl_NCLOZa-G8,32
26
24
  griptape_nodes/exe_types/connections.py,sha256=_-VNzf6Kay62QzJlSX-LlHTUhz-CKF-UDsbZLJ0l6Wk,12435
27
- griptape_nodes/exe_types/core_types.py,sha256=9pHH_y-7Qcfk64cJ8atWg25GgkhFL33x4gc8setyb8U,54374
25
+ griptape_nodes/exe_types/core_types.py,sha256=34Xvp1fzlSMgo957jBDH8RvGYxfawf1fa2wMyznF_fQ,58012
28
26
  griptape_nodes/exe_types/flow.py,sha256=FAjs6vWEWbuoU5OvUGjs8BY_kEB7IWKvlJ-X5HXkoZ4,21095
29
- griptape_nodes/exe_types/node_types.py,sha256=_6VRYP07mEYHgCkns15Tsaq3CiYyw21huNc41inyURo,36775
27
+ griptape_nodes/exe_types/node_types.py,sha256=Bxvh0x-LJ9VTpBKMCHAxDkQUZvgE915JW9v52GhYMXg,45972
30
28
  griptape_nodes/exe_types/type_validator.py,sha256=RTz1vX09jzQpHhozITMJ0siOZUXvsERDhrApjdaM1WM,1120
31
29
  griptape_nodes/machines/__init__.py,sha256=v0jkwr-CFOLmfEYUQvX8BKQLOdvhSsA6toXkdHcPGUE,30
32
30
  griptape_nodes/machines/control_flow.py,sha256=LegXG4If6M5N6ZNlrQywLGQe-sjg_VKDeKPu5gmqbxU,8421
33
31
  griptape_nodes/machines/fsm.py,sha256=JwNz32UmcajoADDMm_fL5MqDRNjr6t8CIUzck-7TFhE,1784
34
- griptape_nodes/machines/node_resolution.py,sha256=csuAqFGHZQY_4dKzUO_n9lTjpNVMmVsGT8BfLkvhKJM,20522
32
+ griptape_nodes/machines/node_resolution.py,sha256=w5eG2PGY6gPeYucwJ8phH80UF-xKDwIzOK4Em_eyMcY,19685
35
33
  griptape_nodes/node_library/__init__.py,sha256=U3FcSdmq6UW7qt6E3Up3NWKvUEn5_5lqL-u5qbzfxMQ,28
36
34
  griptape_nodes/node_library/library_registry.py,sha256=NZeQw_e0bkzka7D4hP-odNwb3LMQapAH6Mn54-HnXO8,11214
37
35
  griptape_nodes/node_library/workflow_registry.py,sha256=UabpodU15TpS5pcGYkw3-VgAs_eYOsASItNWzMgwC_U,4257
38
36
  griptape_nodes/retained_mode/__init__.py,sha256=X12DKL6KhLsiRTPIlrPj2h76_sJ0q0eH4r0kMQkodm0,29
39
- griptape_nodes/retained_mode/griptape_nodes.py,sha256=Uv5AoRqO1HqwrfnbptTsNT32TTXYvvaxsrxQy8Sz7js,25930
37
+ griptape_nodes/retained_mode/griptape_nodes.py,sha256=_ydd84yIzuP4g7vgs1iZugGYwkN3SE_-ReY0RM6obiE,27466
40
38
  griptape_nodes/retained_mode/retained_mode.py,sha256=HUKoiTtDYm61a1wipeLKk_1oRfkMeIjiWrzGQ6x61d0,54779
41
39
  griptape_nodes/retained_mode/events/__init__.py,sha256=7B1C-c0jVvnShtHJ2lfX6BZPE0U1DgQwg1e4DorhKG0,22
42
- griptape_nodes/retained_mode/events/agent_events.py,sha256=NWJpzPrpcrE-yHlcC4ENojW7BpJvOq9a7NZzCzbRSsE,1863
40
+ griptape_nodes/retained_mode/events/agent_events.py,sha256=dzjwKXPTSGVi8HGZTZjGR-4k5umyIKpfybWWnw-OWYU,1981
43
41
  griptape_nodes/retained_mode/events/app_events.py,sha256=tDoZFw1v8GHIVkh1PgpfkGcWu2WYeo94nJlfL9mCd_4,1456
44
42
  griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=9IJKVyzo9jqef2Dt3thoqnq4FWKTX5yG5SnOvXHvLns,797
45
- griptape_nodes/retained_mode/events/base_events.py,sha256=BIZHaPm6hZCEUPCHD4G9H39Cok9ArGKJoTyhrnsGrPk,19185
43
+ griptape_nodes/retained_mode/events/base_events.py,sha256=3HRcu9Q9P1olQxIKbLjxwk2yZMGl8CyF-y_piJCkjd8,19528
46
44
  griptape_nodes/retained_mode/events/config_events.py,sha256=cgx5Qe0wSHxpehHj7CDb4bF6UfUERD5oAMA0Eb3BSgk,2454
47
45
  griptape_nodes/retained_mode/events/connection_events.py,sha256=XbuzSchjNmM8SMD-QrnhEQxwyt5pQPmB6j46GGjFNRI,2261
48
46
  griptape_nodes/retained_mode/events/context_events.py,sha256=je81-kK-ORLUunvAM8r-2xtN4fIHlt0d2qoUZ3a-u0M,1042
49
47
  griptape_nodes/retained_mode/events/execution_events.py,sha256=ZYj87Us-iMaornesQRHbAeABftqNPfCdRevg1860ixM,5701
50
48
  griptape_nodes/retained_mode/events/flow_events.py,sha256=1BtdgefElLDRlVjELm1Dlcmn770z7Y0zA0Ml9hWcUN8,7967
51
49
  griptape_nodes/retained_mode/events/generate_request_payload_schemas.py,sha256=PQ0QRZAUBljSIGjB8QhYUeRmSrfmLsJ6XVcygJKi13I,1102
52
- griptape_nodes/retained_mode/events/library_events.py,sha256=K0CYkly1rpPLa0PyWmtH-ZHdan-UMBMhlnpkgRonNss,4914
50
+ griptape_nodes/retained_mode/events/library_events.py,sha256=5i9Tn2-L8GaN2wJr0-Z_ASoPpGPw7kd7MSyeZNmavSY,5752
53
51
  griptape_nodes/retained_mode/events/logger_events.py,sha256=e5Xu9cVk4_V24dI-leqWbzWSf_c2wRHJpsEfJT9_p8M,325
54
52
  griptape_nodes/retained_mode/events/node_events.py,sha256=-rpsN0889umeQA8BRkV6cqhiyooK9j0Pz2dDlYFx9_A,14962
55
53
  griptape_nodes/retained_mode/events/object_events.py,sha256=ZNuRFw2zhrfAIWKwu_aumn-1-kedvvEoVUq82P6RyAs,1283
56
54
  griptape_nodes/retained_mode/events/os_events.py,sha256=QWhTJs9SzGGIuvFB2-3w8Bfhk5KcCZOuFfn1eeJvWdk,659
57
- griptape_nodes/retained_mode/events/parameter_events.py,sha256=ZI6gdo3asw99C5O4AFzPtDHLDOB4jTsWhLUE-VWI79Q,8748
55
+ griptape_nodes/retained_mode/events/parameter_events.py,sha256=2Ex4_9-GE-dzasP1DHutslzLMuF-tu4egHLHSsTEdp4,9495
58
56
  griptape_nodes/retained_mode/events/payload_registry.py,sha256=q-wxUqp63vhNj-Pl1JGJHnBkhUefcCArPoMN3KBREEI,1691
59
57
  griptape_nodes/retained_mode/events/secrets_events.py,sha256=gK6RkIHEIyQJRtYI-REf3FmSXCRw5VrP5YJH8D8rmWY,1788
60
58
  griptape_nodes/retained_mode/events/static_file_events.py,sha256=ZKsLQUHL5tFVETd4it6pwdiLhbMjsGkRJQrUxmFGaDQ,2091
61
59
  griptape_nodes/retained_mode/events/validation_events.py,sha256=a3DwE1xmrmAZ9Y2HCAMHecyRl1Q5Ozy0cEOKgzeAQNE,1434
62
60
  griptape_nodes/retained_mode/events/workflow_events.py,sha256=qninIeAh3aGCdmIPCJb25wbmcPoMVEf6hbVzrn3dA7M,4105
63
61
  griptape_nodes/retained_mode/managers/__init__.py,sha256=OTXysKusqYCQeAYwnVj4PbE3MxvAUTq9xOZT6vUE3JA,24
64
- griptape_nodes/retained_mode/managers/agent_manager.py,sha256=tlG5HK7G4Z9EguutWgzwkphf7LW7ZhuFedLvXTa9nJ0,4580
62
+ griptape_nodes/retained_mode/managers/agent_manager.py,sha256=_-4neXj6oe7OPXW-5EogAnTdiC5aMxX9Io9w1Xlk_eQ,5391
65
63
  griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=QnqI2_IkDpc9SHzbb-jwsyYkm91W0V9kLlxARUbbVUI,1777
66
- griptape_nodes/retained_mode/managers/config_manager.py,sha256=HfPhVTtyq4fBJ37ukyULoJ8cDVYEnxuaCYmp7m_hsQs,23601
64
+ griptape_nodes/retained_mode/managers/config_manager.py,sha256=0fs-xd6vpetBGYrsm6sqPBhWb0qChMdtUcxco92qTqQ,25344
67
65
  griptape_nodes/retained_mode/managers/context_manager.py,sha256=DiGNh09TZ7rsLEcXqqB9Yrh2ietBy59LPF7GM0OBQS8,22930
68
- griptape_nodes/retained_mode/managers/event_manager.py,sha256=yJbULFry8CvoNwZjTQfugvWcw0-vDvXPsWOP4BYn-Vs,5840
69
- griptape_nodes/retained_mode/managers/flow_manager.py,sha256=1eqFsP0m26ltrcFweFulLYGn2jKjMN8T5dFiPQvc4-E,73699
70
- griptape_nodes/retained_mode/managers/library_manager.py,sha256=2mbpRY7PWbSbw-NvRJBOFa_o2p2Qt8iaXrMgeeK_YhA,53868
71
- griptape_nodes/retained_mode/managers/node_manager.py,sha256=KNxzqLrX6pAk8kZu7Fd4RzjcydxESLuZxiUwshAXobY,116683
66
+ griptape_nodes/retained_mode/managers/event_manager.py,sha256=5Y8oKasS2bISu5qdDhX9YRy2LD7lyIsfd2FxpXOnZ6c,6726
67
+ griptape_nodes/retained_mode/managers/flow_manager.py,sha256=8r7XGkmUuudkfwmsZkyeEOlvFCSaD7YMG3Tghcx3CQI,72821
68
+ griptape_nodes/retained_mode/managers/library_manager.py,sha256=iKB7pY9vFtRw-OCl6JkGnXj5pptVPCqK3pyMirPU7Io,62390
69
+ griptape_nodes/retained_mode/managers/node_manager.py,sha256=3SdfB-WT84ewhEH6HNUEvg9v9xm2rELO7hQSC21RFPE,127142
72
70
  griptape_nodes/retained_mode/managers/object_manager.py,sha256=mgNK8o-iYFzNl2IBzUKIqECiiqk5dI3cNNqirLam7vc,11828
73
- griptape_nodes/retained_mode/managers/operation_manager.py,sha256=DtV7Yx8phtFw3U1zn8zrj8rb-GBfoy2SwjiBCMIwqkI,19397
74
- griptape_nodes/retained_mode/managers/os_manager.py,sha256=zOYcuuTMjlFQm-Hxri0Tax2NexhRLB1Hh9xUs-9-IIk,4967
75
- griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=wx69EhWs4EiYSPDhYOhOpU0KE_aMMSf4FWt6AT3cLKg,5829
76
- griptape_nodes/retained_mode/managers/settings.py,sha256=NGRonV8do52zNglK0sD75bglBF6rGgn244wtaQwwyls,4379
77
- griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=4KcOE5WRNKiLBxeFN_tDmdgmnrNq_wcgpmOdr-b6Fe0,6722
78
- griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=vSl3YVtCWuaarlqmdZsc90G_uHp84PCFtLgZ6sHWNk0,103056
71
+ griptape_nodes/retained_mode/managers/operation_manager.py,sha256=6nHx1fADdj7nyt5dIrNNuSkR362XgR1AMVESI1UCF6o,19746
72
+ griptape_nodes/retained_mode/managers/os_manager.py,sha256=jeWvm0X_ma40ZBJFqgU_RgNR2nSfDxCxGUEQxZyujmQ,5104
73
+ griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=oRdTN__mgM5tQTxVKZ8e0R8BcKfL6_zMA-AKuFV9QE8,6038
74
+ griptape_nodes/retained_mode/managers/settings.py,sha256=nzEziQ1_Ba_PtQYtOgF_Uq7w0eF6eZ93Sqbl36mqlhk,4094
75
+ griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=xMQXHE2FNks7o5hP-jjuM6BJSpjMwO8JxTIQZ9wyIpg,7032
76
+ griptape_nodes/retained_mode/managers/version_compatibility_manager.py,sha256=1lwwuof4C6Ho1xh59Re_ajmvcc2lUyxpO1-RkHfKBYc,4385
77
+ griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=29zCJi-_a5h7Gu-90A_K3bEelLYQGRX9wLDIDUpjvXQ,103320
79
78
  griptape_nodes/traits/__init__.py,sha256=bTLXTiZTJz2z15RRLoPI4nvLnNW9FiLcKL_2pT4E10g,32
80
79
  griptape_nodes/traits/add_param_button.py,sha256=Xtc39SfvYY6JDjhxu2wmdeaHW2X4LkpNAQufSTCP3hY,655
81
80
  griptape_nodes/traits/button.py,sha256=rpQQ77ASKH3YJabc5WWw9DpEHQiMg1jx0i0sdkwH-SA,611
@@ -87,13 +86,17 @@ griptape_nodes/traits/options.py,sha256=Kj7isw0XkhI1jmCCYuXP63Td8K8rg21nGC77ultN
87
86
  griptape_nodes/traits/slider.py,sha256=bLe46gtCmjhMCHaGzUstIWMJv2Zl2Yee7fkT6g4Q6Rk,1236
88
87
  griptape_nodes/traits/trait_registry.py,sha256=pU26mW2ztfu1UARGYloflsTPqJ1X_-u013cMNoel9Hw,1171
89
88
  griptape_nodes/traits/traits.json,sha256=xtY7lcMzeUPiyh494xj4LyRl44c0VBFL-LRAkywuxD4,60
90
- griptape_nodes/updater/__init__.py,sha256=owyWpr-GxyHA-jpohYi2l-zw639wxLqyzCANbr82yxc,2207
89
+ griptape_nodes/updater/__init__.py,sha256=NO6xJfvQhJKli-CsuLIK83XiM4g3gg4Tqg24Rvp3olA,2461
91
90
  griptape_nodes/updater/__main__.py,sha256=lhMMctbBeni57ximitvkwqJ1TQzk79Jg9w0rkKjtp5Y,79
92
91
  griptape_nodes/utils/__init__.py,sha256=5-NvqVvxiwuRx2UgyzenuLFXyodvfDqJ_dzcrgZpPOk,33
93
92
  griptape_nodes/utils/dict_utils.py,sha256=kyli5MOfzSor0a8lmXfYBVS_NXGf6UK1SM6k_Qn5bs8,6889
94
93
  griptape_nodes/utils/metaclasses.py,sha256=RSKyAvZppH_hbMugmUmIr8QqOg1sYY4uRNfQybD4O8Q,287
95
- griptape_nodes-0.37.1.dist-info/METADATA,sha256=nPOabHwS3wDADlfCABVW8nganZWZbunyLU8v2YJuIMo,3983
96
- griptape_nodes-0.37.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
97
- griptape_nodes-0.37.1.dist-info/entry_points.txt,sha256=Q8V3Ydy7PNfJgTjNEVkPui25AwZ4HJ3kZCU3oh4mq-c,81
98
- griptape_nodes-0.37.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
99
- griptape_nodes-0.37.1.dist-info/RECORD,,
94
+ griptape_nodes/version_compatibility/__init__.py,sha256=JMz1sB7Zsj6pS1S5sdsPR0kn89s1A0sB0kFIvygJYfo,74
95
+ griptape_nodes/version_compatibility/versions/__init__.py,sha256=PWSxM28LPUdBdRPA98j4RUWvuZ4NqfX1day2VU6SqPw,74
96
+ griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py,sha256=21iKlFpsmBW4WsAexSD0WMAJnsYmMq2sIbDeYC831fc,62
97
+ griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py,sha256=KJeyhyn_iUaDx32FRi1-__yxw6rp9tG4eTBCimpurBM,5306
98
+ griptape_nodes-0.38.0.dist-info/METADATA,sha256=0HhiWLNP8_sAaER2EYYt9yO5291kDvcInk5-1-6JSSw,4102
99
+ griptape_nodes-0.38.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
+ griptape_nodes-0.38.0.dist-info/entry_points.txt,sha256=Q8V3Ydy7PNfJgTjNEVkPui25AwZ4HJ3kZCU3oh4mq-c,81
101
+ griptape_nodes-0.38.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
102
+ griptape_nodes-0.38.0.dist-info/RECORD,,