sapiopycommons 2025.4.24a492__py3-none-any.whl → 2025.4.24a494__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.

Potentially problematic release.


This version of sapiopycommons might be problematic. Click here for more details.

@@ -31,7 +31,7 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.fielddefinitions.proto.velox_field_def_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\nsapiopycommons.ai.api.fielddefinitions.protoP\001'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n$com.velox.api.fielddefinitions.protoP\001'
35
35
  _globals['_SELECTIONPROPERTIES_COLORMAPPINGENTRY']._loaded_options = None
36
36
  _globals['_SELECTIONPROPERTIES_COLORMAPPINGENTRY']._serialized_options = b'8\001'
37
37
  _globals['_SELECTIONPROPERTIES_PROCESSDETAILMAPENTRY']._loaded_options = None
@@ -31,7 +31,7 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.plan.proto.step_output_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\n\030sapiopycommons.ai.api.plan.protoP\001'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\030com.velox.api.plan.protoP\001'
35
35
  _globals['_STEPJSONOUTPUTENTRY']._serialized_start=54
36
36
  _globals['_STEPJSONOUTPUTENTRY']._serialized_end=90
37
37
  _globals['_STEPTEXTOUTPUTENTRY']._serialized_start=92
@@ -31,7 +31,7 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.plan.proto.step_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\n\030sapiopycommons.ai.api.plan.protoP\001'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\030com.velox.api.plan.protoP\001'
35
35
  _globals['_STEPIOINFO']._serialized_start=47
36
36
  _globals['_STEPIOINFO']._serialized_end=122
37
37
  _globals['_STEPIODETAILS']._serialized_start=124
@@ -37,7 +37,7 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
37
37
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.plan.script.proto.script_pb2', _globals)
38
38
  if not _descriptor._USE_C_DESCRIPTORS:
39
39
  _globals['DESCRIPTOR']._loaded_options = None
40
- _globals['DESCRIPTOR']._serialized_options = b'\n\037sapiopycommons.ai.api.plan.script.proto'
40
+ _globals['DESCRIPTOR']._serialized_options = b'\n\037com.velox.api.plan.script.proto'
41
41
  _globals['_JOBSTATUS']._serialized_start=799
42
42
  _globals['_JOBSTATUS']._serialized_end=863
43
43
  _globals['_CREATESCRIPTJOBREQUEST']._serialized_start=212
