griptape-nodes 0.59.1__py3-none-any.whl → 0.59.3__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.
@@ -114,7 +114,12 @@ class RequestClient:
114
114
  self._subscribed_response_topics.add(response_topic)
115
115
 
116
116
  # Send the request as an EventRequest
117
- event_payload = {"event_type": "EventRequest", "request_type": request_type, "request": payload}
117
+ event_payload = {
118
+ "event_type": "EventRequest",
119
+ "request_type": request_type,
120
+ "request": payload,
121
+ "response_topic": response_topic,
122
+ }
118
123
 
119
124
  logger.debug("Sending request %s: %s", request_id, request_type)
120
125
 
@@ -257,7 +257,8 @@ class AgentManager:
257
257
  full_result += event.token
258
258
  try:
259
259
  result_json = json.loads(repair_json(full_result))
260
- if "conversation_output" in result_json:
260
+
261
+ if isinstance(result_json, dict) and "conversation_output" in result_json:
261
262
  new_conversation_output = result_json["conversation_output"]
262
263
  if new_conversation_output != last_conversation_output:
263
264
  GriptapeNodes.EventManager().put_event(
@@ -286,7 +287,7 @@ class AgentManager:
286
287
  return RunAgentResultFailure(error=ErrorArtifact(last_event).to_dict(), result_details=err_msg)
287
288
  except Exception as e:
288
289
  err_msg = f"Error running agent: {e}"
289
- logger.error(err_msg)
290
+ logger.exception(err_msg)
290
291
  return RunAgentResultFailure(error=ErrorArtifact(e).to_dict(), result_details=err_msg)
291
292
 
292
293
  def on_handle_configure_agent_request(self, request: ConfigureAgentRequest) -> ResultPayload:
@@ -169,8 +169,6 @@ class LibraryManager:
169
169
  self._library_event_handler_mappings: dict[type[Payload], dict[str, LibraryManager.RegisteredEventHandler]] = {}
170
170
  # LibraryDirectory owns the FSMs and manages library lifecycle
171
171
  self._library_directory = LibraryDirectory()
172
- # Lock for synchronizing sys.path modifications during parallel library installation
173
- self._sys_path_lock = asyncio.Lock()
174
172
 
175
173
  event_manager.assign_manager_to_request_type(
176
174
  ListRegisteredLibrariesRequest, self.on_list_registered_libraries_request
@@ -726,8 +724,7 @@ class LibraryManager:
726
724
  # Get the directory containing the JSON file to resolve relative paths
727
725
  base_dir = json_path.parent.absolute()
728
726
  # Add the directory to the Python path to allow for relative imports
729
- async with self._sys_path_lock:
730
- sys.path.insert(0, str(base_dir))
727
+ sys.path.insert(0, str(base_dir))
731
728
 
732
729
  # Load the advanced library module if specified
733
730
  advanced_library_instance = None
@@ -1060,8 +1057,7 @@ class LibraryManager:
1060
1057
  )
1061
1058
  )
1062
1059
  )
1063
- async with self._sys_path_lock:
1064
- sys.path.insert(0, site_packages)
1060
+ sys.path.insert(0, site_packages)
1065
1061
 
1066
1062
  return library_venv_python_path
1067
1063
 
@@ -1503,27 +1499,6 @@ class LibraryManager:
1503
1499
 
1504
1500
  return node_class
1505
1501
 
1506
- async def _register_single_library(self, library_result: LoadLibraryMetadataFromFileResultSuccess) -> None:
1507
- """Register a single library (sandbox or config-based) and handle errors.
1508
-
1509
- Args:
1510
- library_result: The metadata result for the library to register
1511
- """
1512
- try:
1513
- if library_result.library_schema.name == LibraryManager.SANDBOX_LIBRARY_NAME:
1514
- await self._attempt_generate_sandbox_library_from_schema(
1515
- library_schema=library_result.library_schema, sandbox_directory=library_result.file_path
1516
- )
1517
- else:
1518
- register_request = RegisterLibraryFromFileRequest(
1519
- file_path=library_result.file_path, load_as_default_library=False
1520
- )
1521
- register_result = await self.register_library_from_file_request(register_request)
1522
- if isinstance(register_result, RegisterLibraryFromFileResultFailure):
1523
- logger.warning("Failed to register library from %s", library_result.file_path)
1524
- except Exception as e:
1525
- logger.warning("Failed to register library from %s with exception: %s", library_result.file_path, e)
1526
-
1527
1502
  async def load_all_libraries_from_config(self) -> None:
1528
1503
  # Load metadata for all libraries to determine which ones can be safely loaded
1529
1504
  metadata_request = LoadMetadataForAllLibrariesRequest()
@@ -1543,10 +1518,23 @@ class LibraryManager:
1543
1518
  problems=failed_library.problems,
1544
1519
  )
1545
1520
 
