discourse-ai/lib/translation/language_detector.rb
Natalie Tay b5e8277083
DEV: Move AI translation feature into an AI Feature (#1424)
This PR moves translations into an AI Feature

See https://github.com/discourse/discourse-ai/pull/1424 for screenshots
2025-06-13 10:17:27 +08:00

56 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Translation
class LanguageDetector
DETECTION_CHAR_LIMIT = 1000
def initialize(text)
@text = text
end
def detect
return nil if !SiteSetting.ai_translation_enabled
if (
ai_persona = AiPersona.find_by(id: SiteSetting.ai_translation_locale_detector_persona)
).blank?
return nil
end
persona_klass = ai_persona.class_instance
persona = persona_klass.new
llm_model = LlmModel.find_by(id: preferred_llm_model(persona_klass))
return nil if llm_model.blank?
bot =
DiscourseAi::Personas::Bot.as(
ai_persona.user || Discourse.system_user,
persona: persona,
model: llm_model,
)
context =
DiscourseAi::Personas::BotContext.new(
user: ai_persona.user || Discourse.system_user,
skip_tool_details: true,
feature_name: "translation",
messages: [{ type: :user, content: @text }],
)
structured_output = nil
bot.reply(context) do |partial, _, type|
structured_output = partial if type == :structured_output
end
structured_output&.read_buffered_property(:locale) || []
end
private
def preferred_llm_model(persona_klass)
persona_klass.default_llm_id || SiteSetting.ai_translation_model&.split(":")&.last
end
end
end
end