43 lines
1.1 KiB
Ruby
43 lines
1.1 KiB
Ruby
# ensure vector extension is enabled via response bot service
|
|
class Features::HelpcenterEmbeddingSearchService < Features::BaseService
|
|
def enable_in_installation
|
|
create_tables
|
|
end
|
|
|
|
def disable_in_installation
|
|
drop_tables
|
|
end
|
|
|
|
def feature_enabled?
|
|
vector_extension_enabled? && MIGRATION_VERSION.table_exists?(:article_embeddings)
|
|
end
|
|
|
|
def create_tables
|
|
return unless vector_extension_enabled?
|
|
|
|
%i[article_embeddings].each do |table|
|
|
send("create_#{table}_table")
|
|
end
|
|
end
|
|
|
|
def drop_tables
|
|
%i[article_embeddings].each do |table|
|
|
MIGRATION_VERSION.drop_table table if MIGRATION_VERSION.table_exists?(table)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_article_embeddings_table
|
|
return if MIGRATION_VERSION.table_exists?(:article_embeddings)
|
|
|
|
MIGRATION_VERSION.create_table :article_embeddings do |t|
|
|
t.bigint :article_id, null: false
|
|
t.text :term, null: false
|
|
t.vector :embedding, limit: 1536
|
|
t.timestamps
|
|
end
|
|
MIGRATION_VERSION.add_index :article_embeddings, :embedding, using: :ivfflat, opclass: :vector_l2_ops
|
|
end
|
|
end
|