@@ -24,14 +24,14 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)sapiopycommons/ai/api/plan/tool/proto/entry.proto\"!\n\x10StepCsvHeaderRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\"\x1b\n\nStepCsvRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\"N\n\x0bStepCsvData\x12!\n\x06header\x18\x0e \x01(\x0b\x32\x11.StepCsvHeaderRow\x12\x1c\n\x07\x65ntries\x18\x0f \x03(\x0b\x32\x0b.StepCsvRow\"\x1f\n\x0cStepJsonData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\t\"\x1f\n\x0cStepTextData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\t\"!\n\x0eStepBinaryData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\x0c\"6\n\rStepImageData\x12\x14\n\x0cimage_format\x18\x01 \x01(\t\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\x0c\"\xf1\x01\n\rStepEntryData\x12\x1b\n\x08\x64\x61taType\x18\x01 \x01(\x0e\x32\t.DataType\x12\'\n\x0b\x62inary_data\x18\xff\x0f \x01(\x0b\x32\x0f.StepBinaryDataH\x00\x12!\n\x08\x63sv_data\x18\xfe\x0f \x01(\x0b\x32\x0c.StepCsvDataH\x00\x12#\n\tjson_data\x18\xfd\x0f \x01(\x0b\x32\r.StepJsonDataH\x00\x12#\n\ttext_data\x18\xfc\x0f \x01(\x0b\x32\r.StepTextDataH\x00\x12%\n\nimage_data\x18\xfb\x0f \x01(\x0b\x32\x0e.StepImageDataH\x00\x42\x06\n\x04\x64\x61ta\"L\n\x12StepEntryInputData\x12\x12\n\nis_partial\x18\x02 \x01(\x08\x12\"\n\nentry_data\x18\x01 \x01(\x0b\x32\x0e.StepEntryData\"9\n\x13StepEntryOutputData\x12\"\n\nentry_data\x18\x01 \x01(\x0b\x32\x0e.StepEntryData*>\n\x08\x44\x61taType\x12\n\n\x06\x42INARY\x10\x00\x12\x08\n\x04JSON\x10\x01\x12\x07\n\x03\x43SV\x10\x02\x12\x08\n\x04TEXT\x10\x03\x12\t\n\x05IMAGE\x10\x04\x42!\n\x1d\x63om.velox.api.plan.tool.protoP\x01\x62\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n1sapiopycommons/ai/api/plan/tool/proto/entry.proto\"!\n\x10StepCsvHeaderRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\"\x1b\n\nStepCsvRow\x12\r\n\x05\x63\x65lls\x18\x01 \x03(\t\"N\n\x0bStepCsvData\x12!\n\x06header\x18\x0e \x01(\x0b\x32\x11.StepCsvHeaderRow\x12\x1c\n\x07\x65ntries\x18\x0f \x03(\x0b\x32\x0b.StepCsvRow\"\x1f\n\x0cStepJsonData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\t\"\x1f\n\x0cStepTextData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\t\"!\n\x0eStepBinaryData\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\x0c\"6\n\rStepImageData\x12\x14\n\x0cimage_format\x18\x01 \x01(\t\x12\x0f\n\x07\x65ntries\x18\x0f \x03(\x0c\"\xf1\x01\n\rStepEntryData\x12\x1b\n\x08\x64\x61taType\x18\x01 \x01(\x0e\x32\t.DataType\x12\'\n\x0b\x62inary_data\x18\xff\x0f \x01(\x0b\x32\x0f.StepBinaryDataH\x00\x12!\n\x08\x63sv_data\x18\xfe\x0f \x01(\x0b\x32\x0c.StepCsvDataH\x00\x12#\n\tjson_data\x18\xfd\x0f \x01(\x0b\x32\r.StepJsonDataH\x00\x12#\n\ttext_data\x18\xfc\x0f \x01(\x0b\x32\r.StepTextDataH\x00\x12%\n\nimage_data\x18\xfb\x0f \x01(\x0b\x32\x0e.StepImageDataH\x00\x42\x06\n\x04\x64\x61ta\"L\n\x12StepEntryInputData\x12\x12\n\nis_partial\x18\x02 \x01(\x08\x12\"\n\nentry_data\x18\x01 \x01(\x0b\x32\x0e.StepEntryData\"9\n\x13StepEntryOutputData\x12\"\n\nentry_data\x18\x01 \x01(\x0b\x32\x0e.StepEntryData*>\n\x08\x44\x61taType\x12\n\n\x06\x42INARY\x10\x00\x12\x08\n\x04JSON\x10\x01\x12\x07\n\x03\x43SV\x10\x02\x12\x08\n\x04TEXT\x10\x03\x12\t\n\x05IMAGE\x10\x04\x42!\n\x1d\x63om.velox.api.plan.tool.protoP\x01\x62\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.plan.tool.proto.entry_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\n\035sapiopycommons.ai.api.plan.tool.protoP\001'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\035com.velox.api.plan.tool.protoP\001'
35
35
  _globals['_DATATYPE']._serialized_start=735
36
36
  _globals['_DATATYPE']._serialized_end=797
37
37
  _globals['_STEPCSVHEADERROW']._serialized_start=53
@@ -39,7 +39,7 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
39
39
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.plan.tool.proto.tool_pb2', _globals)
40
40
  if not _descriptor._USE_C_DESCRIPTORS:
41
41
  _globals['DESCRIPTOR']._loaded_options = None
42
- _globals['DESCRIPTOR']._serialized_options = b'\n\035sapiopycommons.ai.api.plan.tool.protoP\001'
42
+ _globals['DESCRIPTOR']._serialized_options = b'\n\035com.velox.api.plan.tool.protoP\001'
43
43
  _globals['_PROCESSSTEPREQUEST_CONFIGFIELDVALUESENTRY']._loaded_options = None
