sapiopycommons 2025.6.19a564__py3-none-any.whl → 2026.1.22a847__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 (63) hide show
  1. sapiopycommons/ai/__init__.py +0 -0
  2. sapiopycommons/ai/agent_service_base.py +2051 -0
  3. sapiopycommons/ai/converter_service_base.py +163 -0
  4. sapiopycommons/ai/external_credentials.py +131 -0
  5. sapiopycommons/ai/protoapi/agent/agent_pb2.py +87 -0
  6. sapiopycommons/ai/protoapi/agent/agent_pb2.pyi +282 -0
  7. sapiopycommons/ai/protoapi/agent/agent_pb2_grpc.py +154 -0
  8. sapiopycommons/ai/protoapi/agent/entry_pb2.py +49 -0
  9. sapiopycommons/ai/protoapi/agent/entry_pb2.pyi +40 -0
  10. sapiopycommons/ai/protoapi/agent/entry_pb2_grpc.py +24 -0
  11. sapiopycommons/ai/protoapi/agent/item/item_container_pb2.py +61 -0
  12. sapiopycommons/ai/protoapi/agent/item/item_container_pb2.pyi +181 -0
  13. sapiopycommons/ai/protoapi/agent/item/item_container_pb2_grpc.py +24 -0
  14. sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2.py +41 -0
  15. sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2.pyi +36 -0
  16. sapiopycommons/ai/protoapi/externalcredentials/external_credentials_pb2_grpc.py +24 -0
  17. sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2.py +51 -0
  18. sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2.pyi +59 -0
  19. sapiopycommons/ai/protoapi/fielddefinitions/fields_pb2_grpc.py +24 -0
  20. sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2.py +123 -0
  21. sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2.pyi +599 -0
  22. sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def_pb2_grpc.py +24 -0
  23. sapiopycommons/ai/protoapi/pipeline/converter/converter_pb2.py +59 -0
  24. sapiopycommons/ai/protoapi/pipeline/converter/converter_pb2.pyi +68 -0
  25. sapiopycommons/ai/protoapi/pipeline/converter/converter_pb2_grpc.py +149 -0
  26. sapiopycommons/ai/protoapi/pipeline/script/script_pb2.py +69 -0
  27. sapiopycommons/ai/protoapi/pipeline/script/script_pb2.pyi +109 -0
  28. sapiopycommons/ai/protoapi/pipeline/script/script_pb2_grpc.py +153 -0
  29. sapiopycommons/ai/protoapi/pipeline/step_output_pb2.py +49 -0
  30. sapiopycommons/ai/protoapi/pipeline/step_output_pb2.pyi +56 -0
  31. sapiopycommons/ai/protoapi/pipeline/step_output_pb2_grpc.py +24 -0
  32. sapiopycommons/ai/protoapi/pipeline/step_pb2.py +43 -0
  33. sapiopycommons/ai/protoapi/pipeline/step_pb2.pyi +44 -0
  34. sapiopycommons/ai/protoapi/pipeline/step_pb2_grpc.py +24 -0
  35. sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2.py +39 -0
  36. sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2.pyi +33 -0
  37. sapiopycommons/ai/protoapi/session/sapio_conn_info_pb2_grpc.py +24 -0
  38. sapiopycommons/ai/protobuf_utils.py +583 -0
  39. sapiopycommons/ai/request_validation.py +561 -0
  40. sapiopycommons/ai/server.py +152 -0
  41. sapiopycommons/ai/test_client.py +534 -0
  42. sapiopycommons/callbacks/callback_util.py +53 -24
  43. sapiopycommons/eln/experiment_handler.py +12 -5
  44. sapiopycommons/files/assay_plate_reader.py +93 -0
  45. sapiopycommons/files/file_text_converter.py +207 -0
  46. sapiopycommons/files/file_util.py +128 -1
  47. sapiopycommons/files/temp_files.py +82 -0
  48. sapiopycommons/flowcyto/flow_cyto.py +2 -24
  49. sapiopycommons/general/accession_service.py +2 -28
  50. sapiopycommons/general/aliases.py +4 -1
  51. sapiopycommons/general/macros.py +172 -0
  52. sapiopycommons/general/time_util.py +199 -4
  53. sapiopycommons/multimodal/multimodal.py +2 -24
  54. sapiopycommons/recordmodel/record_handler.py +200 -111
  55. sapiopycommons/rules/eln_rule_handler.py +3 -0
  56. sapiopycommons/rules/on_save_rule_handler.py +3 -0
  57. sapiopycommons/webhook/webhook_handlers.py +6 -4
  58. sapiopycommons/webhook/webservice_handlers.py +1 -1
  59. {sapiopycommons-2025.6.19a564.dist-info → sapiopycommons-2026.1.22a847.dist-info}/METADATA +2 -2
  60. sapiopycommons-2026.1.22a847.dist-info/RECORD +113 -0
  61. sapiopycommons-2025.6.19a564.dist-info/RECORD +0 -68
  62. {sapiopycommons-2025.6.19a564.dist-info → sapiopycommons-2026.1.22a847.dist-info}/WHEEL +0 -0
  63. {sapiopycommons-2025.6.19a564.dist-info → sapiopycommons-2026.1.22a847.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,163 @@
1
+ from __future__ import annotations
2
+
3
+ import traceback
4
+ from abc import ABC, abstractmethod
5
+
6
+ from grpc import ServicerContext
7
+
8
+ from sapiopycommons.ai.protoapi.agent.item.item_container_pb2 import ContentTypePbo, StepItemContainerPbo
9
+ from sapiopycommons.ai.protoapi.pipeline.converter.converter_pb2 import ConverterDetailsResponsePbo, ConvertResponsePbo, \
10
+ ConvertRequestPbo, ConverterDetailsRequestPbo, ContentTypePairPbo
11
+ from sapiopycommons.ai.protoapi.pipeline.converter.converter_pb2_grpc import ConverterServiceServicer
12
+ from sapiopycommons.files.temp_files import TempFileHandler
13
+
14
+
15
+ class ConverterServiceBase(ConverterServiceServicer, ABC):
16
+ debug_mode: bool = False
17
+
18
+ def GetConverterDetails(self, request: ConverterDetailsRequestPbo, context: ServicerContext) \
19
+ -> ConverterDetailsResponsePbo:
20
+ try:
21
+ supported_types: list[ContentTypePairPbo] = []
22
+ for c in self.register_converters():
23
+ converter = c(self.debug_mode)
24
+ supported_types.append(ContentTypePairPbo(
25
+ converter_name=converter.name(),
26
+ input_content_type=converter.input_type_pbo(),
27
+ output_content_type=converter.output_type_pbo()
28
+ ))
29
+ return ConverterDetailsResponsePbo(supported_types=supported_types, service_name=self.name())
30
+ except Exception as e:
31
+ print(f"CRITICAL ERROR: {e}")
32
+ print(traceback.format_exc())
33
+ return ConverterDetailsResponsePbo()
34
+
35
+ def ConvertContent(self, request: ConvertRequestPbo, context: ServicerContext) -> ConvertResponsePbo:
36
+ try:
37
+ input_container: StepItemContainerPbo = request.item_container
38
+ input_type: ContentTypePbo = input_container.content_type
39
+ target_type: ContentTypePbo = request.target_content_type
40
+
41
+ use_converter: ConverterBase | None = None
42
+ for c in self.register_converters():
43
+ converter = c(self.debug_mode)
44
+ if converter.can_convert(input_type, target_type):
45
+ use_converter = converter
46
+ break
47
+ if use_converter is None:
48
+ raise ValueError(f"No converter found for converting {input_type.name} ({', '.join(input_type.extensions)}) "
49
+ f"to {target_type.name} ({', '.join(target_type.extensions)}).")
50
+
51
+ return ConvertResponsePbo(item_container=self.run(use_converter, input_container))
52
+ except Exception as e:
53
+ print(f"CRITICAL ERROR: {e}")
54
+ print(traceback.format_exc())
55
+ return ConvertResponsePbo()
56
+
57
+ @staticmethod
58
+ @abstractmethod
59
+ def name() -> str:
60
+ """
61
+ :return: The name of this converter service.
62
+ """
63
+ pass
64
+
65
+ @abstractmethod
66
+ def register_converters(self) -> list[type[ConverterBase]]:
67
+ """
68
+ Register converter types with this service. Provided converters should implement the ConverterBase class.
69
+
70
+ :return: A list of converters to register to this service.
71
+ """
72
+ pass
73
+
74
+ def run(self, converter: ConverterBase, input_container: StepItemContainerPbo) -> StepItemContainerPbo:
75
+ try:
76
+ return converter.convert(input_container)
77
+ finally:
78
+ # Clean up any temporary files created by the converter. If in debug mode, then log the files instead
79
+ # so that they can be manually inspected.
80
+ if self.debug_mode:
81
+ print("Temporary files/directories created during converter execution:")
82
+ for directory in converter.temp_data.directories:
83
+ print(f"\tDirectory: {directory}")
84
+ for file in converter.temp_data.files:
85
+ print(f"\tFile: {file}")
86
+ else:
87
+ converter.temp_data.cleanup()
88
+
89
+
90
+ class ConverterBase(ABC):
91
+ temp_data: TempFileHandler
92
+ debug_mode: bool
93
+
94
+ def __init__(self, debug_mode: bool):
95
+ self.temp_data = TempFileHandler()
96
+ self.debug_mode = debug_mode
97
+
98
+ def name(self) -> str:
99
+ """
100
+ :return: The name of this converter, typically in the format "<input_type> to <output_type>".
101
+ """
102
+ return self.input_type() + " to " + self.output_type()
103
+
104
+ def input_type_pbo(self) -> ContentTypePbo:
105
+ """
106
+ :return: The input content type this converter accepts as a ContentTypePbo.
107
+ """
108
+ return ContentTypePbo(name=self.input_type(), extensions=self.input_file_extensions())
109
+
110
+ def output_type_pbo(self) -> ContentTypePbo:
111
+ """
112
+ :return: The output content type this converter produces as a ContentTypePbo.
113
+ """
114
+ return ContentTypePbo(name=self.output_type(), extensions=self.output_file_extensions())
115
+
116
+ @abstractmethod
117
+ def input_type(self) -> str:
118
+ """
119
+ :return: The input content type this converter accepts.
120
+ """
121
+ pass
122
+
123
+ @abstractmethod
124
+ def input_file_extensions(self) -> list[str]:
125
+ """
126
+ :return: A list of file extensions this converter accepts as input.
127
+ """
128
+ pass
129
+
130
+ @abstractmethod
131
+ def output_type(self) -> str:
132
+ """
133
+ :return: The output content type this converter produces.
134
+ """
135
+ pass
136
+
137
+ @abstractmethod
138
+ def output_file_extensions(self) -> list[str]:
139
+ """
140
+ :return: A list of file extensions this converter produces as output.
141
+ """
142
+ pass
143
+
144
+ def can_convert(self, input_type: ContentTypePbo, target_type: ContentTypePbo) -> bool:
145
+ """
146
+ Check if this converter can convert from the input type to the target type.
147
+
148
+ :param input_type: The input content type.
149
+ :param target_type: The target content type.
150
+ :return: True if this converter can convert from the input type to the target type, False otherwise.
151
+ """
152
+ return (self.input_type().lower() == input_type.name.lower()
153
+ and self.output_type().lower() == target_type.name.lower())
154
+
155
+ @abstractmethod
156
+ def convert(self, content: StepItemContainerPbo) -> StepItemContainerPbo:
157
+ """
158
+ Convert the provided content from the input type to the output type.
159
+
160
+ :param content: The content to convert.
161
+ :return: The converted content.
162
+ """
163
+ pass
@@ -0,0 +1,131 @@
1
+ from __future__ import annotations
2
+
3
+ from sapiopycommons.ai.protoapi.externalcredentials.external_credentials_pb2 import ExternalCredentialsPbo
4
+
5
+
6
+ class ExternalCredentials:
7
+ """
8
+ A class representing external credentials.
9
+ """
10
+ _identifier: str
11
+ _display_name: str
12
+ _description: str
13
+ _category: str
14
+ _url: str
15
+ _username: str
16
+ _password: str
17
+ _token: str
18
+ _custom_fields: dict[str, str]
19
+
20
+ def __init__(self, identifier: str, display_name: str, url: str = "", category: str = "", description: str = "",
21
+ username: str = "", password: str = "", token: str = "", custom_fields: dict[str, str] | None = None):
22
+ """
23
+ :param identifier: The unique identifier for the credentials.
24
+ :param display_name: The display name for the credentials.
25
+ :param url: The URL that the credentials are for.
26
+ :param category: The category of the credentials. This can be used to search for the credentials using the
27
+ AgentBase.get_credentials function.
28
+ :param description: A description of the credentials.
29
+ :param username: The username for the credentials.
30
+ :param password: The password for the credentials.
31
+ :param token: The token for the credentials.
32
+ :param custom_fields: A dictionary of custom fields associated with the credentials.
33
+ """
34
+ self._identifier = identifier
35
+ self._display_name = display_name
36
+ self._description = description
37
+ self._category = category
38
+ self._url = url
39
+ self._username = username
40
+ self._password = password
41
+ self._token = token
42
+ self._custom_fields = custom_fields or {}
43
+
44
+ def __str__(self) -> str:
45
+ return f"{self._display_name} ({self._identifier})"
46
+
47
+ @staticmethod
48
+ def from_pbo(pbo: ExternalCredentialsPbo) -> ExternalCredentials:
49
+ """
50
+ Create an ExternalCredentials instance from a protobuf object.
51
+
52
+ :param pbo: An ExternalCredentialsPbo object.
53
+ :return: An ExternalCredentials instance.
54
+ """
55
+ creds = ExternalCredentials(pbo.id, pbo.display_name)
56
+ creds._url = pbo.url
57
+ creds._category = pbo.category
58
+ creds._description = pbo.description
59
+ creds._username = pbo.username
60
+ creds._password = pbo.password
61
+ creds._token = pbo.token
62
+ creds._custom_fields = dict(pbo.custom_field)
63
+ return creds
64
+
65
+ @property
66
+ def identifier(self) -> str:
67
+ """The unique identifier for the credentials."""
68
+ return self._identifier
69
+
70
+ @property
71
+ def display_name(self) -> str:
72
+ """The display name for the credentials."""
73
+ return self._display_name
74
+
75
+ @property
76
+ def description(self) -> str:
77
+ """A description of the credentials."""
78
+ return self._description
79
+
80
+ @property
81
+ def category(self) -> str:
82
+ """The category of the credentials."""
83
+ return self._category
84
+
85
+ @property
86
+ def url(self) -> str:
87
+ """The URL that the credentials are for."""
88
+ return self._url
89
+
90
+ @property
91
+ def username(self) -> str:
92
+ """The username for the credentials."""
93
+ return self._username
94
+
95
+ @property
96
+ def password(self) -> str:
97
+ """The password for the credentials."""
98
+ return self._password
99
+
100
+ @property
101
+ def token(self) -> str:
102
+ """The token for the credentials."""
103
+ return self._token
104
+
105
+ def get_custom_field(self, key: str, default: str = None) -> str | None:
106
+ """
107
+ Get a custom field by key.
108
+
109
+ :param key: The key of the custom field to retrieve.
110
+ :param default: The value to return if the key does not exist.
111
+ :return: The value of the custom field, or None if the key does not exist.
112
+ """
113
+ return self._custom_fields.get(key, default)
114
+
115
+ def to_pbo(self) -> ExternalCredentialsPbo:
116
+ """
117
+ Convert the ExternalCredentials instance to a protobuf object.
118
+
119
+ :return: An ExternalCredentialsPbo object.
120
+ """
121
+ return ExternalCredentialsPbo(
122
+ id=self._identifier,
123
+ display_name=self._display_name,
124
+ description=self._description,
125
+ category=self._category,
126
+ url=self._url,
127
+ username=self._username,
128
+ password=self._password,
129
+ token=self._token,
130
+ custom_field=self._custom_fields
131
+ )
@@ -0,0 +1,87 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: sapiopycommons/ai/protoapi/agent/agent.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'sapiopycommons/ai/protoapi/agent/agent.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from sapiopycommons.ai.protoapi.externalcredentials import external_credentials_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_externalcredentials_dot_external__credentials__pb2
26
+ from sapiopycommons.ai.protoapi.fielddefinitions import fields_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_fields__pb2
27
+ from sapiopycommons.ai.protoapi.fielddefinitions import velox_field_def_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_velox__field__def__pb2
28
+ from sapiopycommons.ai.protoapi.agent import entry_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2
29
+ try:
30
+ sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_item_dot_item__container__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_item_dot_item__container__pb2
31
+ except AttributeError:
32
+ sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_item_dot_item__container__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons.ai.protoapi.agent.item.item_container_pb2
33
+ try:
34
+ sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_velox__field__def__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_velox__field__def__pb2
35
+ except AttributeError:
36
+ sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_velox__field__def__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons.ai.protoapi.fielddefinitions.velox_field_def_pb2
37
+ try:
38
+ sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_fields__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_fields__pb2
39
+ except AttributeError:
40
+ sapiopycommons_dot_ai_dot_protoapi_dot_fielddefinitions_dot_fields__pb2 = sapiopycommons_dot_ai_dot_protoapi_dot_agent_dot_entry__pb2.sapiopycommons.ai.protoapi.fielddefinitions.fields_pb2
41
+ from sapiopycommons.ai.protoapi.pipeline import step_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_pipeline_dot_step__pb2
42
+ from sapiopycommons.ai.protoapi.session import sapio_conn_info_pb2 as sapiopycommons_dot_ai_dot_protoapi_dot_session_dot_sapio__conn__info__pb2
43
+
44
+ from sapiopycommons.ai.protoapi.externalcredentials.external_credentials_pb2 import *
45
+ from sapiopycommons.ai.protoapi.fielddefinitions.fields_pb2 import *
46
+ from sapiopycommons.ai.protoapi.fielddefinitions.velox_field_def_pb2 import *
47
+ from sapiopycommons.ai.protoapi.agent.entry_pb2 import *
48
+ from sapiopycommons.ai.protoapi.pipeline.step_pb2 import *
49
+ from sapiopycommons.ai.protoapi.session.sapio_conn_info_pb2 import *
50
+
51
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,sapiopycommons/ai/protoapi/agent/agent.proto\x1aIsapiopycommons/ai/protoapi/externalcredentials/external_credentials.proto\x1a\x38sapiopycommons/ai/protoapi/fielddefinitions/fields.proto\x1a\x41sapiopycommons/ai/protoapi/fielddefinitions/velox_field_def.proto\x1a,sapiopycommons/ai/protoapi/agent/entry.proto\x1a.sapiopycommons/ai/protoapi/pipeline/step.proto\x1a\x38sapiopycommons/ai/protoapi/session/sapio_conn_info.proto\"R\n\x13\x45xampleContainerPbo\x12\x16\n\x0ctext_example\x18\x01 \x01(\tH\x00\x12\x18\n\x0e\x62inary_example\x18\x02 \x01(\x0cH\x00\x42\t\n\x07\x65xample\"\xaf\x02\n\x14\x41gentIoConfigBasePbo\x12\x14\n\x0c\x63ontent_type\x18\x01 \x01(\t\x12\x11\n\tio_number\x18\x02 \x01(\x05\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x1e\n\x16\x64\x65precated_old_example\x18\x05 \x01(\t\x12/\n\x11structure_example\x18\x06 \x01(\x0b\x32\x14.ExampleContainerPbo\x12-\n\x0ftesting_example\x18\x07 \x01(\x0b\x32\x14.ExampleContainerPbo\x12\x16\n\x0e\x64\x61ta_type_name\x18\x08 \x01(\t\x12+\n\x10\x64\x61ta_type_fields\x18\t \x03(\x0b\x32\x11.VeloxFieldDefPbo\"\xdb\x02\n\x14\x41gentInputDetailsPbo\x12*\n\x0b\x62\x61se_config\x18\x01 \x01(\x0b\x32\x15.AgentIoConfigBasePbo\x12\x12\n\nvalidation\x18\x02 \x01(\t\x12\x1c\n\x0fmin_input_count\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x1c\n\x0fmax_input_count\x18\x04 \x01(\x05H\x01\x88\x01\x01\x12\r\n\x05paged\x18\x05 \x01(\x08\x12\x1a\n\rmin_page_size\x18\x06 \x01(\x05H\x02\x88\x01\x01\x12\x1a\n\rmax_page_size\x18\x07 \x01(\x05H\x03\x88\x01\x01\x12\x1e\n\x11max_request_bytes\x18\x08 \x01(\x05H\x04\x88\x01\x01\x42\x12\n\x10_min_input_countB\x12\n\x10_max_input_countB\x10\n\x0e_min_page_sizeB\x10\n\x0e_max_page_sizeB\x14\n\x12_max_request_bytes\"C\n\x15\x41gentOutputDetailsPbo\x12*\n\x0b\x62\x61se_config\x18\x01 \x01(\x0b\x32\x15.AgentIoConfigBasePbo\"\xbf\x04\n\x15ProcessStepRequestPbo\x12+\n\nsapio_user\x18\x01 \x01(\x0b\x32\x17.SapioConnectionInfoPbo\x12\x12\n\nagent_name\x18\x02 \x01(\t\x12\x13\n\x0bpipeline_id\x18\x03 \x01(\x03\x12\x18\n\x10pipeline_step_id\x18\x04 \x01(\x03\x12\x15\n\rinvocation_id\x18\x05 \x01(\x03\x12%\n\rinput_configs\x18\x06 \x03(\x0b\x32\x0e.StepIoInfoPbo\x12&\n\x0eoutput_configs\x18\x07 \x03(\x0b\x32\x0e.StepIoInfoPbo\x12J\n\x13\x63onfig_field_values\x18\x08 \x03(\x0b\x32-.ProcessStepRequestPbo.ConfigFieldValuesEntry\x12\x0f\n\x07\x64ry_run\x18\t \x01(\x08\x12\x17\n\x0fverbose_logging\x18\n \x01(\x08\x12\x34\n\x13\x65xternal_credential\x18\x0b \x03(\x0b\x32\x17.ExternalCredentialsPbo\x12\x1d\n\x15output_data_type_name\x18\x0c \x01(\t\x12\x17\n\x0f\x61gent_import_id\x18\r \x01(\t\x12\"\n\x05input\x18\xff\x0f \x03(\x0b\x32\x12.StepInputBatchPbo\x1aH\n\x16\x43onfigFieldValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.FieldValuePbo:\x02\x38\x01\"\xd2\x01\n\x16ProcessStepResponsePbo\x12-\n\x06status\x18\x01 \x01(\x0e\x32\x1d.ProcessStepResponseStatusPbo\x12\x16\n\x0estatus_message\x18\x02 \x01(\t\x12\x14\n\x0cstep_summary\x18\x03 \x01(\t\x12\'\n\x0bnew_records\x18\xfd\x0f \x03(\x0b\x32\x11.FieldValueMapPbo\x12\x0c\n\x03log\x18\xfe\x0f \x03(\t\x12$\n\x06output\x18\xff\x0f \x03(\x0b\x32\x13.StepOutputBatchPbo\"J\n\x16\x41gentDetailsRequestPbo\x12\x30\n\x0fsapio_conn_info\x18\x01 \x01(\x0b\x32\x17.SapioConnectionInfoPbo\"\xfc\x03\n\x0f\x41gentDetailsPbo\x12\x11\n\timport_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x1d\n\x15output_data_type_name\x18\x04 \x01(\t\x12,\n\rinput_configs\x18\x05 \x03(\x0b\x32\x15.AgentInputDetailsPbo\x12.\n\x0eoutput_configs\x18\x06 \x03(\x0b\x32\x16.AgentOutputDetailsPbo\x12(\n\rconfig_fields\x18\x07 \x03(\x0b\x32\x11.VeloxFieldDefPbo\x12\x14\n\x0clicense_info\x18\x08 \x01(\t\x12\x10\n\x08\x63\x61tegory\x18\t \x01(\t\x12#\n\x08\x63itation\x18\x0b \x03(\x0b\x32\x11.AgentCitationPbo\x12&\n\x1ereview_on_instance_field_names\x18\x0c \x03(\t\x12%\n\x1doutput_data_type_display_name\x18\r \x01(\t\x12-\n\x12output_type_fields\x18\x0e \x03(\x0b\x32\x11.VeloxFieldDefPbo\x12\x14\n\x0csub_category\x18\x0f \x01(\t\x12\x0c\n\x04icon\x18\x10 \x01(\x0c\x12\x1d\n\x15output_data_type_icon\x18\x11 \x01(\x0c\".\n\x10\x41gentCitationPbo\x12\r\n\x05title\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\"c\n\x17\x41gentDetailsResponsePbo\x12\x1f\n\x17\x61gent_framework_version\x18\x01 \x01(\x05\x12\'\n\ragent_details\x18\x02 \x03(\x0b\x32\x10.AgentDetailsPbo*E\n\x1cProcessStepResponseStatusPbo\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0b\n\x07\x46\x41ILURE\x10\x02\x32\x94\x01\n\x0c\x41gentService\x12\x44\n\x0fGetAgentDetails\x12\x17.AgentDetailsRequestPbo\x1a\x18.AgentDetailsResponsePbo\x12>\n\x0bProcessData\x12\x16.ProcessStepRequestPbo\x1a\x17.ProcessStepResponsePboB\x1c\n\x18\x63om.velox.protoapi.agentP\x01P\x00P\x01P\x02P\x03P\x04P\x05\x62\x06proto3')
52
+
53
+ _globals = globals()
54
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
55
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapiopycommons.ai.protoapi.agent.agent_pb2', _globals)
56
+ if not _descriptor._USE_C_DESCRIPTORS:
57
+ _globals['DESCRIPTOR']._loaded_options = None
58
+ _globals['DESCRIPTOR']._serialized_options = b'\n\030com.velox.protoapi.agentP\001'
59
+ _globals['_PROCESSSTEPREQUESTPBO_CONFIGFIELDVALUESENTRY']._loaded_options = None
60
+ _globals['_PROCESSSTEPREQUESTPBO_CONFIGFIELDVALUESENTRY']._serialized_options = b'8\001'
61
+ _globals['_PROCESSSTEPRESPONSESTATUSPBO']._serialized_start=2736
62
+ _globals['_PROCESSSTEPRESPONSESTATUSPBO']._serialized_end=2805
63
+ _globals['_EXAMPLECONTAINERPBO']._serialized_start=400
64
+ _globals['_EXAMPLECONTAINERPBO']._serialized_end=482
65
+ _globals['_AGENTIOCONFIGBASEPBO']._serialized_start=485
66
+ _globals['_AGENTIOCONFIGBASEPBO']._serialized_end=788
67
+ _globals['_AGENTINPUTDETAILSPBO']._serialized_start=791
68
+ _globals['_AGENTINPUTDETAILSPBO']._serialized_end=1138
69
+ _globals['_AGENTOUTPUTDETAILSPBO']._serialized_start=1140
70
+ _globals['_AGENTOUTPUTDETAILSPBO']._serialized_end=1207
71
+ _globals['_PROCESSSTEPREQUESTPBO']._serialized_start=1210
72
+ _globals['_PROCESSSTEPREQUESTPBO']._serialized_end=1785
73
+ _globals['_PROCESSSTEPREQUESTPBO_CONFIGFIELDVALUESENTRY']._serialized_start=1713
74
+ _globals['_PROCESSSTEPREQUESTPBO_CONFIGFIELDVALUESENTRY']._serialized_end=1785
75
+ _globals['_PROCESSSTEPRESPONSEPBO']._serialized_start=1788
76
+ _globals['_PROCESSSTEPRESPONSEPBO']._serialized_end=1998
77
+ _globals['_AGENTDETAILSREQUESTPBO']._serialized_start=2000
78
+ _globals['_AGENTDETAILSREQUESTPBO']._serialized_end=2074
79
+ _globals['_AGENTDETAILSPBO']._serialized_start=2077
80
+ _globals['_AGENTDETAILSPBO']._serialized_end=2585
81
+ _globals['_AGENTCITATIONPBO']._serialized_start=2587
82
+ _globals['_AGENTCITATIONPBO']._serialized_end=2633
83
+ _globals['_AGENTDETAILSRESPONSEPBO']._serialized_start=2635
84
+ _globals['_AGENTDETAILSRESPONSEPBO']._serialized_end=2734
85
+ _globals['_AGENTSERVICE']._serialized_start=2808
86
+ _globals['_AGENTSERVICE']._serialized_end=2956
87
+ # @@protoc_insertion_point(module_scope)