mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-02-14 15:34:42 +00:00
DEV: Robust check for embeddings enabled (#1116)
This commit is contained in:
parent
83c7919856
commit
e52045ebdc
@ -20,7 +20,7 @@ module DiscourseAi
|
||||
def upload_file
|
||||
file = params[:file] || params[:files].first
|
||||
|
||||
if !SiteSetting.ai_embeddings_enabled?
|
||||
if !DiscourseAi::Embeddings.enabled?
|
||||
raise Discourse::InvalidAccess.new("Embeddings not enabled")
|
||||
end
|
||||
|
||||
|
@ -5,7 +5,7 @@ module Jobs
|
||||
sidekiq_options queue: "low"
|
||||
|
||||
def execute(args)
|
||||
return unless SiteSetting.ai_embeddings_enabled
|
||||
return unless DiscourseAi::Embeddings.enabled?
|
||||
return if args[:target_type].blank? || args[:target_id].blank?
|
||||
target = args[:target_type].constantize.find_by_id(args[:target_id])
|
||||
return if target.nil? || target.deleted_at.present?
|
||||
|
@ -7,7 +7,7 @@ module Jobs
|
||||
cluster_concurrency 1
|
||||
|
||||
def execute(args)
|
||||
return unless SiteSetting.ai_embeddings_enabled
|
||||
return unless DiscourseAi::Embeddings.enabled?
|
||||
|
||||
limit = SiteSetting.ai_embeddings_backfill_batch_size
|
||||
|
||||
|
@ -11,7 +11,7 @@ class RagDocumentFragment < ActiveRecord::Base
|
||||
def link_target_and_uploads(target, upload_ids)
|
||||
return if target.blank?
|
||||
return if upload_ids.blank?
|
||||
return if !SiteSetting.ai_embeddings_enabled?
|
||||
return if !DiscourseAi::Embeddings.enabled?
|
||||
|
||||
UploadReference.ensure_exist!(upload_ids: upload_ids, target: target)
|
||||
|
||||
@ -27,7 +27,7 @@ class RagDocumentFragment < ActiveRecord::Base
|
||||
|
||||
def update_target_uploads(target, upload_ids)
|
||||
return if target.blank?
|
||||
return if !SiteSetting.ai_embeddings_enabled?
|
||||
return if !DiscourseAi::Embeddings.enabled?
|
||||
|
||||
if upload_ids.blank?
|
||||
RagDocumentFragment.where(target: target).destroy_all
|
||||
|
@ -196,7 +196,7 @@ module DiscourseAi
|
||||
)
|
||||
|
||||
plugin.on(:site_setting_changed) do |name, old_value, new_value|
|
||||
if name == :ai_embeddings_selected_model && SiteSetting.ai_embeddings_enabled? &&
|
||||
if name == :ai_embeddings_selected_model && DiscourseAi::Embeddings.enabled? &&
|
||||
new_value != old_value
|
||||
RagDocumentFragment.delete_all
|
||||
UploadReference
|
||||
|
@ -295,7 +295,7 @@ module DiscourseAi
|
||||
upload_refs =
|
||||
UploadReference.where(target_id: id, target_type: "AiPersona").pluck(:upload_id)
|
||||
|
||||
return nil if !SiteSetting.ai_embeddings_enabled?
|
||||
return nil if !DiscourseAi::Embeddings.enabled?
|
||||
return nil if conversation_context.blank? || upload_refs.blank?
|
||||
|
||||
latest_interactions =
|
||||
|
@ -9,7 +9,7 @@ module DiscourseAi
|
||||
|
||||
def categories
|
||||
return [] if @text.blank?
|
||||
return [] unless SiteSetting.ai_embeddings_enabled
|
||||
return [] if !DiscourseAi::Embeddings.enabled?
|
||||
|
||||
candidates = nearest_neighbors(limit: 100)
|
||||
return [] if candidates.empty?
|
||||
@ -51,7 +51,7 @@ module DiscourseAi
|
||||
|
||||
def tags
|
||||
return [] if @text.blank?
|
||||
return [] unless SiteSetting.ai_embeddings_enabled
|
||||
return [] if !DiscourseAi::Embeddings.enabled?
|
||||
|
||||
candidates = nearest_neighbors(limit: 100)
|
||||
return [] if candidates.empty?
|
||||
|
@ -8,20 +8,11 @@ module DiscourseAi
|
||||
end
|
||||
|
||||
def valid_value?(val)
|
||||
if val.blank?
|
||||
@module_enabled = SiteSetting.ai_embeddings_enabled
|
||||
|
||||
!@module_enabled
|
||||
else
|
||||
EmbeddingDefinition.exists?(id: val).tap { |def_exists| @invalid_option = !def_exists }
|
||||
end
|
||||
val.present? || !SiteSetting.ai_embeddings_enabled
|
||||
end
|
||||
|
||||
def error_message
|
||||
return I18n.t("discourse_ai.embeddings.configuration.disable_embeddings") if @module_enabled
|
||||
return I18n.t("discourse_ai.embeddings.configuration.invalid_config") if @invalid_option
|
||||
|
||||
""
|
||||
I18n.t("discourse_ai.embeddings.configuration.disable_embeddings")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
10
lib/embeddings.rb
Normal file
10
lib/embeddings.rb
Normal file
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module DiscourseAi
|
||||
module Embeddings
|
||||
def self.enabled?
|
||||
SiteSetting.ai_embeddings_enabled && SiteSetting.ai_embeddings_selected_model.present? &&
|
||||
EmbeddingDefinition.exists?(id: SiteSetting.ai_embeddings_selected_model)
|
||||
end
|
||||
end
|
||||
end
|
@ -56,7 +56,7 @@ module DiscourseAi
|
||||
# embeddings generation.
|
||||
callback =
|
||||
Proc.new do |target|
|
||||
if SiteSetting.ai_embeddings_enabled &&
|
||||
if DiscourseAi::Embeddings.enabled? &&
|
||||
(target.is_a?(Topic) || SiteSetting.ai_embeddings_per_post_enabled)
|
||||
Jobs.enqueue(
|
||||
:generate_embeddings,
|
||||
|
@ -3,6 +3,10 @@
|
||||
describe DiscourseAi::Embeddings::EntryPoint do
|
||||
fab!(:user) { Fabricate(:user, refresh_auto_groups: true) }
|
||||
|
||||
fab!(:embedding_definition)
|
||||
|
||||
before { SiteSetting.ai_embeddings_selected_model = embedding_definition.id }
|
||||
|
||||
describe "registering event callbacks" do
|
||||
context "when creating a topic" do
|
||||
let(:creator) do
|
||||
|
@ -6,7 +6,10 @@ RSpec.describe RagDocumentFragment do
|
||||
fab!(:upload_2) { Fabricate(:upload) }
|
||||
fab!(:vector_def) { Fabricate(:embedding_definition) }
|
||||
|
||||
before { SiteSetting.ai_embeddings_enabled = true }
|
||||
before do
|
||||
SiteSetting.ai_embeddings_selected_model = vector_def.id
|
||||
SiteSetting.ai_embeddings_enabled = true
|
||||
end
|
||||
|
||||
describe ".link_uploads_and_persona" do
|
||||
it "does nothing if there is no persona" do
|
||||
|
@ -3,10 +3,11 @@
|
||||
RSpec.describe DiscourseAi::Admin::AiPersonasController do
|
||||
fab!(:admin)
|
||||
fab!(:ai_persona)
|
||||
fab!(:embedding_definition)
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
|
||||
SiteSetting.ai_embeddings_selected_model = embedding_definition.id
|
||||
SiteSetting.ai_embeddings_enabled = true
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user