griptape-nodes 0.63.10__py3-none-any.whl → 0.64.1__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 (32) hide show
  1. griptape_nodes/common/node_executor.py +95 -171
  2. griptape_nodes/exe_types/connections.py +51 -2
  3. griptape_nodes/exe_types/flow.py +3 -3
  4. griptape_nodes/exe_types/node_types.py +330 -202
  5. griptape_nodes/exe_types/param_components/artifact_url/__init__.py +1 -0
  6. griptape_nodes/exe_types/param_components/artifact_url/public_artifact_url_parameter.py +155 -0
  7. griptape_nodes/exe_types/param_components/progress_bar_component.py +1 -1
  8. griptape_nodes/exe_types/param_types/parameter_string.py +27 -0
  9. griptape_nodes/machines/control_flow.py +64 -203
  10. griptape_nodes/machines/dag_builder.py +85 -238
  11. griptape_nodes/machines/parallel_resolution.py +9 -236
  12. griptape_nodes/machines/sequential_resolution.py +133 -11
  13. griptape_nodes/retained_mode/events/agent_events.py +2 -0
  14. griptape_nodes/retained_mode/events/flow_events.py +5 -6
  15. griptape_nodes/retained_mode/events/node_events.py +151 -1
  16. griptape_nodes/retained_mode/events/workflow_events.py +10 -0
  17. griptape_nodes/retained_mode/managers/agent_manager.py +33 -1
  18. griptape_nodes/retained_mode/managers/flow_manager.py +213 -290
  19. griptape_nodes/retained_mode/managers/library_manager.py +24 -7
  20. griptape_nodes/retained_mode/managers/node_manager.py +400 -77
  21. griptape_nodes/retained_mode/managers/version_compatibility_manager.py +113 -69
  22. griptape_nodes/retained_mode/managers/workflow_manager.py +45 -10
  23. griptape_nodes/servers/mcp.py +32 -0
  24. griptape_nodes/version_compatibility/versions/v0_63_8/__init__.py +1 -0
  25. griptape_nodes/version_compatibility/versions/v0_63_8/deprecated_nodegroup_parameters.py +105 -0
  26. {griptape_nodes-0.63.10.dist-info → griptape_nodes-0.64.1.dist-info}/METADATA +3 -1
  27. {griptape_nodes-0.63.10.dist-info → griptape_nodes-0.64.1.dist-info}/RECORD +31 -28
  28. griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -1
  29. /griptape_nodes/version_compatibility/{workflow_versions → versions}/v0_7_0/__init__.py +0 -0
  30. /griptape_nodes/version_compatibility/{workflow_versions → versions}/v0_7_0/local_executor_argument_addition.py +0 -0
  31. {griptape_nodes-0.63.10.dist-info → griptape_nodes-0.64.1.dist-info}/WHEEL +0 -0
  32. {griptape_nodes-0.63.10.dist-info → griptape_nodes-0.64.1.dist-info}/entry_points.txt +0 -0
@@ -13,7 +13,7 @@ from collections import defaultdict
13
13
  from dataclasses import dataclass, field
14
14
  from importlib.resources import files
15
15
  from pathlib import Path
16
- from typing import TYPE_CHECKING, cast
16
+ from typing import TYPE_CHECKING, Any, Generic, TypeVar, cast
17
17
 
18
18
  from packaging.requirements import InvalidRequirement, Requirement
19
19
  from pydantic import ValidationError
@@ -145,6 +145,8 @@ if TYPE_CHECKING:
145
145
  logger = logging.getLogger("griptape_nodes")
146
146
  console = Console()
147
147
 
148
+ TRegisteredEventData = TypeVar("TRegisteredEventData")
149
+
148
150
 
149
151
  class LibraryManager:
150
152
  SANDBOX_LIBRARY_NAME = "Sandbox Library"
@@ -167,11 +169,16 @@ class LibraryManager:
167
169
  _library_file_path_to_info: dict[str, LibraryInfo]
168
170
 
169
171
  @dataclass
170
- class RegisteredEventHandler:
171
- """Information regarding an event handler from a registered library."""
172
+ class RegisteredEventHandler(Generic[TRegisteredEventData]):
173
+ """Information regarding an event handler from a registered library.
174
+
175
+ The generic type parameter TRegisteredEventData allows each event type
176
+ to specify its own structured additional data.
177
+ """
172
178
 
173
179
  handler: Callable[[RequestPayload], ResultPayload]
174
180
  library_data: LibrarySchema
181
+ event_data: TRegisteredEventData | None = None
175
182
 
176
183
  # Stable module namespace mappings for workflow serialization
177
184
  # These mappings ensure that dynamically loaded modules can be reliably imported
@@ -197,7 +204,9 @@ class LibraryManager:
197
204
  self._dynamic_to_stable_module_mapping = {}
198
205
  self._stable_to_dynamic_module_mapping = {}
199
206
  self._library_to_stable_modules = {}
200
- self._library_event_handler_mappings: dict[type[Payload], dict[str, LibraryManager.RegisteredEventHandler]] = {}
207
+ self._library_event_handler_mappings: dict[
208
+ type[Payload], dict[str, LibraryManager.RegisteredEventHandler[Any]]
209
+ ] = {}
201
210
  # LibraryDirectory owns the FSMs and manages library lifecycle
202
211
  self._library_directory = LibraryDirectory()
203
212
  self._libraries_loading_complete = asyncio.Event()
@@ -357,15 +366,23 @@ class LibraryManager:
357
366
  request_type: type[RequestPayload],
358
367
  handler: Callable[[RequestPayload], ResultPayload],
359
368
  library_data: LibrarySchema,
369
+ event_data: object | None = None,
360
370
  ) -> None:
361
- """Register an event handler for a specific request type from a library."""
371
+ """Register an event handler for a specific request type from a library.
372
+
373
+ Args:
374
+ request_type: The type of request payload this handler processes
375
+ handler: The callable handler function
376
+ library_data: Schema data for the library registering this handler
377
+ event_data: Optional structured data specific to this event type
378
+ """
362
379
  if self._library_event_handler_mappings.get(request_type) is None:
363
380
  self._library_event_handler_mappings[request_type] = {}
364
381
  self._library_event_handler_mappings[request_type][library_data.name] = LibraryManager.RegisteredEventHandler(
365
- handler=handler, library_data=library_data
382
+ handler=handler, library_data=library_data, event_data=event_data
366
383
  )
367
384
 
368
- def get_registered_event_handlers(self, request_type: type[Payload]) -> dict[str, RegisteredEventHandler]:
385
+ def get_registered_event_handlers(self, request_type: type[Payload]) -> dict[str, RegisteredEventHandler[Any]]:
369
386
  """Get all registered event handlers for a specific request type."""
370
387
  return self._library_event_handler_mappings.get(request_type, {})
371
388