griptape-nodes 0.41.0__py3-none-any.whl → 0.43.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.
- griptape_nodes/__init__.py +0 -0
- griptape_nodes/app/.python-version +0 -0
- griptape_nodes/app/__init__.py +1 -10
- griptape_nodes/app/api.py +199 -0
- griptape_nodes/app/app.py +140 -222
- griptape_nodes/app/watch.py +4 -2
- griptape_nodes/bootstrap/__init__.py +0 -0
- griptape_nodes/bootstrap/bootstrap_script.py +0 -0
- griptape_nodes/bootstrap/register_libraries_script.py +0 -0
- griptape_nodes/bootstrap/structure_config.yaml +0 -0
- griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
- griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
- griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
- griptape_nodes/bootstrap/workflow_runners/__init__.py +0 -0
- griptape_nodes/bootstrap/workflow_runners/bootstrap_workflow_runner.py +0 -0
- griptape_nodes/bootstrap/workflow_runners/local_workflow_runner.py +0 -0
- griptape_nodes/bootstrap/workflow_runners/subprocess_workflow_runner.py +6 -2
- griptape_nodes/bootstrap/workflow_runners/workflow_runner.py +0 -0
- griptape_nodes/drivers/__init__.py +0 -0
- griptape_nodes/drivers/storage/__init__.py +0 -0
- griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
- griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
- griptape_nodes/drivers/storage/local_storage_driver.py +5 -3
- griptape_nodes/drivers/storage/storage_backend.py +0 -0
- griptape_nodes/exe_types/__init__.py +0 -0
- griptape_nodes/exe_types/connections.py +0 -0
- griptape_nodes/exe_types/core_types.py +0 -0
- griptape_nodes/exe_types/flow.py +68 -368
- griptape_nodes/exe_types/node_types.py +17 -1
- griptape_nodes/exe_types/type_validator.py +0 -0
- griptape_nodes/machines/__init__.py +0 -0
- griptape_nodes/machines/control_flow.py +52 -20
- griptape_nodes/machines/fsm.py +16 -2
- griptape_nodes/machines/node_resolution.py +16 -14
- griptape_nodes/mcp_server/__init__.py +1 -0
- griptape_nodes/mcp_server/server.py +126 -0
- griptape_nodes/mcp_server/ws_request_manager.py +268 -0
- griptape_nodes/node_library/__init__.py +0 -0
- griptape_nodes/node_library/advanced_node_library.py +0 -0
- griptape_nodes/node_library/library_registry.py +0 -0
- griptape_nodes/node_library/workflow_registry.py +2 -2
- griptape_nodes/py.typed +0 -0
- griptape_nodes/retained_mode/__init__.py +0 -0
- griptape_nodes/retained_mode/events/__init__.py +0 -0
- griptape_nodes/retained_mode/events/agent_events.py +70 -8
- griptape_nodes/retained_mode/events/app_events.py +137 -12
- griptape_nodes/retained_mode/events/arbitrary_python_events.py +23 -0
- griptape_nodes/retained_mode/events/base_events.py +13 -31
- griptape_nodes/retained_mode/events/config_events.py +87 -11
- griptape_nodes/retained_mode/events/connection_events.py +56 -5
- griptape_nodes/retained_mode/events/context_events.py +27 -4
- griptape_nodes/retained_mode/events/execution_events.py +99 -14
- griptape_nodes/retained_mode/events/flow_events.py +165 -7
- griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
- griptape_nodes/retained_mode/events/library_events.py +195 -17
- griptape_nodes/retained_mode/events/logger_events.py +11 -0
- griptape_nodes/retained_mode/events/node_events.py +242 -22
- griptape_nodes/retained_mode/events/object_events.py +40 -4
- griptape_nodes/retained_mode/events/os_events.py +116 -3
- griptape_nodes/retained_mode/events/parameter_events.py +212 -8
- griptape_nodes/retained_mode/events/payload_registry.py +0 -0
- griptape_nodes/retained_mode/events/secrets_events.py +59 -7
- griptape_nodes/retained_mode/events/static_file_events.py +57 -4
- griptape_nodes/retained_mode/events/validation_events.py +39 -4
- griptape_nodes/retained_mode/events/workflow_events.py +188 -17
- griptape_nodes/retained_mode/griptape_nodes.py +89 -363
- griptape_nodes/retained_mode/managers/__init__.py +0 -0
- griptape_nodes/retained_mode/managers/agent_manager.py +49 -23
- griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
- griptape_nodes/retained_mode/managers/config_manager.py +0 -0
- griptape_nodes/retained_mode/managers/context_manager.py +0 -0
- griptape_nodes/retained_mode/managers/engine_identity_manager.py +146 -0
- griptape_nodes/retained_mode/managers/event_manager.py +14 -2
- griptape_nodes/retained_mode/managers/flow_manager.py +751 -64
- griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +45 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +191 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +346 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +439 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +17 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +82 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +116 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +352 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +104 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +155 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +18 -0
- griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +12 -0
- griptape_nodes/retained_mode/managers/library_manager.py +255 -40
- griptape_nodes/retained_mode/managers/node_manager.py +120 -103
- griptape_nodes/retained_mode/managers/object_manager.py +11 -3
- griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
- griptape_nodes/retained_mode/managers/os_manager.py +582 -8
- griptape_nodes/retained_mode/managers/secrets_manager.py +4 -0
- griptape_nodes/retained_mode/managers/session_manager.py +328 -0
- griptape_nodes/retained_mode/managers/settings.py +7 -0
- griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
- griptape_nodes/retained_mode/managers/version_compatibility_manager.py +2 -2
- griptape_nodes/retained_mode/managers/workflow_manager.py +722 -456
- griptape_nodes/retained_mode/retained_mode.py +44 -0
- griptape_nodes/retained_mode/utils/__init__.py +0 -0
- griptape_nodes/retained_mode/utils/engine_identity.py +141 -27
- griptape_nodes/retained_mode/utils/name_generator.py +0 -0
- griptape_nodes/traits/__init__.py +0 -0
- griptape_nodes/traits/add_param_button.py +0 -0
- griptape_nodes/traits/button.py +0 -0
- griptape_nodes/traits/clamp.py +0 -0
- griptape_nodes/traits/compare.py +0 -0
- griptape_nodes/traits/compare_images.py +0 -0
- griptape_nodes/traits/file_system_picker.py +127 -0
- griptape_nodes/traits/minmax.py +0 -0
- griptape_nodes/traits/options.py +0 -0
- griptape_nodes/traits/slider.py +0 -0
- griptape_nodes/traits/trait_registry.py +0 -0
- griptape_nodes/traits/traits.json +0 -0
- griptape_nodes/updater/__init__.py +2 -2
- griptape_nodes/updater/__main__.py +0 -0
- griptape_nodes/utils/__init__.py +0 -0
- griptape_nodes/utils/dict_utils.py +0 -0
- griptape_nodes/utils/image_preview.py +128 -0
- griptape_nodes/utils/metaclasses.py +0 -0
- griptape_nodes/version_compatibility/__init__.py +0 -0
- griptape_nodes/version_compatibility/versions/__init__.py +0 -0
- griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
- griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +5 -5
- griptape_nodes-0.43.0.dist-info/METADATA +90 -0
- griptape_nodes-0.43.0.dist-info/RECORD +129 -0
- griptape_nodes-0.43.0.dist-info/WHEEL +4 -0
- {griptape_nodes-0.41.0.dist-info → griptape_nodes-0.43.0.dist-info}/entry_points.txt +1 -0
- griptape_nodes/app/app_sessions.py +0 -458
- griptape_nodes/retained_mode/utils/session_persistence.py +0 -105
- griptape_nodes-0.41.0.dist-info/METADATA +0 -78
- griptape_nodes-0.41.0.dist-info/RECORD +0 -112
- griptape_nodes-0.41.0.dist-info/WHEEL +0 -4
- griptape_nodes-0.41.0.dist-info/licenses/LICENSE +0 -201
|
@@ -21,6 +21,18 @@ class RunAgentRequestArtifact(dict):
|
|
|
21
21
|
@dataclass
|
|
22
22
|
@PayloadRegistry.register
|
|
23
23
|
class RunAgentRequest(RequestPayload):
|
|
24
|
+
"""Run an agent with input and optional artifacts.
|
|
25
|
+
|
|
26
|
+
Use when: Executing conversational AI interactions, processing user queries,
|
|
27
|
+
running autonomous agents, handling multi-modal inputs with URLs.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
input: Text input to send to the agent
|
|
31
|
+
url_artifacts: List of URL artifacts to include with the request
|
|
32
|
+
|
|
33
|
+
Results: RunAgentResultStarted -> RunAgentResultSuccess (with output) | RunAgentResultFailure (execution error)
|
|
34
|
+
"""
|
|
35
|
+
|
|
24
36
|
input: str
|
|
25
37
|
url_artifacts: list[RunAgentRequestArtifact]
|
|
26
38
|
|
|
@@ -28,76 +40,126 @@ class RunAgentRequest(RequestPayload):
|
|
|
28
40
|
@dataclass
|
|
29
41
|
@PayloadRegistry.register
|
|
30
42
|
class RunAgentResultStarted(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
31
|
-
|
|
43
|
+
"""Agent execution started successfully. Execution will continue asynchronously."""
|
|
32
44
|
|
|
33
45
|
|
|
34
46
|
@dataclass
|
|
35
47
|
@PayloadRegistry.register
|
|
36
48
|
class RunAgentResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
49
|
+
"""Agent execution completed successfully.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
output: Dictionary containing agent response and execution results
|
|
53
|
+
"""
|
|
54
|
+
|
|
37
55
|
output: dict
|
|
38
56
|
|
|
39
57
|
|
|
40
58
|
@dataclass
|
|
41
59
|
@PayloadRegistry.register
|
|
42
60
|
class RunAgentResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
61
|
+
"""Agent execution failed.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
error: Dictionary containing error details and failure information
|
|
65
|
+
"""
|
|
66
|
+
|
|
43
67
|
error: dict
|
|
44
68
|
|
|
45
69
|
|
|
46
70
|
@dataclass
|
|
47
71
|
@PayloadRegistry.register
|
|
48
72
|
class GetConversationMemoryRequest(RequestPayload):
|
|
49
|
-
|
|
73
|
+
"""Get the agent's conversation memory.
|
|
74
|
+
|
|
75
|
+
Use when: Reviewing conversation history, implementing memory inspection,
|
|
76
|
+
debugging agent behavior, displaying conversation context.
|
|
77
|
+
|
|
78
|
+
Results: GetConversationMemoryResultSuccess (with runs) | GetConversationMemoryResultFailure (memory error)
|
|
79
|
+
"""
|
|
50
80
|
|
|
51
81
|
|
|
52
82
|
@dataclass
|
|
53
83
|
@PayloadRegistry.register
|
|
54
84
|
class GetConversationMemoryResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
85
|
+
"""Conversation memory retrieved successfully.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
runs: List of conversation runs (exchanges between user and agent)
|
|
89
|
+
"""
|
|
90
|
+
|
|
55
91
|
runs: list[Run]
|
|
56
92
|
|
|
57
93
|
|
|
58
94
|
@dataclass
|
|
59
95
|
@PayloadRegistry.register
|
|
60
96
|
class GetConversationMemoryResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
61
|
-
|
|
97
|
+
"""Conversation memory retrieval failed. Common causes: memory not initialized, access error."""
|
|
62
98
|
|
|
63
99
|
|
|
64
100
|
@dataclass
|
|
65
101
|
@PayloadRegistry.register
|
|
66
102
|
class ConfigureAgentRequest(RequestPayload):
|
|
103
|
+
"""Configure agent settings and behavior.
|
|
104
|
+
|
|
105
|
+
Use when: Setting up agent parameters, changing model configurations,
|
|
106
|
+
customizing agent behavior, updating agent settings.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
prompt_driver: Dictionary of prompt driver configuration options
|
|
110
|
+
|
|
111
|
+
Results: ConfigureAgentResultSuccess | ConfigureAgentResultFailure (configuration error)
|
|
112
|
+
"""
|
|
113
|
+
|
|
67
114
|
prompt_driver: dict = field(default_factory=dict)
|
|
68
115
|
|
|
69
116
|
|
|
70
117
|
@dataclass
|
|
71
118
|
@PayloadRegistry.register
|
|
72
119
|
class ConfigureAgentResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
73
|
-
|
|
120
|
+
"""Agent configured successfully. New settings are now active."""
|
|
74
121
|
|
|
75
122
|
|
|
76
123
|
@dataclass
|
|
77
124
|
@PayloadRegistry.register
|
|
78
125
|
class ConfigureAgentResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
79
|
-
|
|
126
|
+
"""Agent configuration failed. Common causes: invalid parameters, configuration error."""
|
|
80
127
|
|
|
81
128
|
|
|
82
129
|
@dataclass
|
|
83
130
|
@PayloadRegistry.register
|
|
84
131
|
class ResetAgentConversationMemoryRequest(RequestPayload):
|
|
85
|
-
|
|
132
|
+
"""Reset the agent's conversation memory.
|
|
133
|
+
|
|
134
|
+
Use when: Starting fresh conversations, clearing conversation history,
|
|
135
|
+
resolving memory issues, implementing conversation reset features.
|
|
136
|
+
|
|
137
|
+
Results: ResetAgentConversationMemoryResultSuccess | ResetAgentConversationMemoryResultFailure (reset error)
|
|
138
|
+
"""
|
|
86
139
|
|
|
87
140
|
|
|
88
141
|
@dataclass
|
|
89
142
|
@PayloadRegistry.register
|
|
90
143
|
class ResetAgentConversationMemoryResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
91
|
-
|
|
144
|
+
"""Agent conversation memory reset successfully. All previous conversation history cleared."""
|
|
92
145
|
|
|
93
146
|
|
|
94
147
|
@dataclass
|
|
95
148
|
@PayloadRegistry.register
|
|
96
149
|
class ResetAgentConversationMemoryResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
97
|
-
|
|
150
|
+
"""Agent conversation memory reset failed. Common causes: memory access error, system constraints."""
|
|
98
151
|
|
|
99
152
|
|
|
100
153
|
@dataclass
|
|
101
154
|
@PayloadRegistry.register
|
|
102
155
|
class AgentStreamEvent(ExecutionPayload):
|
|
156
|
+
"""Streaming token event during agent execution.
|
|
157
|
+
|
|
158
|
+
Use when: Implementing real-time agent output, displaying progressive responses,
|
|
159
|
+
building streaming UIs, monitoring agent token generation.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
token: Individual token generated by the agent during execution
|
|
163
|
+
"""
|
|
164
|
+
|
|
103
165
|
token: str
|
|
@@ -13,6 +13,17 @@ from griptape_nodes.retained_mode.events.payload_registry import PayloadRegistry
|
|
|
13
13
|
@dataclass
|
|
14
14
|
@PayloadRegistry.register
|
|
15
15
|
class AppStartSessionRequest(RequestPayload):
|
|
16
|
+
"""Start a new application session.
|
|
17
|
+
|
|
18
|
+
Use when: Initializing client connections, beginning new workflow sessions,
|
|
19
|
+
setting up isolated execution environments, managing session state.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
session_id: Specific session ID to use (None for auto-generated)
|
|
23
|
+
|
|
24
|
+
Results: AppStartSessionResultSuccess (with session ID) | AppStartSessionResultFailure (session creation error)
|
|
25
|
+
"""
|
|
26
|
+
|
|
16
27
|
# TODO: https://github.com/griptape-ai/griptape-nodes/issues/1600
|
|
17
28
|
session_id: str | None = None
|
|
18
29
|
|
|
@@ -20,48 +31,86 @@ class AppStartSessionRequest(RequestPayload):
|
|
|
20
31
|
@dataclass
|
|
21
32
|
@PayloadRegistry.register
|
|
22
33
|
class AppStartSessionResultSuccess(ResultPayloadSuccess):
|
|
34
|
+
"""Session started successfully.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
session_id: Unique identifier for the created session
|
|
38
|
+
"""
|
|
39
|
+
|
|
23
40
|
session_id: str
|
|
24
41
|
|
|
25
42
|
|
|
26
43
|
@dataclass
|
|
27
44
|
@PayloadRegistry.register
|
|
28
45
|
class AppStartSessionResultFailure(ResultPayloadFailure):
|
|
29
|
-
|
|
46
|
+
"""Session start failed. Common causes: resource constraints, initialization error."""
|
|
30
47
|
|
|
31
48
|
|
|
32
49
|
@dataclass
|
|
33
50
|
@PayloadRegistry.register
|
|
34
51
|
class AppGetSessionRequest(RequestPayload):
|
|
35
|
-
|
|
52
|
+
"""Get the current session information.
|
|
53
|
+
|
|
54
|
+
Use when: Checking session status, retrieving session details,
|
|
55
|
+
validating session state, debugging session issues.
|
|
56
|
+
|
|
57
|
+
Results: AppGetSessionResultSuccess (with session ID) | AppGetSessionResultFailure (session error)
|
|
58
|
+
"""
|
|
36
59
|
|
|
37
60
|
|
|
38
61
|
@dataclass
|
|
39
62
|
@PayloadRegistry.register
|
|
40
63
|
class AppGetSessionResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
64
|
+
"""Session information retrieved successfully.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
session_id: Current session identifier (None if no active session)
|
|
68
|
+
"""
|
|
69
|
+
|
|
41
70
|
session_id: str | None
|
|
42
71
|
|
|
43
72
|
|
|
44
73
|
@dataclass
|
|
45
74
|
@PayloadRegistry.register
|
|
46
75
|
class AppGetSessionResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
47
|
-
|
|
76
|
+
"""Session information retrieval failed. Common causes: session not found, access error."""
|
|
48
77
|
|
|
49
78
|
|
|
50
79
|
@dataclass
|
|
51
80
|
@PayloadRegistry.register
|
|
52
81
|
class AppInitializationComplete(AppPayload):
|
|
53
|
-
|
|
82
|
+
"""Application initialization completed successfully. All subsystems ready."""
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dataclass
|
|
86
|
+
@PayloadRegistry.register
|
|
87
|
+
class AppConnectionEstablished(AppPayload):
|
|
88
|
+
"""Notification that a connection to the API has been established."""
|
|
54
89
|
|
|
55
90
|
|
|
56
91
|
@dataclass
|
|
57
92
|
@PayloadRegistry.register
|
|
58
93
|
class GetEngineVersionRequest(RequestPayload):
|
|
59
|
-
|
|
94
|
+
"""Get the engine version information.
|
|
95
|
+
|
|
96
|
+
Use when: Checking compatibility, displaying version info,
|
|
97
|
+
debugging engine issues, validating engine capabilities.
|
|
98
|
+
|
|
99
|
+
Results: GetEngineVersionResultSuccess (with version numbers) | GetEngineVersionResultFailure (version error)
|
|
100
|
+
"""
|
|
60
101
|
|
|
61
102
|
|
|
62
103
|
@dataclass
|
|
63
104
|
@PayloadRegistry.register
|
|
64
105
|
class GetEngineVersionResultSuccess(ResultPayloadSuccess):
|
|
106
|
+
"""Engine version retrieved successfully.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
major: Major version number
|
|
110
|
+
minor: Minor version number
|
|
111
|
+
patch: Patch version number
|
|
112
|
+
"""
|
|
113
|
+
|
|
65
114
|
major: int
|
|
66
115
|
minor: int
|
|
67
116
|
patch: int
|
|
@@ -70,25 +119,37 @@ class GetEngineVersionResultSuccess(ResultPayloadSuccess):
|
|
|
70
119
|
@dataclass
|
|
71
120
|
@PayloadRegistry.register
|
|
72
121
|
class GetEngineVersionResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
73
|
-
|
|
122
|
+
"""Engine version retrieval failed. Common causes: version not available, system error."""
|
|
74
123
|
|
|
75
124
|
|
|
76
125
|
@dataclass
|
|
77
126
|
@PayloadRegistry.register
|
|
78
127
|
class AppEndSessionRequest(RequestPayload):
|
|
79
|
-
|
|
128
|
+
"""End the current application session.
|
|
129
|
+
|
|
130
|
+
Use when: Closing client connections, cleaning up session resources,
|
|
131
|
+
terminating workflow sessions, implementing logout functionality.
|
|
132
|
+
|
|
133
|
+
Results: AppEndSessionResultSuccess (with session ID) | AppEndSessionResultFailure (cleanup error)
|
|
134
|
+
"""
|
|
80
135
|
|
|
81
136
|
|
|
82
137
|
@dataclass
|
|
83
138
|
@PayloadRegistry.register
|
|
84
139
|
class AppEndSessionResultSuccess(ResultPayloadSuccess):
|
|
140
|
+
"""Session ended successfully.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
session_id: Identifier of the ended session (None if no session was active)
|
|
144
|
+
"""
|
|
145
|
+
|
|
85
146
|
session_id: str | None
|
|
86
147
|
|
|
87
148
|
|
|
88
149
|
@dataclass
|
|
89
150
|
@PayloadRegistry.register
|
|
90
151
|
class AppEndSessionResultFailure(ResultPayloadFailure):
|
|
91
|
-
|
|
152
|
+
"""Session end failed. Common causes: session not found, cleanup error."""
|
|
92
153
|
|
|
93
154
|
|
|
94
155
|
@dataclass
|
|
@@ -100,13 +161,13 @@ class SessionHeartbeatRequest(RequestPayload):
|
|
|
100
161
|
@dataclass
|
|
101
162
|
@PayloadRegistry.register
|
|
102
163
|
class SessionHeartbeatResultSuccess(ResultPayloadSuccess):
|
|
103
|
-
|
|
164
|
+
"""Session heartbeat successful. Session is active and responsive."""
|
|
104
165
|
|
|
105
166
|
|
|
106
167
|
@dataclass
|
|
107
168
|
@PayloadRegistry.register
|
|
108
169
|
class SessionHeartbeatResultFailure(ResultPayloadFailure):
|
|
109
|
-
|
|
170
|
+
"""Session heartbeat failed. Common causes: session inactive, network error, timeout."""
|
|
110
171
|
|
|
111
172
|
|
|
112
173
|
@dataclass
|
|
@@ -125,6 +186,24 @@ class EngineHeartbeatRequest(RequestPayload):
|
|
|
125
186
|
@dataclass
|
|
126
187
|
@PayloadRegistry.register
|
|
127
188
|
class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
|
|
189
|
+
"""Engine heartbeat successful with comprehensive status information.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
heartbeat_id: Unique identifier correlating with the request
|
|
193
|
+
engine_version: Current engine version string
|
|
194
|
+
engine_id: Unique engine identifier (None if not set)
|
|
195
|
+
session_id: Current session identifier (None if no session)
|
|
196
|
+
timestamp: Heartbeat timestamp
|
|
197
|
+
instance_type: Cloud instance type (None if not applicable)
|
|
198
|
+
instance_region: Cloud instance region (None if not applicable)
|
|
199
|
+
instance_provider: Cloud provider name (None if not applicable)
|
|
200
|
+
deployment_type: Type of deployment (None if not applicable)
|
|
201
|
+
current_workflow: Name of active workflow (None if none)
|
|
202
|
+
workflow_file_path: Path to workflow file (None if none)
|
|
203
|
+
has_active_flow: Whether there's an active flow running
|
|
204
|
+
engine_name: Human-readable engine name
|
|
205
|
+
"""
|
|
206
|
+
|
|
128
207
|
heartbeat_id: str
|
|
129
208
|
engine_version: str
|
|
130
209
|
engine_id: str | None
|
|
@@ -134,7 +213,6 @@ class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
|
|
|
134
213
|
instance_region: str | None
|
|
135
214
|
instance_provider: str | None
|
|
136
215
|
deployment_type: str | None
|
|
137
|
-
public_ip: str | None
|
|
138
216
|
current_workflow: str | None
|
|
139
217
|
workflow_file_path: str | None
|
|
140
218
|
has_active_flow: bool
|
|
@@ -144,40 +222,87 @@ class EngineHeartbeatResultSuccess(ResultPayloadSuccess):
|
|
|
144
222
|
@dataclass
|
|
145
223
|
@PayloadRegistry.register
|
|
146
224
|
class EngineHeartbeatResultFailure(ResultPayloadFailure):
|
|
225
|
+
"""Engine heartbeat failed.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
heartbeat_id: Unique identifier correlating with the request
|
|
229
|
+
"""
|
|
230
|
+
|
|
147
231
|
heartbeat_id: str
|
|
148
232
|
|
|
149
233
|
|
|
150
234
|
@dataclass
|
|
151
235
|
@PayloadRegistry.register
|
|
152
236
|
class SetEngineNameRequest(RequestPayload):
|
|
237
|
+
"""Set the human-readable engine name.
|
|
238
|
+
|
|
239
|
+
Use when: Customizing engine identification, setting up engine instances,
|
|
240
|
+
implementing engine management, branding engine instances.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
engine_name: New name for the engine
|
|
244
|
+
|
|
245
|
+
Results: SetEngineNameResultSuccess (with name) | SetEngineNameResultFailure (validation error)
|
|
246
|
+
"""
|
|
247
|
+
|
|
153
248
|
engine_name: str
|
|
154
249
|
|
|
155
250
|
|
|
156
251
|
@dataclass
|
|
157
252
|
@PayloadRegistry.register
|
|
158
253
|
class SetEngineNameResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
254
|
+
"""Engine name set successfully.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
engine_name: The name that was set for the engine
|
|
258
|
+
"""
|
|
259
|
+
|
|
159
260
|
engine_name: str
|
|
160
261
|
|
|
161
262
|
|
|
162
263
|
@dataclass
|
|
163
264
|
@PayloadRegistry.register
|
|
164
265
|
class SetEngineNameResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
266
|
+
"""Engine name setting failed.
|
|
267
|
+
|
|
268
|
+
Args:
|
|
269
|
+
error_message: Detailed error message describing the failure
|
|
270
|
+
"""
|
|
271
|
+
|
|
165
272
|
error_message: str
|
|
166
273
|
|
|
167
274
|
|
|
168
275
|
@dataclass
|
|
169
276
|
@PayloadRegistry.register
|
|
170
277
|
class GetEngineNameRequest(RequestPayload):
|
|
171
|
-
|
|
278
|
+
"""Get the current engine name.
|
|
279
|
+
|
|
280
|
+
Use when: Displaying engine information, checking engine identity,
|
|
281
|
+
implementing engine management UIs, debugging engine issues.
|
|
282
|
+
|
|
283
|
+
Results: GetEngineNameResultSuccess (with name) | GetEngineNameResultFailure (retrieval error)
|
|
284
|
+
"""
|
|
172
285
|
|
|
173
286
|
|
|
174
287
|
@dataclass
|
|
175
288
|
@PayloadRegistry.register
|
|
176
289
|
class GetEngineNameResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuccess):
|
|
290
|
+
"""Engine name retrieved successfully.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
engine_name: Current engine name
|
|
294
|
+
"""
|
|
295
|
+
|
|
177
296
|
engine_name: str
|
|
178
297
|
|
|
179
298
|
|
|
180
299
|
@dataclass
|
|
181
300
|
@PayloadRegistry.register
|
|
182
301
|
class GetEngineNameResultFailure(WorkflowNotAlteredMixin, ResultPayloadFailure):
|
|
302
|
+
"""Engine name retrieval failed.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
error_message: Detailed error message describing the failure
|
|
306
|
+
"""
|
|
307
|
+
|
|
183
308
|
error_message: str
|
|
@@ -15,16 +15,39 @@ from griptape_nodes.retained_mode.events.payload_registry import PayloadRegistry
|
|
|
15
15
|
@dataclass
|
|
16
16
|
@PayloadRegistry.register
|
|
17
17
|
class RunArbitraryPythonStringRequest(RequestPayload):
|
|
18
|
+
"""Execute arbitrary Python code string.
|
|
19
|
+
|
|
20
|
+
Use when: Development/debugging, testing code snippets, prototyping,
|
|
21
|
+
educational purposes. WARNING: This is configurable behavior that can be disabled.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
python_string: Python code string to execute
|
|
25
|
+
|
|
26
|
+
Results: RunArbitraryPythonStringResultSuccess (with output) | RunArbitraryPythonStringResultFailure (execution error)
|
|
27
|
+
"""
|
|
28
|
+
|
|
18
29
|
python_string: str
|
|
19
30
|
|
|
20
31
|
|
|
21
32
|
@dataclass
|
|
22
33
|
@PayloadRegistry.register
|
|
23
34
|
class RunArbitraryPythonStringResultSuccess(ResultPayloadSuccess):
|
|
35
|
+
"""Python code executed successfully.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
python_output: String output from the executed Python code
|
|
39
|
+
"""
|
|
40
|
+
|
|
24
41
|
python_output: str
|
|
25
42
|
|
|
26
43
|
|
|
27
44
|
@dataclass
|
|
28
45
|
@PayloadRegistry.register
|
|
29
46
|
class RunArbitraryPythonStringResultFailure(ResultPayloadFailure):
|
|
47
|
+
"""Python code execution failed.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
python_output: Error output from the failed Python code execution
|
|
51
|
+
"""
|
|
52
|
+
|
|
30
53
|
python_output: str
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import json
|
|
4
4
|
from abc import ABC, abstractmethod
|
|
5
5
|
from dataclasses import asdict, dataclass, field, is_dataclass
|
|
6
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
6
|
+
from typing import TYPE_CHECKING, Any, ClassVar, TypeVar
|
|
7
7
|
|
|
8
8
|
from griptape.artifacts import BaseArtifact
|
|
9
9
|
from griptape.events import BaseEvent as GtBaseEvent
|
|
@@ -12,9 +12,6 @@ from griptape.structures import Structure
|
|
|
12
12
|
from griptape.tools import BaseTool
|
|
13
13
|
from pydantic import BaseModel, Field
|
|
14
14
|
|
|
15
|
-
from griptape_nodes.retained_mode.utils.engine_identity import EngineIdentity
|
|
16
|
-
from griptape_nodes.retained_mode.utils.session_persistence import SessionPersistence
|
|
17
|
-
|
|
18
15
|
if TYPE_CHECKING:
|
|
19
16
|
import builtins
|
|
20
17
|
|
|
@@ -104,7 +101,7 @@ class AppPayload(Payload):
|
|
|
104
101
|
|
|
105
102
|
|
|
106
103
|
# Type variables for our generic payloads
|
|
107
|
-
P = TypeVar("P", bound=
|
|
104
|
+
P = TypeVar("P", bound=RequestPayload)
|
|
108
105
|
R = TypeVar("R", bound=ResultPayload)
|
|
109
106
|
E = TypeVar("E", bound=ExecutionPayload)
|
|
110
107
|
A = TypeVar("A", bound=AppPayload)
|
|
@@ -113,32 +110,13 @@ A = TypeVar("A", bound=AppPayload)
|
|
|
113
110
|
class BaseEvent(BaseModel, ABC):
|
|
114
111
|
"""Abstract base class for all events."""
|
|
115
112
|
|
|
116
|
-
#
|
|
117
|
-
# TODO: https://github.com/griptape-ai/griptape-nodes/issues/848
|
|
118
|
-
_session_id: ClassVar[str | None] = None
|
|
113
|
+
# Instance fields for engine and session identification
|
|
119
114
|
_engine_id: ClassVar[str | None] = None
|
|
115
|
+
_session_id: ClassVar[str | None] = None
|
|
120
116
|
|
|
121
|
-
# Instance variables with a default_factory that references the class variable
|
|
122
117
|
engine_id: str | None = Field(default_factory=lambda: BaseEvent._engine_id)
|
|
123
118
|
session_id: str | None = Field(default_factory=lambda: BaseEvent._session_id)
|
|
124
119
|
|
|
125
|
-
@classmethod
|
|
126
|
-
def initialize_engine_id(cls) -> None:
|
|
127
|
-
"""Initialize the engine ID if not already set."""
|
|
128
|
-
if cls._engine_id is None:
|
|
129
|
-
persisted_engine_id = cls._engine_id = EngineIdentity.get_engine_id()
|
|
130
|
-
if persisted_engine_id:
|
|
131
|
-
cls._engine_id = persisted_engine_id
|
|
132
|
-
|
|
133
|
-
@classmethod
|
|
134
|
-
def initialize_session_id(cls) -> None:
|
|
135
|
-
"""Initialize the session ID from persisted storage if available."""
|
|
136
|
-
if cls._session_id is None:
|
|
137
|
-
# Check if there's a persisted session ID
|
|
138
|
-
persisted_session_id = SessionPersistence.get_persisted_session_id()
|
|
139
|
-
if persisted_session_id:
|
|
140
|
-
cls._session_id = persisted_session_id
|
|
141
|
-
|
|
142
120
|
# Custom JSON encoder for the payload
|
|
143
121
|
class Config:
|
|
144
122
|
"""Pydantic configuration for the BaseEvent class."""
|
|
@@ -203,10 +181,12 @@ class BaseEvent(BaseModel, ABC):
|
|
|
203
181
|
"""
|
|
204
182
|
|
|
205
183
|
|
|
206
|
-
class EventRequest
|
|
184
|
+
class EventRequest[P: Payload](BaseEvent):
|
|
207
185
|
"""Request event."""
|
|
208
186
|
|
|
209
187
|
request: P
|
|
188
|
+
request_id: str | None = None
|
|
189
|
+
response_topic: str | None = None
|
|
210
190
|
|
|
211
191
|
def __init__(self, **data) -> None:
|
|
212
192
|
"""Initialize an EventRequest, inferring the generic type if needed."""
|
|
@@ -262,14 +242,16 @@ class EventRequest(BaseEvent, Generic[P]):
|
|
|
262
242
|
raise ValueError(msg)
|
|
263
243
|
|
|
264
244
|
# Create the event instance with the payload
|
|
265
|
-
return cls(request=request_payload)
|
|
245
|
+
return cls(request=request_payload, **event_data)
|
|
266
246
|
|
|
267
247
|
|
|
268
|
-
class EventResult
|
|
248
|
+
class EventResult[P: RequestPayload, R: ResultPayload](BaseEvent, ABC):
|
|
269
249
|
"""Abstract base class for result events."""
|
|
270
250
|
|
|
271
251
|
request: P
|
|
272
252
|
result: R
|
|
253
|
+
request_id: str | None = None
|
|
254
|
+
response_topic: str | None = None
|
|
273
255
|
retained_mode: str | None = None
|
|
274
256
|
|
|
275
257
|
def __init__(self, **data) -> None:
|
|
@@ -447,7 +429,7 @@ def deserialize_event(json_data: str | dict | Any) -> BaseEvent:
|
|
|
447
429
|
|
|
448
430
|
|
|
449
431
|
# EXECUTION EVENT BASE (this event type is used for the execution of a Griptape Nodes flow)
|
|
450
|
-
class ExecutionEvent
|
|
432
|
+
class ExecutionEvent[E: ExecutionPayload](BaseEvent):
|
|
451
433
|
payload: E
|
|
452
434
|
|
|
453
435
|
def __init__(self, **data) -> None:
|
|
@@ -508,7 +490,7 @@ class ExecutionEvent(BaseEvent, Generic[E]):
|
|
|
508
490
|
|
|
509
491
|
|
|
510
492
|
# Events sent as part of the lifecycle of the Griptape Nodes application.
|
|
511
|
-
class AppEvent
|
|
493
|
+
class AppEvent[A: AppPayload](BaseEvent):
|
|
512
494
|
payload: A
|
|
513
495
|
|
|
514
496
|
def __init__(self, **data) -> None:
|