chatwoot/chatwoot

View on GitHub
enterprise/app/models/response_source.rb

Summary

Maintainability
A
0 mins
Test Coverage
# == Schema Information
#
# Table name: response_sources
#
#  id                :bigint           not null, primary key
#  name              :string           not null
#  source_link       :string
#  source_model_type :string
#  source_type       :integer          default("external"), not null
#  created_at        :datetime         not null
#  updated_at        :datetime         not null
#  account_id        :bigint           not null
#  source_model_id   :bigint
#
# Indexes
#
#  index_response_sources_on_source_model  (source_model_type,source_model_id)
#
class ResponseSource < ApplicationRecord
  enum source_type: { external: 0, kbase: 1, inbox: 2 }
  has_many :inbox_response_sources, dependent: :destroy_async
  has_many :inboxes, through: :inbox_response_sources
  belongs_to :account
  has_many :response_documents, dependent: :destroy_async
  has_many :responses, dependent: :destroy_async

  accepts_nested_attributes_for :response_documents

  def get_responses(query)
    embedding = Openai::EmbeddingsService.new.get_embedding(query)
    responses.active.nearest_neighbors(:embedding, embedding, distance: 'cosine').first(5)
  end
end