44
44
  _globals['_PROCESSSTEPREQUEST_CONFIGFIELDVALUESENTRY']._serialized_options = b'8\001'
45
45
  _globals['_STEPRECORD_FIELDSENTRY']._loaded_options = None
@@ -24,14 +24,14 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n1sapiopycommons/ai/api/session/proto/sapio_conn_info.proto\"\xb0\x01\n\x13SapioConnectionInfo\x12\x16\n\x0ewebservice_url\x18\x01 \x01(\t\x12\x10\n\x08rmi_host\x18\x02 \x03(\t\x12\x10\n\x08rmi_port\x18\x03 \x01(\x05\x12\x10\n\x08\x61pp_guid\x18\x04 \x01(\t\x12\x10\n\x08username\x18\x05 \x01(\t\x12)\n\x0bsecret_type\x18\x06 \x01(\x0e\x32\x14.SapioUserSecretType\x12\x0e\n\x06secret\x18\x07 \x01(\t*6\n\x13SapioUserSecretType\x12\x11\n\rSESSION_TOKEN\x10\x00\x12\x0c\n\x08PASSWORD\x10\x01\x42\x1f\n\x1b\x63om.velox.api.session.protoP\x01\x62\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n9sapiopycommons/ai/api/session/proto/sapio_conn_info.proto\"\xb0\x01\n\x13SapioConnectionInfo\x12\x16\n\x0ewebservice_url\x18\x01 \x01(\t\x12\x10\n\x08rmi_host\x18\x02 \x03(\t\x12\x10\n\x08rmi_port\x18\x03 \x01(\x05\x12\x10\n\x08\x61pp_guid\x18\x04 \x01(\t\x12\x10\n\x08username\x18\x05 \x01(\t\x12)\n\x0bsecret_type\x18\x06 \x01(\x0e\x32\x14.SapioUserSecretType\x12\x0e\n\x06secret\x18\x07 \x01(\t*6\n\x13SapioUserSecretType\x12\x11\n\rSESSION_TOKEN\x10\x00\x12\x0c\n\x08PASSWORD\x10\x01\x42\x1f\n\x1b\x63om.velox.api.session.protoP\x01\x62\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.api.session.proto.sapio_conn_info_pb2', _globals)
32
32
  if not _descriptor._USE_C_DESCRIPTORS:
33
33
  _globals['DESCRIPTOR']._loaded_options = None
34
- _globals['DESCRIPTOR']._serialized_options = b'\n\033sapiopycommons.ai.api.session.protoP\001'
34
+ _globals['DESCRIPTOR']._serialized_options = b'\n\033com.velox.api.session.protoP\001'
35
35
  _globals['_SAPIOUSERSECRETTYPE']._serialized_start=240
36
36
  _globals['_SAPIOUSERSECRETTYPE']._serialized_end=294
37
37
  _globals['_SAPIOCONNECTIONINFO']._serialized_start=62
@@ -6,13 +6,15 @@ from abc import abstractmethod, ABC
6
6
  from typing import Any
7
7
 
8
8
  from grpc import ServicerContext
9
+
10
+ from sapiopycommons.ai.api.fielddefinitions.proto.velox_field_def_pb2 import VeloxFieldDefProto
9
11
  from sapiopycommons.general.aliases import FieldMap
10
12
  from sapiopylib.rest.User import SapioUser
11
13
 
12
14
  from sapiopycommons.ai.api.plan.tool.proto.entry_pb2 import StepEntryOutputData, StepEntryData, StepJsonData, DataType, \
13
15
  StepImageData, StepTextData, StepCsvData, StepBinaryData, StepCsvHeaderRow, StepCsvRow
14
16
  from sapiopycommons.ai.api.plan.tool.proto.tool_pb2 import ProcessStepRequest, ToolDetailsRequest, ToolDetailsResponse, \
15
- ProcessStepResponse, ToolDetails, StepRecord, StepRecordFieldValue
17
+ ProcessStepResponse, ToolDetails, StepRecord, StepRecordFieldValue, ToolInputDetails, ToolOutputDetails
16
18
  from sapiopycommons.ai.api.plan.tool.proto.tool_pb2_grpc import ToolServiceServicer
