57 lines
1.8 KiB
Ruby
57 lines
1.8 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: jasmine_document_chunks
|
|
#
|
|
# id :bigint not null, primary key
|
|
# content :text
|
|
# embedding :vector(1536)
|
|
# metadata :jsonb
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :bigint not null
|
|
# collection_id :bigint not null
|
|
# document_id :bigint not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_jasmine_chunks_on_acc_coll_doc (account_id,collection_id,document_id)
|
|
# index_jasmine_document_chunks_on_account_id (account_id)
|
|
# index_jasmine_document_chunks_on_collection_id (collection_id)
|
|
# index_jasmine_document_chunks_on_document_id (document_id)
|
|
# index_jasmine_document_chunks_on_embedding (embedding) USING hnsw
|
|
#
|
|
# Foreign Keys
|
|
#
|
|
# fk_rails_... (account_id => accounts.id)
|
|
# fk_rails_... (collection_id => jasmine_collections.id)
|
|
# fk_rails_... (document_id => jasmine_documents.id)
|
|
#
|
|
module Jasmine
|
|
require 'neighbor'
|
|
class DocumentChunk < ApplicationRecord
|
|
# Explicitly load Neighbor for development environment issues
|
|
extend Neighbor::Model
|
|
self.table_name = 'jasmine_document_chunks'
|
|
|
|
belongs_to :account
|
|
belongs_to :collection, class_name: 'Jasmine::Collection'
|
|
belongs_to :document, class_name: 'Jasmine::Document'
|
|
|
|
# Enable neighbor vector search
|
|
has_neighbors :embedding
|
|
|
|
validates :content, presence: true
|
|
validate :validate_consistency
|
|
|
|
private
|
|
|
|
def validate_consistency
|
|
return if document.nil? || collection.nil?
|
|
|
|
errors.add(:base, 'Document mismatch') if document.collection_id != collection_id
|
|
errors.add(:base, 'Collection account mismatch') if collection.account_id != account_id
|
|
errors.add(:base, 'Document account mismatch') if document.account_id != account_id
|
|
end
|
|
end
|
|
end
|