mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-15 02:27:29 +08:00
Rebased version of [discouse/discourse-ai#1496](https://github.com/discourse/discourse-ai/pull/1496)
39 lines
884 B
Ruby
39 lines
884 B
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Configuration
|
|
class SimpleLlmValidator
|
|
def initialize(opts = {})
|
|
@opts = opts
|
|
end
|
|
|
|
def valid_value?(val)
|
|
return true if val == ""
|
|
|
|
run_test(val).tap { |result| @unreachable = result }
|
|
rescue StandardError => e
|
|
raise e if Rails.env.test?
|
|
@unreachable = true
|
|
true
|
|
end
|
|
|
|
def run_test(val)
|
|
if Rails.env.test?
|
|
# In test mode, we assume the model is reachable.
|
|
return true
|
|
end
|
|
|
|
DiscourseAi::Completions::Llm
|
|
.proxy(val)
|
|
.generate("How much is 1 + 1?", user: nil, feature_name: "llm_validator")
|
|
.present?
|
|
end
|
|
|
|
def error_message
|
|
return unless @unreachable
|
|
|
|
I18n.t("discourse_ai.llm.configuration.model_unreachable")
|
|
end
|
|
end
|
|
end
|
|
end
|