|
9 | 9 |
|
10 | 10 | triggerables %i[post_created_edited] |
11 | 11 |
|
12 | | - field :system_prompt, component: :message, required: false |
13 | | - field :search_for_text, component: :text, required: true |
14 | | - field :max_post_tokens, component: :text |
15 | | - field :stop_sequences, component: :text_list, required: false |
| 12 | + # TODO move to triggerables |
| 13 | + field :include_personal_messages, component: :boolean |
| 14 | + |
| 15 | + # Inputs |
16 | 16 | field :model, |
17 | 17 | component: :choices, |
18 | 18 | required: true, |
19 | 19 | extra: { |
20 | 20 | content: DiscourseAi::Automation.available_models, |
21 | 21 | } |
| 22 | + field :system_prompt, component: :message, required: false |
| 23 | + field :search_for_text, component: :text, required: true |
| 24 | + field :max_post_tokens, component: :text |
| 25 | + field :stop_sequences, component: :text_list, required: false |
| 26 | + field :temperature, component: :text |
| 27 | + |
| 28 | + # Actions |
22 | 29 | field :category, component: :category |
23 | 30 | field :tags, component: :tags |
24 | 31 | field :hide_topic, component: :boolean |
25 | 32 | field :flag_post, component: :boolean |
26 | | - field :include_personal_messages, component: :boolean |
27 | | - field :temperature, component: :text |
28 | 33 | field :flag_type, |
29 | 34 | component: :choices, |
30 | 35 | required: false, |
31 | 36 | extra: { |
32 | 37 | content: DiscourseAi::Automation.flag_types, |
33 | 38 | }, |
34 | 39 | default: "review" |
35 | | - field :canned_reply, component: :message |
36 | 40 | field :canned_reply_user, component: :user |
| 41 | + field :canned_reply, component: :message |
| 42 | + field :reply_persona, |
| 43 | + component: :choices, |
| 44 | + extra: { |
| 45 | + content: |
| 46 | + DiscourseAi::Automation.available_persona_choices( |
| 47 | + require_user: false, |
| 48 | + require_default_llm: true, |
| 49 | + ), |
| 50 | + } |
| 51 | + field :whisper, component: :boolean |
37 | 52 |
|
38 | 53 | script do |context, fields| |
39 | 54 | post = context["post"] |
| 55 | + next if post&.user&.bot? |
| 56 | + |
| 57 | + if post.topic.private_message? |
| 58 | + include_personal_messages = fields.dig("include_personal_messages", "value") |
| 59 | + next if !include_personal_messages |
| 60 | + end |
| 61 | + |
40 | 62 | canned_reply = fields.dig("canned_reply", "value") |
41 | 63 | canned_reply_user = fields.dig("canned_reply_user", "value") |
| 64 | + reply_persona_id = fields.dig("reply_persona", "value") |
| 65 | + whisper = fields.dig("whisper", "value") |
42 | 66 |
|
43 | 67 | # nothing to do if we already replied |
44 | 68 | next if post.user.username == canned_reply_user |
45 | 69 | next if post.raw.strip == canned_reply.to_s.strip |
46 | 70 |
|
47 | | - system_prompt = fields["system_prompt"]["value"] |
48 | | - search_for_text = fields["search_for_text"]["value"] |
49 | | - model = fields["model"]["value"] |
| 71 | + system_prompt = fields.dig("system_prompt", "value") |
| 72 | + search_for_text = fields.dig("search_for_text", "value") |
| 73 | + model = fields.dig("model", "value") |
50 | 74 |
|
51 | 75 | category_id = fields.dig("category", "value") |
52 | 76 | tags = fields.dig("tags", "value") |
|
65 | 89 |
|
66 | 90 | stop_sequences = fields.dig("stop_sequences", "value") |
67 | 91 |
|
68 | | - if post.topic.private_message? |
69 | | - include_personal_messages = fields.dig("include_personal_messages", "value") |
70 | | - next if !include_personal_messages |
71 | | - end |
72 | | - |
73 | 92 | begin |
74 | 93 | RateLimiter.new( |
75 | 94 | Discourse.system_user, |
|
94 | 113 | tags: tags, |
95 | 114 | canned_reply: canned_reply, |
96 | 115 | canned_reply_user: canned_reply_user, |
| 116 | + reply_persona_id: reply_persona_id, |
| 117 | + whisper: whisper, |
97 | 118 | hide_topic: hide_topic, |
98 | 119 | flag_post: flag_post, |
99 | 120 | flag_type: flag_type.to_s.to_sym, |
100 | 121 | max_post_tokens: max_post_tokens, |
101 | 122 | stop_sequences: stop_sequences, |
102 | 123 | automation: self.automation, |
103 | 124 | temperature: temperature, |
| 125 | + action: context["action"], |
104 | 126 | ) |
105 | 127 | rescue => e |
106 | | - Discourse.warn_exception(e, message: "llm_triage: skipped triage on post #{post.id}") |
| 128 | + Discourse.warn_exception( |
| 129 | + e, |
| 130 | + message: "llm_triage: skipped triage on post #{post.id} #{post.url}", |
| 131 | + ) |
107 | 132 | end |
108 | 133 | end |
109 | 134 | end |
|
0 commit comments