Module: Parse::Core::EmbedManaged::ClassMethods
- Defined in:
- lib/parse/model/core/embed_managed.rb
Instance Method Summary collapse
-
#embed(*source_fields, into:, input_type: :search_document, digest_field: nil) ⇒ Symbol
Declare a managed embedding.
-
#embed_directives ⇒ Object
Per-class registry of EmbedDirectives keyed by target vector property symbol.
Instance Method Details
#embed(*source_fields, into:, input_type: :search_document, digest_field: nil) ⇒ Symbol
Declare a managed embedding. See Parse::Core::EmbedManaged for the full description.
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/parse/model/core/embed_managed.rb', line 135 def (*source_fields, into:, input_type: :search_document, digest_field: nil) if source_fields.empty? raise InvalidEmbedDeclaration, "#{self}.embed: at least one source field is required." end into = into.to_sym unless vector_properties.key?(into) raise InvalidEmbedDeclaration, "#{self}.embed: `into: :#{into}` is not a declared :vector property " \ "(declared :vector fields: #{vector_properties.keys.inspect})." end provider_name = vector_properties.dig(into, :provider) if provider_name.nil? raise InvalidEmbedDeclaration, "#{self}.embed: `into: :#{into}` has no `provider:` declared on its :vector " \ "property. Add `provider: :openai` (or another registered name) to the " \ "property declaration." end sources = source_fields.map(&:to_sym) missing = sources.reject { |f| fields.key?(f) } unless missing.empty? raise InvalidEmbedDeclaration, "#{self}.embed: source fields #{missing.inspect} are not declared on this class." end digest_field = (digest_field || :"#{into}_digest").to_sym unless fields.key?(digest_field) property digest_field, :string end directive = EmbedDirective.new( sources: sources, into: into, digest_field: digest_field, input_type: input_type, provider_name: provider_name, ).freeze [into] = directive callback_method = :"_auto_embed_#{into}!" define_method(callback_method) do Parse::Core::EmbedManaged.(self, directive) end already_registered = _save_callbacks.any? do |cb| cb.kind == :before && (cb.filter.to_sym rescue cb.filter) == callback_method end before_save callback_method unless already_registered (into, sources) into end |
#embed_directives ⇒ Object
Per-class registry of EmbedDirectives keyed by target vector property symbol. Read by tests and tooling; written only by #embed.
114 115 116 |
# File 'lib/parse/model/core/embed_managed.rb', line 114 def @embed_directives ||= {} end |