Module: LangchainrbRails::ActiveRecord::Hooks
- Defined in:
- lib/langchainrb_rails/active_record/hooks.rb
Overview
This module adds the following functionality to your ActiveRecord models:
vectorsearchclass method to set the vector search providersimilarity_searchclass method to search for similar textsupsert_to_vectorsearchinstance method to upsert the record to the vector search providerdestroy_from_vectorsearchinstance method to remove the record from the vector search provider
Usage: class Recipe < ActiveRecord::Base vectorsearch
after_save :upsert_to_vectorsearch
after_destroy :destroy_from_vectorsearch
# Overwriting how the model is serialized before it's indexed
def as_vector
[
"Title: #{title}",
"Description: #{description}",
...
]
.compact
.join("\n")
end
end
Create the default schema Recipe.class_variable_get(:@@provider).create_default_schema Query the vector search provider Recipe.similarity_search("carnivore dish") Delete the default schema to start over Recipe.class_variable_get(:@@provider).destroy_default_schema
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
-
#as_vector ⇒ String
Used to serialize the DB record to an indexable vector text Overwrite this method in your model to customize.
-
#destroy_from_vectorsearch ⇒ Boolean
Remove the record from the vector search provider This method should be called in an ActiveRecord
after_destroycallback. -
#upsert_to_vectorsearch ⇒ Boolean
Index the text to the vector search provider You'd typically call this method in an ActiveRecord callback.
Class Method Details
.included(base) ⇒ Object
38 39 40 |
# File 'lib/langchainrb_rails/active_record/hooks.rb', line 38 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#as_vector ⇒ String
Used to serialize the DB record to an indexable vector text Overwrite this method in your model to customize
76 77 78 79 80 |
# File 'lib/langchainrb_rails/active_record/hooks.rb', line 76 def as_vector # Don't vectorize the embedding ... this would happen if it already exists # for a record and we update. to_json(except: :embedding) end |
#destroy_from_vectorsearch ⇒ Boolean
Remove the record from the vector search provider
This method should be called in an ActiveRecord after_destroy callback
66 67 68 69 70 |
# File 'lib/langchainrb_rails/active_record/hooks.rb', line 66 def destroy_from_vectorsearch self.class.class_variable_get(:@@provider).remove_texts( ids: [id] ) end |
#upsert_to_vectorsearch ⇒ Boolean
Index the text to the vector search provider You'd typically call this method in an ActiveRecord callback
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/langchainrb_rails/active_record/hooks.rb', line 47 def upsert_to_vectorsearch if previously_new_record? self.class.class_variable_get(:@@provider).add_texts( texts: [as_vector], ids: [id] ) else self.class.class_variable_get(:@@provider).update_texts( texts: [as_vector], ids: [id] ) end end |