algolia 3.40.0 → 3.41.0

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/Bug_report.yml +1 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile.lock +4 -4
  5. data/lib/algolia/api/agent_studio_client.rb +2364 -0
  6. data/lib/algolia/models/agent-studio/advanced_syntax_features.rb +34 -0
  7. data/lib/algolia/models/agent-studio/agent_completion_algolia_params.rb +221 -0
  8. data/lib/algolia/models/agent-studio/agent_completion_request.rb +247 -0
  9. data/lib/algolia/models/agent-studio/agent_config_create.rb +288 -0
  10. data/lib/algolia/models/agent-studio/agent_config_update.rb +294 -0
  11. data/lib/algolia/models/agent-studio/agent_status.rb +34 -0
  12. data/lib/algolia/models/agent-studio/agent_test_configuration.rb +271 -0
  13. data/lib/algolia/models/agent-studio/agent_with_version_response.rb +370 -0
  14. data/lib/algolia/models/agent-studio/algolia_display_results_tool_config.rb +254 -0
  15. data/lib/algolia/models/agent-studio/algolia_recommend_tool_config_input.rb +242 -0
  16. data/lib/algolia/models/agent-studio/algolia_recommend_tool_index_config.rb +228 -0
  17. data/lib/algolia/models/agent-studio/algolia_search_tool_config.rb +232 -0
  18. data/lib/algolia/models/agent-studio/algolia_search_tool_index_config.rb +249 -0
  19. data/lib/algolia/models/agent-studio/allowed_domain_bulk_delete.rb +212 -0
  20. data/lib/algolia/models/agent-studio/allowed_domain_bulk_insert.rb +212 -0
  21. data/lib/algolia/models/agent-studio/allowed_domain_create.rb +210 -0
  22. data/lib/algolia/models/agent-studio/allowed_domain_list_response.rb +211 -0
  23. data/lib/algolia/models/agent-studio/allowed_domain_response.rb +264 -0
  24. data/lib/algolia/models/agent-studio/alternatives_as_exact.rb +36 -0
  25. data/lib/algolia/models/agent-studio/anthropic_provider_input.rb +220 -0
  26. data/lib/algolia/models/agent-studio/application_config_patch.rb +209 -0
  27. data/lib/algolia/models/agent-studio/application_config_response.rb +208 -0
  28. data/lib/algolia/models/agent-studio/around_precision_union.rb +108 -0
  29. data/lib/algolia/models/agent-studio/around_radius_union.rb +108 -0
  30. data/lib/algolia/models/agent-studio/assistant_message_v4.rb +252 -0
  31. data/lib/algolia/models/agent-studio/assistant_message_v5.rb +228 -0
  32. data/lib/algolia/models/agent-studio/assistant_part_v4.rb +110 -0
  33. data/lib/algolia/models/agent-studio/assistant_part_v5.rb +110 -0
  34. data/lib/algolia/models/agent-studio/azure_open_ai_provider_input.rb +243 -0
  35. data/lib/algolia/models/agent-studio/base_provider_input.rb +209 -0
  36. data/lib/algolia/models/agent-studio/client_side_tool_config.rb +241 -0
  37. data/lib/algolia/models/agent-studio/client_tools_args_schema.rb +228 -0
  38. data/lib/algolia/models/agent-studio/compatibility_mode.rb +34 -0
  39. data/lib/algolia/models/agent-studio/conversation_base_response.rb +355 -0
  40. data/lib/algolia/models/agent-studio/conversation_full_response.rb +369 -0
  41. data/lib/algolia/models/agent-studio/conversation_metadata.rb +209 -0
  42. data/lib/algolia/models/agent-studio/distinct_union.rb +108 -0
  43. data/lib/algolia/models/agent-studio/episode.rb +243 -0
  44. data/lib/algolia/models/agent-studio/error_base.rb +207 -0
  45. data/lib/algolia/models/agent-studio/exact_on_single_word_query.rb +35 -0
  46. data/lib/algolia/models/agent-studio/facet_filters_union.rb +108 -0
  47. data/lib/algolia/models/agent-studio/facets.rb +208 -0
  48. data/lib/algolia/models/agent-studio/facets_param.rb +220 -0
  49. data/lib/algolia/models/agent-studio/facets_union.rb +108 -0
  50. data/lib/algolia/models/agent-studio/feedback_creation_request.rb +251 -0
  51. data/lib/algolia/models/agent-studio/feedback_response.rb +297 -0
  52. data/lib/algolia/models/agent-studio/ignore_plurals_union.rb +108 -0
  53. data/lib/algolia/models/agent-studio/index_search_parameters.rb +267 -0
  54. data/lib/algolia/models/agent-studio/inside_bounding_box_union.rb +108 -0
  55. data/lib/algolia/models/agent-studio/inside_polygon_union.rb +108 -0
  56. data/lib/algolia/models/agent-studio/location_item_union.rb +108 -0
  57. data/lib/algolia/models/agent-studio/mcp_server_tool_config.rb +276 -0
  58. data/lib/algolia/models/agent-studio/mcp_tool_config.rb +218 -0
  59. data/lib/algolia/models/agent-studio/memory_record.rb +368 -0
  60. data/lib/algolia/models/agent-studio/memory_type.rb +34 -0
  61. data/lib/algolia/models/agent-studio/message_part.rb +132 -0
  62. data/lib/algolia/models/agent-studio/message_response.rb +309 -0
  63. data/lib/algolia/models/agent-studio/message_role.rb +34 -0
  64. data/lib/algolia/models/agent-studio/message_v4.rb +117 -0
  65. data/lib/algolia/models/agent-studio/message_v5.rb +117 -0
  66. data/lib/algolia/models/agent-studio/messages_union.rb +108 -0
  67. data/lib/algolia/models/agent-studio/number_param.rb +230 -0
  68. data/lib/algolia/models/agent-studio/number_param_constraint.rb +219 -0
  69. data/lib/algolia/models/agent-studio/numeric_filters_union.rb +108 -0
  70. data/lib/algolia/models/agent-studio/open_ai_compatible_provider_input.rb +232 -0
  71. data/lib/algolia/models/agent-studio/open_ai_provider_input.rb +220 -0
  72. data/lib/algolia/models/agent-studio/optional_filters_union.rb +108 -0
  73. data/lib/algolia/models/agent-studio/optional_words_union.rb +108 -0
  74. data/lib/algolia/models/agent-studio/paginated_agents_response.rb +221 -0
  75. data/lib/algolia/models/agent-studio/paginated_conversations_response.rb +221 -0
  76. data/lib/algolia/models/agent-studio/paginated_provider_authentications_response.rb +221 -0
  77. data/lib/algolia/models/agent-studio/paginated_secret_keys_response.rb +221 -0
  78. data/lib/algolia/models/agent-studio/pagination_metadata.rb +241 -0
  79. data/lib/algolia/models/agent-studio/provider_authentication_create.rb +230 -0
  80. data/lib/algolia/models/agent-studio/provider_authentication_patch.rb +218 -0
  81. data/lib/algolia/models/agent-studio/provider_authentication_response.rb +274 -0
  82. data/lib/algolia/models/agent-studio/provider_input.rb +111 -0
  83. data/lib/algolia/models/agent-studio/provider_input_nullable.rb +111 -0
  84. data/lib/algolia/models/agent-studio/provider_name.rb +38 -0
  85. data/lib/algolia/models/agent-studio/query_type.rb +35 -0
  86. data/lib/algolia/models/agent-studio/re_ranking_apply_filter_union.rb +108 -0
  87. data/lib/algolia/models/agent-studio/reasoning_part.rb +219 -0
  88. data/lib/algolia/models/agent-studio/reasoning_part_v4.rb +217 -0
  89. data/lib/algolia/models/agent-studio/reasoning_part_v5.rb +217 -0
  90. data/lib/algolia/models/agent-studio/remove_stop_words_union.rb +108 -0
  91. data/lib/algolia/models/agent-studio/remove_words_if_no_results.rb +36 -0
  92. data/lib/algolia/models/agent-studio/search_parameters.rb +950 -0
  93. data/lib/algolia/models/agent-studio/search_parameters_overrides.rb +286 -0
  94. data/lib/algolia/models/agent-studio/secret_key_create.rb +222 -0
  95. data/lib/algolia/models/agent-studio/secret_key_patch.rb +223 -0
  96. data/lib/algolia/models/agent-studio/secret_key_response.rb +287 -0
  97. data/lib/algolia/models/agent-studio/start_part.rb +208 -0
  98. data/lib/algolia/models/agent-studio/start_step_part.rb +208 -0
  99. data/lib/algolia/models/agent-studio/step_start_part_v4.rb +206 -0
  100. data/lib/algolia/models/agent-studio/step_start_part_v5.rb +206 -0
  101. data/lib/algolia/models/agent-studio/string_array_param.rb +242 -0
  102. data/lib/algolia/models/agent-studio/string_array_param_constraint.rb +211 -0
  103. data/lib/algolia/models/agent-studio/supported_language.rb +169 -0
  104. data/lib/algolia/models/agent-studio/tag_filters_union.rb +108 -0
  105. data/lib/algolia/models/agent-studio/text_param.rb +220 -0
  106. data/lib/algolia/models/agent-studio/text_part.rb +216 -0
  107. data/lib/algolia/models/agent-studio/text_part_v4.rb +217 -0
  108. data/lib/algolia/models/agent-studio/text_part_v5.rb +217 -0
  109. data/lib/algolia/models/agent-studio/tool_approval_request_part.rb +285 -0
  110. data/lib/algolia/models/agent-studio/tool_call_part.rb +265 -0
  111. data/lib/algolia/models/agent-studio/tool_config.rb +108 -0
  112. data/lib/algolia/models/agent-studio/tool_config_input.rb +129 -0
  113. data/lib/algolia/models/agent-studio/tool_invocation_part_v4.rb +217 -0
  114. data/lib/algolia/models/agent-studio/tool_invocation_v4.rb +309 -0
  115. data/lib/algolia/models/agent-studio/tool_part_v5.rb +309 -0
  116. data/lib/algolia/models/agent-studio/tool_result_output.rb +221 -0
  117. data/lib/algolia/models/agent-studio/tool_result_output_type.rb +37 -0
  118. data/lib/algolia/models/agent-studio/tool_result_part.rb +254 -0
  119. data/lib/algolia/models/agent-studio/tool_state.rb +36 -0
  120. data/lib/algolia/models/agent-studio/typo_tolerance_enum.rb +36 -0
  121. data/lib/algolia/models/agent-studio/typo_tolerance_union.rb +108 -0
  122. data/lib/algolia/models/agent-studio/unknown_tool_config.rb +220 -0
  123. data/lib/algolia/models/agent-studio/user_data_response.rb +223 -0
  124. data/lib/algolia/models/agent-studio/user_message_metadata_v5.rb +209 -0
  125. data/lib/algolia/models/agent-studio/user_message_v4.rb +250 -0
  126. data/lib/algolia/models/agent-studio/user_message_v5.rb +237 -0
  127. data/lib/algolia/models/agent-studio/validation_error.rb +252 -0
  128. data/lib/algolia/models/agent-studio/vote_enum.rb +34 -0
  129. data/lib/algolia/version.rb +1 -1
  130. metadata +125 -1