1546
- # Use task group for parallel library loading
1547
- async with asyncio.TaskGroup() as tg:
1548
- for library_result in metadata_result.successful_libraries:
1549
- tg.create_task(self._register_single_library(library_result))
1521
+ # Use metadata results to selectively load libraries
1522
+ for library_result in metadata_result.successful_libraries:
1523
+ if library_result.library_schema.name == LibraryManager.SANDBOX_LIBRARY_NAME:
1524
+ # Handle sandbox library - use the schema we already have
1525
+ await self._attempt_generate_sandbox_library_from_schema(
1526
+ library_schema=library_result.library_schema, sandbox_directory=library_result.file_path
1527
+ )
1528
+ else:
1529
+ # Handle config-based library - register it directly using the file path
1530
+ register_request = RegisterLibraryFromFileRequest(
1531
+ file_path=library_result.file_path, load_as_default_library=False
1532
+ )
1533
+ register_result = await self.register_library_from_file_request(register_request)
1534
+ if isinstance(register_result, RegisterLibraryFromFileResultFailure):
1535
+ # Registration failed - the failure info is already recorded in _library_file_path_to_info
1536
+ # by register_library_from_file_request, so we just log it here for visibility
1537
+ logger.warning("Failed to register library from %s", library_result.file_path)
1550
1538
 
1551
1539
  # Print 'em all pretty
1552
1540
  self.print_library_load_status()
@@ -97,7 +97,7 @@ def start_mcp_server(api_key: str) -> None:
97
97
 
98
98
  request_payload = SUPPORTED_REQUEST_EVENTS[name](**arguments)
99
99
 
100
- result = await manager.request(request_payload.__class__.__name__, request_payload.__dict__, timeout_ms=5000)
100
+ result = await manager.request(request_payload.__class__.__name__, request_payload.__dict__, timeout_ms=30000)
101
101
  mcp_server_logger.debug("Got result: %s", result)
102
102
 
103
103
  return [TextContent(type="text", text=json.dumps(result))]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: griptape-nodes
3
- Version: 0.59.1
3
+ Version: 0.59.3
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.8
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -2,7 +2,7 @@ griptape_nodes/__init__.py,sha256=WxWjICLxwuyZGDpPUyCmj047GbN7PIspi4YMWgmrrQc,67
2
2
  griptape_nodes/__main__.py,sha256=fJhor6_1A27abwbnceyNheONP1iXkPzjjsV5jBEfF2M,144
3
3
  griptape_nodes/api_client/__init__.py,sha256=9iyLcPbcXjxxLhhCSYQ5zgvlwxceyrNXDE8YhOIVH8g,216
4
4
  griptape_nodes/api_client/client.py,sha256=3qmTLMeVTFeyO-XlxTUUWwsEgG41R8swE64EccotaJQ,9664
5
- griptape_nodes/api_client/request_client.py,sha256=2_fi1RN8BE89SVmLl_JRAkZvNTNqc7b4rFUfW-mWYJI,9620
5
+ griptape_nodes/api_client/request_client.py,sha256=Z5lJVoG2a9hudTAQTnniaCHbBko0X1FyoakiQMimq7g,9713
6
6
  griptape_nodes/app/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
7
7
  griptape_nodes/app/__init__.py,sha256=DB-DTsgcNnbmEClXEouwzGhrmo3gHBCWXB9BkPGpdQI,90
8
8
  griptape_nodes/app/app.py,sha256=q1dRMnMxFcinyI36ehhU08buni1scBhU1zm2U6WUVDo,15333
@@ -91,7 +91,7 @@ griptape_nodes/retained_mode/events/variable_events.py,sha256=fnl_sY8GWI_R4UJQTE
91
91
  griptape_nodes/retained_mode/events/workflow_events.py,sha256=FjARlC9wwWFMqtugEkPOEf_y9eyEhfzP-MZSl4TGRBI,22530
92
92
  griptape_nodes/retained_mode/griptape_nodes.py,sha256=jB8Ufn13JbanahY3pc_43C9-DS-p4YAX_h8OvkOLgSw,18826
93
93
  griptape_nodes/retained_mode/managers/__init__.py,sha256=OTXysKusqYCQeAYwnVj4PbE3MxvAUTq9xOZT6vUE3JA,24
94
- griptape_nodes/retained_mode/managers/agent_manager.py,sha256=GeBAMGnSB7wnkA6LGwBxR7WVXOc028X6B-Y4d2Two1I,15447
94
+ griptape_nodes/retained_mode/managers/agent_manager.py,sha256=r1tFMIt9vUMFooQT5jmg1I5wBzm0Calie5dVuIXmeDY,15486
95
95
  griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=3IRIrpKR62MvTdGWfQa1ARUVxCmMUNtzUU4xMcQdlCY,1891
96
96
  griptape_nodes/retained_mode/managers/config_manager.py,sha256=WfzvFDPyboHgsCMpVGER6Ar1OHyPD_827LQx9xaUsMM,25573
