|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
| 3 | +summarization_personas = [DiscourseAi::Personas::Summarizer, DiscourseAi::Personas::ShortSummarizer] |
| 4 | + |
| 5 | +def from_setting(setting_name) |
| 6 | + DB.query_single( |
| 7 | + "SELECT value FROM site_settings WHERE name = :setting_name", |
| 8 | + setting_name: setting_name, |
| 9 | + ) |
| 10 | +end |
| 11 | + |
3 | 12 | DiscourseAi::Personas::Persona.system_personas.each do |persona_class, id| |
4 | 13 | persona = AiPersona.find_by(id: id) |
5 | 14 | if !persona |
6 | 15 | persona = AiPersona.new |
7 | 16 | persona.id = id |
| 17 | + |
8 | 18 | if persona_class == DiscourseAi::Personas::WebArtifactCreator |
9 | 19 | # this is somewhat sensitive, so we default it to staff |
10 | 20 | persona.allowed_group_ids = [Group::AUTO_GROUPS[:staff]] |
| 21 | + elsif summarization_personas.include?(persona_class) |
| 22 | + # Copy group permissions from site settings. |
| 23 | + default_groups = [Group::AUTO_GROUPS[:staff], Group::AUTO_GROUPS[:trust_level_3]] |
| 24 | + |
| 25 | + setting_name = "ai_custom_summarization_allowed_groups" |
| 26 | + if persona_class == DiscourseAi::Personas::ShortSummarizer |
| 27 | + setting_name = "ai_summary_gists_allowed_groups" |
| 28 | + default_groups = [] # Blank == everyone |
| 29 | + end |
| 30 | + |
| 31 | + persona.allowed_group_ids = from_setting(setting_name).first&.split("|") || default_groups |
11 | 32 | else |
12 | 33 | persona.allowed_group_ids = [Group::AUTO_GROUPS[:trust_level_0]] |
13 | 34 | end |
14 | | - persona.enabled = true |
| 35 | + |
| 36 | + persona.enabled = !summarization_personas.include?(persona_class) |
15 | 37 | persona.priority = true if persona_class == DiscourseAi::Personas::General |
16 | 38 | end |
17 | 39 |
|
|
22 | 44 | persona_class.name + SecureRandom.hex, |
23 | 45 | ] |
24 | 46 | persona.name = DB.query_single(<<~SQL, names, id).first |
25 | | - SELECT guess_name |
26 | | - FROM ( |
27 | | - SELECT unnest(Array[?]) AS guess_name |
28 | | - FROM (SELECT 1) as t |
29 | | - ) x |
30 | | - LEFT JOIN ai_personas ON ai_personas.name = x.guess_name AND ai_personas.id <> ? |
31 | | - WHERE ai_personas.id IS NULL |
32 | | - ORDER BY x.guess_name ASC |
33 | | - LIMIT 1 |
34 | | - SQL |
| 47 | + SELECT guess_name |
| 48 | + FROM ( |
| 49 | + SELECT unnest(Array[?]) AS guess_name |
| 50 | + FROM (SELECT 1) as t |
| 51 | + ) x |
| 52 | + LEFT JOIN ai_personas ON ai_personas.name = x.guess_name AND ai_personas.id <> ? |
| 53 | + WHERE ai_personas.id IS NULL |
| 54 | + ORDER BY x.guess_name ASC |
| 55 | + LIMIT 1 |
| 56 | + SQL |
35 | 57 |
|
36 | 58 | persona.description = persona_class.description |
37 | 59 |
|
|
0 commit comments