17
19
  from sapiopycommons.ai.api.session.proto.sapio_conn_info_pb2 import SapioConnectionInfo, SapioUserSecretType
18
20
 
@@ -185,6 +187,8 @@ class ToolServiceBase(ToolServiceServicer, ABC):
185
187
 
186
188
  Subclasses must implement the get_details and run methods to provide specific functionality for the tool.
187
189
  """
190
+ tools: list[ToolBase]
191
+
188
192
  def GetToolDetails(self, request: ToolDetailsRequest, context: ServicerContext) -> ToolDetailsResponse:
189
193
  try:
190
194
  # Convert the SapioConnectionInfo proto object to a SapioUser object.
@@ -212,9 +216,12 @@ class ToolServiceBase(ToolServiceServicer, ABC):
212
216
  else:
213
217
  new_records.extend(data)
214
218
  # Return a ProcessStepResponse proto object containing the output data and new records to the caller.
219
+ # TODO: Return an is_success = true value.
220
+ # TODO: Allow logging in the tools?
215
221
  return ProcessStepResponse(entry_data=entry_data, new_records=new_records)
216
222
  except Exception as e:
217
223
  # TODO: Do something other than dump the full stack trace into the logs?
224
+ # TODO: Eventually we'll return an is_success = false value.
218
225
  return ProcessStepResponse(log=[traceback.format_exc()])
219
226
 
220
227
  @staticmethod
@@ -244,6 +251,25 @@ class ToolServiceBase(ToolServiceServicer, ABC):
244
251
  """
245
252
  return 1
246
253
 
254
+ def _get_tools(self) -> list[ToolBase]:
255
+ """
256
+ Get the tools registered with this service.
257
+ """
258
+ # If the tools have not been registered, call the register_tools method to do so.
259
+ if not hasattr(self, "tools"):
260
+ self.tools = self.register_tools()
261
+ # If the tools are still not registered, raise an exception.
262
+ if not self.tools:
263
+ raise Exception("No tools registered with this service.")
264
+ return self.tools
265
+
266
+ @abstractmethod
267
+ def register_tools(self) -> list[ToolBase]:
268
+ """
269
+ Register the tools with this service.
270
+ """
271
+ pass
272
+
247
273
  @abstractmethod
248
274
  def get_details(self, user: SapioUser, request: ToolDetailsRequest, context: ServicerContext) -> list[ToolDetails]:
249
275
  """
@@ -255,7 +281,81 @@ class ToolServiceBase(ToolServiceServicer, ABC):
255
281
  :param context: The gRPC context.
256
282
  :return: A ToolDetailsResponse object containing the tool details.
257
283
  """
258
- pass
284
+ tool_details: list[ToolDetails] = []
285
+ for tool in self._get_tools():
286
+ tool_details.append(tool.to_proto())
287
+ return tool_details
288
+
289
+ @abstractmethod
290
+ def run(self, user: SapioUser, request: ProcessStepRequest, context: ServicerContext) -> list[SapioToolResult]:
291
+ """
292
+ Execute a tool from this service.
293
+
294
+ :param user: A user object that can be used to initialize manager classes using DataMgmtServer to query the
295
+ system.
296
+ :param request: The request object containing the input data.
297
+ :param context: The gRPC context.
298
+ :return: A SapioToolResults object containing the response data.
299
+ """
300
+ for tool in self._get_tools():
301
+ if request.tool_name == tool.name:
302
+ return tool.run(user, request, context)
303
+ raise Exception(f"Tool {request.tool_name} not found in registered tools.")
304
+
305
+
306
+ class ToolBase(ABC):
307
+ name: str
308
+ description: str
309
+ data_type_name: str | None
310
+ inputs: list[ToolInputDetails]
311
+ outputs: list[ToolOutputDetails]
312
+ configs: list[VeloxFieldDefProto]
313
+
314
+ def __init__(self, name: str, description: str, data_type_name: str | None = None):
315
+ self.name = name
316
+ self.description = description
317
+ self.data_type_name = data_type_name
318
+ self.inputs = []
319
+ self.outputs = []
320
+
321
+ def add_input(self, details: ToolInputDetails) -> None:
322
+ """
323
+ Add an input configuration to the tool.
324
+
325
+ :param details: The input configuration details.
326
+ """
327
+ self.inputs.append(details)
328
+
329
+ def add_output(self, details: ToolOutputDetails) -> None:
330
+ """
331
+ Add an output configuration to the tool.
332
+
333
+ :param details: The output configuration details.
334
+ """
335
+ self.outputs.append(details)
336
+
337
+ def add_config_field(self, field: VeloxFieldDefProto) -> None:
338
+ """
339
+ Add a configuration field to the tool.
340
+
341
+ :param field: The configuration field details.
342
+ """
343
+ self.configs.append(field)
344
+
345
+ def to_proto(self) -> ToolDetails:
346
+ """
347
+ Convert this tool to a ToolDetails proto object.
348
+
349
+ :return: The ToolDetails proto object.
350
+ """
351
+ return ToolDetails(
352
+ name=self.name,
353
+ description=self.description,
354
+ input_configs=self.inputs,
355
+ output_configs=self.outputs,
356
+ output_data_type_name=self.data_type_name,
357
+ config_fields=self.configs
358
+ )
259
359
 