97
97
  griptape_nodes/retained_mode/managers/context_manager.py,sha256=eb44_CAZhCg2iYIoodlAPpYc67tG3sHyq9dPNoiq_1s,23031
@@ -110,7 +110,7 @@ griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/packa
110
110
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py,sha256=XgG7whE74zWDxX1pOvhASW0pwjOei1EDLvIH19xdzT0,6117
111
111
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py,sha256=cCGr-MQ1RlVBiUTZepYEKdVhPgC4ebcYrmpv8rI3VeM,894
112
112
  griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py,sha256=K3UEBzAdCY9wphyBbLxDYP0Q43aYvhLZ_Pz7_SzcPec,443
113
- griptape_nodes/retained_mode/managers/library_manager.py,sha256=SmAQWPBllzl4sb0YGs8wkIM6OpezKbDRKR8eAgiKyZo,100540
113
+ griptape_nodes/retained_mode/managers/library_manager.py,sha256=CO4mZEPgYQPGRbqJz8R5NYYp1RgLCb38q14bssdyb14,100111
114
114
  griptape_nodes/retained_mode/managers/mcp_manager.py,sha256=BxNVDYUAn5-iylGzURqVZq1DRintrIK5T6q2X_rxm_U,15596
115
115
  griptape_nodes/retained_mode/managers/model_manager.py,sha256=Qc_FiqIJQ_ZuL5Yb7WiHCgUngKlbbJ_dUo7E5Ten5_g,45036
116
116
  griptape_nodes/retained_mode/managers/node_manager.py,sha256=PO6m-ny3exswCqHx2LV4y56qpbBUnh6U01wT1AX24CQ,183596
@@ -139,7 +139,7 @@ griptape_nodes/retained_mode/utils/__init__.py,sha256=W5dvv8YwvVVq_8eVTgMd3Z_VB_
139
139
  griptape_nodes/retained_mode/utils/name_generator.py,sha256=IZLahtfP3XC79XApLdGoZ0IKKUkgiITpd16RK7NbyEs,2524
140
140
  griptape_nodes/retained_mode/variable_types.py,sha256=GVrSWMB3gEDAufSPOBXbNfIRhA9M43MoxpqLyuIg_HE,435
141
141
  griptape_nodes/servers/__init__.py,sha256=JCmorB8tQUu_kQ8hSRhgw4VsOqsC0iZjZ-mCXYy9ZOQ,60
142
- griptape_nodes/servers/mcp.py,sha256=du0xBErKpAMS2sbe8HBTAHUhii4BmBGK-7-pbLOs--U,5452
142
+ griptape_nodes/servers/mcp.py,sha256=pCtBFfPKZuhU2tWguorOnmV33fYmF7NN-c9gu4MQFEk,5453
143
143
  griptape_nodes/servers/static.py,sha256=j-RiY10i8OhQRYi22eeq5rZ7I2An-DzIPA96rF5Tm4o,6975
144
144
  griptape_nodes/traits/__init__.py,sha256=bTLXTiZTJz2z15RRLoPI4nvLnNW9FiLcKL_2pT4E10g,32
145
145
  griptape_nodes/traits/add_param_button.py,sha256=27RZDVLMD0HmRF6hjfz7iV7LBau92vMc_d2eD2Ey8fA,649
@@ -172,7 +172,7 @@ griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_re
172
172
  griptape_nodes/version_compatibility/workflow_versions/__init__.py,sha256=z5XDgkizoNByCXpyo34hfsJKFsWlOHbD6hgzfYH9ubc,52
173
173
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py,sha256=IzPPmGK86h2swfGGTOHyVcBIlOng6SjgWQzlbf3ngmo,51
174
174
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py,sha256=Y8n1wzI5a-ZCHK5eiwtnnD3zF5lN-52R67rxYn0hxyI,2069
175
- griptape_nodes-0.59.1.dist-info/WHEEL,sha256=ELhySV62sOro8I5wRaLaF3TWxhBpkcDkdZUdAYLy_Hk,78
176
- griptape_nodes-0.59.1.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
177
- griptape_nodes-0.59.1.dist-info/METADATA,sha256=6Reu9-n6BxhmhAgOcpyY2sotMECJmzqFKdll5NuzSd0,5108
178
- griptape_nodes-0.59.1.dist-info/RECORD,,
175
+ griptape_nodes-0.59.3.dist-info/WHEEL,sha256=ELhySV62sOro8I5wRaLaF3TWxhBpkcDkdZUdAYLy_Hk,78
176
+ griptape_nodes-0.59.3.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
177
+ griptape_nodes-0.59.3.dist-info/METADATA,sha256=264LN9kJJRslObEYiVjsdTysFJtVHTwKwxoFDb_bdf0,5108
178
+ griptape_nodes-0.59.3.dist-info/RECORD,,