@@ -0,0 +1,368 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT.
4
+
5
+ require "date"
6
+ require "time"
7
+
8
+ module Algolia
9
+ module AgentStudio
10
+ # Universal storage model for all memory types (semantic, episodic). This is the ONLY model that touches storage (Algolia). Domain models (SemanticMemory, EpisodicMemory) are used for LLM extraction and converted to MemoryRecord before saving. See https://langchain-ai.github.io/langmem/concepts/conceptual_guide/#memory-types for memory type definitions.
11
+ class MemoryRecord
12
+ attr_accessor :memory_type
13
+
14
+ attr_accessor :episode
15
+
16
+ # Self-contained, first-person memory for long-term recall.
17
+ attr_accessor :text
18
+
19
+ # Verbatim conversation extract, not paraphrased.
20
+ attr_accessor :raw_extract
21
+
22
+ # 5-20 free-form keywords: entities, context, search terms (any words).
23
+ attr_accessor :keywords
24
+
25
+ # 2-4 topics ONLY from this list: [complaints, entertainment, family, feedback, finance, food, goals, health, history, hobbies, learning, praise, preferences, schedule, shopping, technical, travel, work].
26
+ attr_accessor :topics
27
+
28
+ # Arbitrary labels/themes for flexible categorization (e.g., 'Q1-goals', 'paris-trip', 'vip-customer').
29
+ attr_accessor :_tags
30
+
31
+ # 3-5 natural phrases that should trigger this memory.
32
+ attr_accessor :recall_triggers
33
+
34
+ # ObjectID of existing memory to update. Leave empty for new memory.
35
+ attr_accessor :algolia_object_id
36
+
37
+ # Application ID.
38
+ attr_accessor :app_id
39
+
40
+ # Agent IDs with access: ['agent1'], ['*'] for all, ['*', '-agent1'] to exclude.
41
+ attr_accessor :agent_ids
42
+
43
+ # User ID.
44
+ attr_accessor :user_id
45
+
46
+ # Epoch seconds.
47
+ attr_accessor :created_at
48
+
49
+ # Epoch seconds.
50
+ attr_accessor :updated_at
51
+
52
+ # Attribute mapping from ruby-style variable name to JSON key.
53
+ def self.attribute_map
54
+ {
55
+ :memory_type => :memoryType,
56
+ :episode => :episode,
57
+ :text => :text,
58
+ :raw_extract => :rawExtract,
59
+ :keywords => :keywords,
60
+ :topics => :topics,
61
+ :_tags => :_tags,
62
+ :recall_triggers => :recallTriggers,
63
+ :algolia_object_id => :objectID,
64
+ :app_id => :appId,
65
+ :agent_ids => :agentIDs,
66
+ :user_id => :userID,
67
+ :created_at => :createdAt,
68
+ :updated_at => :updatedAt
69
+ }
70
+ end
71
+
72
+ # Attribute type mapping.
73
+ def self.types_mapping
74
+ {
75
+ :memory_type => :"MemoryType",
76
+ :episode => :"Episode",
77
+ :text => :"String",
78
+ :raw_extract => :"String",
79
+ :keywords => :"Array<String>",
80
+ :topics => :"Array<String>",
81
+ :_tags => :"Array<String>",
82
+ :recall_triggers => :"Array<String>",
83
+ :algolia_object_id => :"String",
84
+ :app_id => :"String",
85
+ :agent_ids => :"Array<String>",
86
+ :user_id => :"String",
87
+ :created_at => :"Integer",
88
+ :updated_at => :"Integer"
89
+ }
90
+ end
91
+
92
+ # List of attributes with nullable: true
93
+ def self.openapi_nullable
94
+ Set.new(
95
+ [
96
+ :episode,
97
+ :algolia_object_id
98
+ ]
99
+ )
100
+ end
101
+
102
+ # Initializes the object
103
+ # @param [Hash] attributes Model attributes in the form of hash
104
+ def initialize(attributes = {})
105
+ if (!attributes.is_a?(Hash))
106
+ raise(
107
+ ArgumentError,
108
+ "The input argument (attributes) must be a hash in `Algolia::MemoryRecord` initialize method"
109
+ )
110
+ end
111
+
112
+ # check to see if the attribute exists and convert string to symbol for hash key
113
+ attributes = attributes.each_with_object({}) { |(k, v), h|
114
+ if (!self.class.attribute_map.key?(k.to_sym))
115
+ raise(
116
+ ArgumentError,
117
+ "`#{k}` is not a valid attribute in `Algolia::MemoryRecord`. Please check the name to make sure it's valid. List of attributes: " +
118
+ self.class.attribute_map.keys.inspect
119
+ )
120
+ end
121
+
122
+ h[k.to_sym] = v
123
+ }
124
+
125
+ if attributes.key?(:memory_type)
126
+ self.memory_type = attributes[:memory_type]
127
+ end
128
+
129
+ if attributes.key?(:episode)
130
+ self.episode = attributes[:episode]
131
+ end
132
+
133
+ if attributes.key?(:text)
134
+ self.text = attributes[:text]
135
+ else
136
+ self.text = nil
137
+ end
138
+
139
+ if attributes.key?(:raw_extract)
140
+ self.raw_extract = attributes[:raw_extract]
141
+ else
142
+ self.raw_extract = nil
143
+ end
144
+
145
+ if attributes.key?(:keywords)
146
+ if (value = attributes[:keywords]).is_a?(Array)
147
+ self.keywords = value
148
+ end
149
+ end
150
+
151
+ if attributes.key?(:topics)
152
+ if (value = attributes[:topics]).is_a?(Array)
153
+ self.topics = value
154
+ end
155
+ end
156
+
157
+ if attributes.key?(:_tags)
158
+ if (value = attributes[:_tags]).is_a?(Array)
159
+ self._tags = value
160
+ end
161
+ end
162
+
163
+ if attributes.key?(:recall_triggers)
164
+ if (value = attributes[:recall_triggers]).is_a?(Array)
165
+ self.recall_triggers = value
166
+ end
167
+ end
168
+
169
+ if attributes.key?(:algolia_object_id)
170
+ self.algolia_object_id = attributes[:algolia_object_id]
171
+ end
172
+
173
+ if attributes.key?(:app_id)
174
+ self.app_id = attributes[:app_id]
175
+ end
176
+
177
+ if attributes.key?(:agent_ids)
178
+ if (value = attributes[:agent_ids]).is_a?(Array)
179
+ self.agent_ids = value
180
+ end
181
+ end
182
+
183
+ if attributes.key?(:user_id)
184
+ self.user_id = attributes[:user_id]
185
+ end
186
+
187
+ if attributes.key?(:created_at)
188
+ self.created_at = attributes[:created_at]
189
+ end
190
+
191
+ if attributes.key?(:updated_at)
192
+ self.updated_at = attributes[:updated_at]
193
+ end
194
+ end
195
+
196
+ # Checks equality by comparing each attribute.
197
+ # @param [Object] Object to be compared
198
+ def ==(other)
199
+ return true if self.equal?(other)
200
+ self.class == other.class &&
201
+ memory_type == other.memory_type &&
202
+ episode == other.episode &&
203
+ text == other.text &&
204
+ raw_extract == other.raw_extract &&
205
+ keywords == other.keywords &&
206
+ topics == other.topics &&
207
+ _tags == other._tags &&
208
+ recall_triggers == other.recall_triggers &&
209
+ algolia_object_id == other.algolia_object_id &&
210
+ app_id == other.app_id &&
211
+ agent_ids == other.agent_ids &&
212
+ user_id == other.user_id &&
213
+ created_at == other.created_at &&
214
+ updated_at == other.updated_at
215
+ end
216
+
217
+ # @see the `==` method
218
+ # @param [Object] Object to be compared
219
+ def eql?(other)
220
+ self == other
221
+ end
222
+
223
+ # Calculates hash code according to all attributes.
224
+ # @return [Integer] Hash code
225
+ def hash
226
+ [
227
+ memory_type,
228
+ episode,
229
+ text,
230
+ raw_extract,
231
+ keywords,
232
+ topics,
233
+ _tags,
234
+ recall_triggers,
235
+ algolia_object_id,
236
+ app_id,
237
+ agent_ids,
238
+ user_id,
239
+ created_at,
240
+ updated_at
241
+ ].hash
242
+ end
243
+
244
+ # Builds the object from hash
245
+ # @param [Hash] attributes Model attributes in the form of hash
246
+ # @return [Object] Returns the model itself
247
+ def self.build_from_hash(attributes)
248
+ return nil unless attributes.is_a?(Hash)
249
+ attributes = attributes.transform_keys(&:to_sym)
250
+ transformed_hash = {}
251
+ types_mapping.each_pair do |key, type|
252
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
253
+ transformed_hash[key.to_sym] = nil
254
+ elsif type =~ /\AArray<(.*)>/i
255
+ # check to ensure the input is an array given that the attribute
256
+ # is documented as an array but the input is not
257
+ if attributes[attribute_map[key]].is_a?(Array)
258
+ transformed_hash[key.to_sym] = attributes[attribute_map[key]].map { |v|
259
+ _deserialize(::Regexp.last_match(1), v)
260
+ }
261
+ end
262
+ elsif !attributes[attribute_map[key]].nil?
263
+ transformed_hash[key.to_sym] = _deserialize(type, attributes[attribute_map[key]])
264
+ end
265
+ end
266
+
267
+ new(transformed_hash)
268
+ end
269
+
270
+ # Deserializes the data based on type
271
+ # @param string type Data type
272
+ # @param string value Value to be deserialized
273
+ # @return [Object] Deserialized data
274
+ def self._deserialize(type, value)
275
+ case type.to_sym
276
+ when :Time
277
+ Time.parse(value)
278
+ when :Date
279
+ Date.parse(value)
280
+ when :String
281
+ value.to_s
282
+ when :Integer
283
+ value.to_i
284
+ when :Float
285
+ value.to_f
286
+ when :Boolean
287
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
288
+ true
289
+ else
290
+ false
291
+ end
292
+
293
+ when :Object
294
+ # generic object (usually a Hash), return directly
295
+ value
296
+ when /\AArray<(?<inner_type>.+)>\z/
297
+ inner_type = Regexp.last_match[:inner_type]
298
+ value.map { |v| _deserialize(inner_type, v) }
299
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
300
+ k_type = Regexp.last_match[:k_type]
301
+ v_type = Regexp.last_match[:v_type]
302
+ {}.tap do |hash|
303
+ value.each do |k, v|
304
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
305
+ end
306
+ end
307
+ # model
308
+ else
309
+ # models (e.g. Pet) or oneOf
310
+ klass = Algolia::AgentStudio.const_get(type)
311
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass
312
+ .build_from_hash(value)
313
+ end
314
+ end
315
+
316
+ # Returns the string representation of the object
317
+ # @return [String] String presentation of the object
318
+ def to_s
319
+ to_hash.to_s
320
+ end
321
+
322
+ # to_body is an alias to to_hash (backward compatibility)
323
+ # @return [Hash] Returns the object in the form of hash
324
+ def to_body
325
+ to_hash
326
+ end
327
+
328
+ def to_json(*_args)
329
+ to_hash.to_json
330
+ end
331
+
332
+ # Returns the object in the form of hash
333
+ # @return [Hash] Returns the object in the form of hash
334
+ def to_hash
335
+ hash = {}
336
+ self.class.attribute_map.each_pair do |attr, param|
337
+ value = send(attr)
338
+ if value.nil?
339
+ is_nullable = self.class.openapi_nullable.include?(attr)
340
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
341
+ end
342
+
343
+ hash[param] = _to_hash(value)
344
+ end
345
+
346
+ hash
347
+ end
348
+
349
+ # Outputs non-array value in the form of hash
350
+ # For object, use to_hash. Otherwise, just return the value
351
+ # @param [Object] value Any valid value
352
+ # @return [Hash] Returns the value in the form of hash
353
+ def _to_hash(value)
354
+ if value.is_a?(Array)
355
+ value.compact.map { |v| _to_hash(v) }
356
+ elsif value.is_a?(Hash)
357
+ {}.tap do |hash|
358
+ value.each { |k, v| hash[k] = _to_hash(v) }
359
+ end
360
+ elsif value.respond_to?(:to_hash)
361
+ value.to_hash
362
+ else
363
+ value
364
+ end
365
+ end
366
+ end
367
+ end
368
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT.
4
+
5
+ require "date"
6
+ require "time"
7
+
8
+ module Algolia
9
+ module AgentStudio
10
+ class MemoryType
11
+ SEMANTIC = "semantic".freeze
12
+ EPISODIC = "episodic".freeze
13
+
14
+ def self.all_vars
15
+ @all_vars ||= [SEMANTIC, EPISODIC].freeze
16
+ end
17
+
18
+ # Builds the enum from string
19
+ # @param [String] The enum value in the form of the string
20
+ # @return [String] The enum value
21
+ def self.build_from_hash(value)
22
+ new.build_from_hash(value)
23
+ end
24
+
25
+ # Builds the enum from string
26
+ # @param [String] The enum value in the form of the string
27
+ # @return [String] The enum value
28
+ def build_from_hash(value)
29
+ return value if MemoryType.all_vars.include?(value)
30
+ raise "Invalid ENUM value #{value} for class #MemoryType"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT.
4
+
5
+ require "date"
6
+ require "time"
7
+
8
+ module Algolia
9
+ module AgentStudio
10
+ module MessagePart
11
+ class << self
12
+ # List of class defined in oneOf (OpenAPI v3)
13
+ def openapi_one_of
14
+ [
15
+ :"ReasoningPart",
16
+ :"StartPart",
17
+ :"StartStepPart",
18
+ :"TextPart",
19
+ :"ToolApprovalRequestPart",
20
+ :"ToolCallPart",
21
+ :"ToolResultPart"
22
+ ]
23
+ end
24
+
25
+ # Builds the object
26
+ # @param [Mixed] Data to be matched against the list of oneOf items
27
+ # @return [Object] Returns the model or the data itself
28
+ def build(data)
29
+ # Go through the list of oneOf items and attempt to identify the appropriate one.
30
+ # Note:
31
+ # - We do not attempt to check whether exactly one item matches.
32
+ # - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 })
33
+ # due to the way the deserialization is made in the base_object template (it just casts without verifying).
34
+ # - TODO: scalar values are de facto behaving as if they were nullable.
35
+ # - TODO: logging when debugging is set.
36
+ if data.is_a?(Hash) && data.key?("type")
37
+ case data["type"]
38
+ when "reasoning"
39
+ return find_and_cast_into_type(:"ReasoningPart", data)
40
+ when "start"
41
+ return find_and_cast_into_type(:"StartPart", data)
42
+ when "start-step"
43
+ return find_and_cast_into_type(:"StartStepPart", data)
44
+ when "text"
45
+ return find_and_cast_into_type(:"TextPart", data)
46
+ when "tool-approval-request"
47
+ return find_and_cast_into_type(:"ToolApprovalRequestPart", data)
48
+ when "tool-call"
49
+ return find_and_cast_into_type(:"ToolCallPart", data)
50
+ when "tool-result"
51
+ return find_and_cast_into_type(:"ToolResultPart", data)
52
+ end
53
+ end
54
+
55
+ openapi_one_of.each do |klass|
56
+ begin
57
+ # "nullable: true"
58
+ next if klass == :AnyType
59
+ typed_data = find_and_cast_into_type(klass, data)
60
+ return typed_data if typed_data
61
+ # rescue all errors so we keep iterating even if the current item lookup raises
62
+ rescue
63
+ end
64
+ end
65
+
66
+ openapi_one_of.include?(:AnyType) ? data : nil
67
+ end
68
+
69
+ private
70
+
71
+ SchemaMismatchError = Class.new(StandardError)
72
+
73
+ def find_and_cast_into_type(klass, data)
74
+ return if data.nil?
75
+
76
+ case klass.to_s
77
+ when "Boolean"
78
+ return data if data.instance_of?(TrueClass) || data.instance_of?(FalseClass)
79
+ when "Float"
80
+ return data if data.instance_of?(Float)
81
+ when "Integer"
82
+ return data if data.instance_of?(Integer)
83
+ when "Time"
84
+ return Time.parse(data)
85
+ when "Date"
86
+ return Date.parse(data)
87
+ when "String"
88
+ return data if data.instance_of?(String)
89
+ # "type: object"
90
+ when "Object"
91
+ return data if data.instance_of?(Hash)
92
+ # "type: array"
93
+ when /\AArray<(?<sub_type>.+)>\z/
94
+ if data.instance_of?(Array)
95
+ sub_type = Regexp.last_match[:sub_type]
96
+ return data.map { |item| find_and_cast_into_type(sub_type, item) }
97
+ end
98
+ # "type: object" with "additionalProperties: { ... }"
99
+ when /\AHash<String, (?<sub_type>.+)>\z/
100
+ if data.instance_of?(Hash) && data.keys.all? { |k| k.instance_of?(Symbol) || k.instance_of?(String) }
101
+ sub_type = Regexp.last_match[:sub_type]
102
+ return data.each_with_object({}) { |(k, v), hsh| hsh[k] = find_and_cast_into_type(sub_type, v) }
103
+ end
104
+ # model
105
+ else
106
+ const = Algolia::AgentStudio.const_get(klass)
107
+ if const
108
+ if const.respond_to?(:openapi_one_of)
109
+ # nested oneOf model
110
+ model = const.build(data)
111
+ elsif const.respond_to?(:discriminator_attributes)
112
+ if const.discriminator_attributes.all? { |attr| data.key?(attr) }
113
+ model = const.build_from_hash(data)
114
+ end
115
+ else
116
+ # maybe it's an enum, or doens't have discriminators
117
+ model = const.build_from_hash(data)
118
+ end
119
+
120
+ return model if model
121
+ end
122
+ end
123
+
124
+ # if no match by now, raise
125
+ raise
126
+ rescue
127
+ raise SchemaMismatchError, "#{data} doesn't match the #{klass} type"
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end