260
360
  @abstractmethod
261
361
  def run(self, user: SapioUser, request: ProcessStepRequest, context: ServicerContext) -> list[SapioToolResult]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.4.24a492
3
+ Version: 2025.4.24a494
4
4
  Summary: Official Sapio Python API Utilities Package
5
5
  Project-URL: Homepage, https://github.com/sapiosciences
6
6
  Author-email: Jonathan Steck <jsteck@sapiosciences.com>, Yechen Qiao <yqiao@sapiosciences.com>
@@ -1,26 +1,26 @@
1
1
  sapiopycommons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  sapiopycommons/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  sapiopycommons/ai/tool_of_tools.py,sha256=zYmQ4rNX-qYQnc-vNDnYZjtv9JgmQAmVVuHfVOdBF3w,46984
4
- sapiopycommons/ai/tool_service_base.py,sha256=YJoHWTPD10TXXmZUKZIS6ryrV3Xqzt6TWNMNFaD8aQ4,10911
5
- sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py,sha256=fg3JtRmu26SCjYDwD7Wp-ymSDjQwbV-qA8krZU_uG1o,20612
4
+ sapiopycommons/ai/tool_service_base.py,sha256=tftW0TFatccbx47QtfiKcsZaPpOHoOlEfDlrU_IQVUU,14376
5
+ sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py,sha256=qPkyQsREtTLMliV9JB6tC5-NhmdWVWHJr70XNfcAfDI,20605
6
6
  sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi,sha256=gVXRsuscx9XavKsTcepzXWf0LDAAyQ_J5ZjFK6kPYuo,34028
7
7
  sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py,sha256=4vD4jWanaJ4uclSkFmS7JIz_lwYXDWBE3DomuPjUyII,941
8
- sapiopycommons/ai/api/plan/proto/step_output_pb2.py,sha256=6W20mlNzduVun3vKgT5yfgGGy3nuTEdOoOG02IXV3J8,2551
8
+ sapiopycommons/ai/api/plan/proto/step_output_pb2.py,sha256=1L5CJIG8dVhh4f5J6VQpu66k9f7g-XE1JqOmoI7neXQ,2543
9
9
  sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi,sha256=4zIkURW-I_688qCtwRDbl53vRpoWHBpok5bAgopgSRE,1921
10
10
  sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py,sha256=vDRY_pIIshQ4UpdW-ra1F5zBmntdsW2scySkMAA-zfc,925
11
- sapiopycommons/ai/api/plan/proto/step_pb2.py,sha256=-bubghjaqV2puzaTZwaQuKslo0vVhUq5iFiA6E8DL3A,2402
11
+ sapiopycommons/ai/api/plan/proto/step_pb2.py,sha256=RWd5KY0B9WUbFwPOl3VJqOHBPiWk0TfgBeRRYF3DCyo,2394
12
12
  sapiopycommons/ai/api/plan/proto/step_pb2.pyi,sha256=LNR5iHcop9_0dwFgpHSfeuxwK0esmm1dx6fFY17SxQg,2032
