mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-04-20 14:14:51 +00:00
This allows for a new mode in persona triage where nothing is posted on topics. This allows people to perform all triage actions using tools Additionally introduces new APIs to create chat messages from tools which can be useful in certain moderation scenarios Co-authored-by: Natalie Tay <natalie.tay@gmail.com> * remove TODO code --------- Co-authored-by: Natalie Tay <natalie.tay@gmail.com>
59 lines
1.5 KiB
Ruby
59 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
if defined?(DiscourseAutomation)
|
|
DiscourseAutomation::Scriptable.add("llm_persona_triage") do
|
|
version 1
|
|
run_in_background
|
|
|
|
triggerables %i[post_created_edited]
|
|
|
|
field :persona,
|
|
component: :choices,
|
|
required: true,
|
|
extra: {
|
|
content: DiscourseAi::Automation.available_persona_choices,
|
|
}
|
|
field :whisper, component: :boolean
|
|
field :silent_mode, component: :boolean
|
|
|
|
script do |context, fields|
|
|
post = context["post"]
|
|
next if post&.user&.bot?
|
|
|
|
persona_id = fields.dig("persona", "value")
|
|
whisper = !!fields.dig("whisper", "value")
|
|
silent_mode = !!fields.dig("silent_mode", "value")
|
|
|
|
begin
|
|
RateLimiter.new(
|
|
Discourse.system_user,
|
|
"llm_persona_triage_#{post.id}",
|
|
SiteSetting.ai_automation_max_triage_per_post_per_minute,
|
|
1.minute,
|
|
).performed!
|
|
|
|
RateLimiter.new(
|
|
Discourse.system_user,
|
|
"llm_persona_triage",
|
|
SiteSetting.ai_automation_max_triage_per_minute,
|
|
1.minute,
|
|
).performed!
|
|
|
|
DiscourseAi::Automation::LlmPersonaTriage.handle(
|
|
post: post,
|
|
persona_id: persona_id,
|
|
whisper: whisper,
|
|
automation: self.automation,
|
|
silent_mode: silent_mode,
|
|
)
|
|
rescue => e
|
|
Discourse.warn_exception(
|
|
e,
|
|
message: "llm_persona_triage: skipped triage on post #{post.id}",
|
|
)
|
|
raise e if Rails.env.tests?
|
|
end
|
|
end
|
|
end
|
|
end
|