13
13
  sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py,sha256=DgiBYFvTNiDG_2a9Tpt5iel2fRUfePZWP41fZTC-KWk,918
14
- sapiopycommons/ai/api/plan/script/proto/script_pb2.py,sha256=G0vU3oc0m1T6jxcTHSUct_TQEZPK0sSPp4GWI31-25Y,4179
14
+ sapiopycommons/ai/api/plan/script/proto/script_pb2.py,sha256=9pJVG2jADlpX3qAMMgR3q-HQ-AhUurco2j4etFy0EdI,4171
15
15
  sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi,sha256=MBrry29hBGKoo2ax-jDFUNHz9oI4X6rGRUEEKi-Cds4,5906
16
16
  sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py,sha256=HHkEcG6gcvif_olb1b8GPAXq-HAjxKzYcYr6-jvfV4E,6895
17
- sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py,sha256=IH5YE-4JR6NsoPjUr_JO_cR7sHylHeVgZ4jE3OHIc1s,3891
17
+ sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py,sha256=9tkz1z0uYSOLhxV5cpHfgSwH4gbYOYLoUzI3xy3zyII,3883
18
18
  sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi,sha256=Zc1LyJQmj_Qkha1Wnua2Fx4vs6FEScaSX-xDb1Xi-rw,4287
19
19
  sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py,sha256=YKkX2kexERUx4asLCShufSnZhgf339Zk8Xw1FAgLfHQ,924
20
- sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py,sha256=07-F8dMD7LawF8FURdGO5jjs9lJV53aMCSXtuKadIEg,7375
20
+ sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py,sha256=wvm5A3sx9IrBjEPD8YV-FNwjY9QcvX86X8jAQ18DdHQ,7367
21
21
  sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi,sha256=Z9XxKHPuaa-8m0enxs_PQnA6-BBDzVRAazO_zIWMknc,16592
22
22
  sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py,sha256=NZZLC8DbHJAm87Bs_ftqGtqtoyNteRX993yiv1Kn6Xc,6946
23
- sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py,sha256=hhH_F43g23e_es_Om3tGUqUBSWJmBF91Q-1bgYtWrl8,2087
23
+ sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py,sha256=3Pv6QuGZNrcGAKLPoSizu7Z59KjLOz6dsNj9wgXnlDE,2079
24
24
  sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi,sha256=9uHCNMVriDd72lsrWWH2irUB_5VG0mYyL_vhZWdOkns,1597
25
25
  sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py,sha256=2W0YzT4SfnGTLq98AdvkyNM0n75Tkl8DervPS1ryGao,932
26
26
  sapiopycommons/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -82,7 +82,7 @@ sapiopycommons/webhook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
82
82
  sapiopycommons/webhook/webhook_context.py,sha256=D793uLsb1691SalaPnBUk3rOSxn_hYLhdvkaIxjNXss,1909
83
83
  sapiopycommons/webhook/webhook_handlers.py,sha256=L0HetSm43NvA5KyW3xbLpGFh2DbAaeZJVtXIEl2fvV8,39689
84
84
  sapiopycommons/webhook/webservice_handlers.py,sha256=Y5dHx_UFWFuSqaoPL6Re-fsKYRuxvCWZ8bj6KSZ3jfM,14285
85
- sapiopycommons-2025.4.24a492.dist-info/METADATA,sha256=L46DrTSW3oyIWr95FnNOxyBsQOXn4iGGJwjaiuWgXd4,3143
86
- sapiopycommons-2025.4.24a492.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
87
- sapiopycommons-2025.4.24a492.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
- sapiopycommons-2025.4.24a492.dist-info/RECORD,,
85
+ sapiopycommons-2025.4.24a494.dist-info/METADATA,sha256=sLGtVufAGHGHXHpjTPI4TYwjcG1ya14ACJRNVWkLPHw,3143
86
+ sapiopycommons-2025.4.24a494.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
87
+ sapiopycommons-2025.4.24a494.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
88
+ sapiopycommons-2025.4.24a494.dist-info/RECORD,,