decidim-ai 0.30.2 → 0.31.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01dbf176e82ab343010a6390476eee6f00aaab10c6974e1502a9d0e8e50a32d7
4
- data.tar.gz: 349d3845a7773c4119aadaaaa2cde95f3e8c623bbe084c29e3545c3c07a0566f
3
+ metadata.gz: f168e99545bccfb435d2bb4e9675cbe676c77f205546273f35ed05a33e53cc85
4
+ data.tar.gz: 47b17958cee549fdf6131f56c4cc700a03493c136a846414e534b89a77ca47f6
5
5
  SHA512:
6
- metadata.gz: ca00fe6cbbf71ca8370aa39332fae2ef6b1391f597ec544fc3cc02a4dcdb15698f281f4592fdcbb1817d66f474ebb956f1f41ff1ee9d0a189b92a67ff8b4b5d0
7
- data.tar.gz: fcc4497178a79eda9d1d08ff763ce053909d32068081623ca639fce49732f6e776743040f86c51391d16dd80e45fb4174c618ec141e7ca676314fad4fe675019
6
+ metadata.gz: 93a9fe8bc58630840665ef8242b6057f4404f4ad43e3efcab049997019303d9a67de2598cfb4e8d9ce27ac877f5ba2dc0301543953bb8a8a5cb80a21c5e044f5
7
+ data.tar.gz: 8ee82196cf7814e8734b4001d9d3bd037ad5dc88085c1502ac753dc3eff77bb9eebddcb7723d782f785f4bef77068d22ed987a25416019c30db34cf85776deba
data/README.md CHANGED
@@ -15,7 +15,7 @@ To install this module, run in your console:
15
15
  bundle add decidim-ai
16
16
  ```
17
17
 
18
- After that, add an initializer file as presented in the [documentation](https://docs.decidim.org/en/develop/services/aitools.html#_configuration)
18
+ After that, configure your application using the environment variables as presented in the [documentation](https://docs.decidim.org/en/develop/configure/environment_variables.html)
19
19
 
20
20
  Then, you need to run the below command, so that the reporting user is created.
21
21
 
@@ -27,7 +27,15 @@ module Decidim
27
27
  private
28
28
 
29
29
  def form
30
- @form ||= Decidim::ReportForm.new(reason: "spam", details: classifier.classification_log).with_context(current_user: reporting_user)
30
+ @form ||= Decidim::ReportForm.new(
31
+ reason: "spam",
32
+ details: classifier.classification_log,
33
+ hide: Decidim::Ai::SpamDetection.hide_reported_resources_automatically
34
+ ).with_context(
35
+ current_user: reporting_user,
36
+ can_hide: false,
37
+ marked_as_spam: true
38
+ )
31
39
  end
32
40
 
33
41
  def reporting_user
@@ -26,12 +26,6 @@ module Decidim
26
26
  .set(wait: Decidim::Ai::SpamDetection.spam_detection_delay)
27
27
  .perform_later(data[:resource])
28
28
  end
29
- Decidim::EventsManager.subscribe("decidim.update_user_group:after") do |_event_name, data|
30
- Decidim::Ai::SpamDetection::UserSpamAnalyzerJob.perform_later(data[:resource])
31
- end
32
- Decidim::EventsManager.subscribe("decidim.create_user_group:after") do |_event_name, data|
33
- Decidim::Ai::SpamDetection::UserSpamAnalyzerJob.perform_later(data[:resource])
34
- end
35
29
  end
36
30
  end
37
31
 
@@ -16,7 +16,7 @@ module Decidim
16
16
  # end
17
17
  # end
18
18
  config_accessor :formatter do
19
- "Decidim::Ai::Language::Formatter"
19
+ Decidim::Env.new("DECIDIM_AI_LANGUAGE_FORMATTER", "Decidim::Ai::Language::Formatter").value
20
20
  end
21
21
  end
22
22
  end
@@ -28,10 +28,16 @@ module Decidim
28
28
  autoload :Bayes, "decidim/ai/spam_detection/strategy/bayes"
29
29
  end
30
30
 
31
+ # When the engine is consistently marking spam content without errors,
32
+ # you can skip human intervention by enabling this functionality
33
+ config_accessor :hide_reported_resources_automatically do
34
+ Decidim::Env.new("DECIDIM_SPAM_HIDE_REPORTED_RESOURCES_AUTOMATICALLY", false).present?
35
+ end
36
+
31
37
  # This is the email address used by the spam engine to
32
38
  # properly identify the user that will report users and content
33
39
  config_accessor :reporting_user_email do
34
- "decidim-reporting-user@example.org"
40
+ Decidim::Env.new("DECIDIM_SPAM_REPORTING_USER", "decidim-reporting-user@example.org").value
35
41
  end
36
42
 
37
43
  # You can configure the spam threshold for the spam detection service.
@@ -39,13 +45,13 @@ module Decidim
39
45
  # The default value is 0.75
40
46
  # Any value below the threshold will be considered spam.
41
47
  config_accessor :resource_score_threshold do
42
- 0.75
48
+ Decidim::Env.new("DECIDIM_SPAM_DETECTION_RESOURCE_SCORE_THRESHOLD", 0.75).to_f
43
49
  end
44
50
 
45
51
  # You can configure the spam delay for the spam detection service.
46
- # The default value is 5 minutes
52
+ # The default value is 30 seconds
47
53
  config_accessor :spam_detection_delay do
48
- 30.seconds
54
+ Decidim::Env.new("DECIDIM_SPAM_DETECTION_DELAY_IN_SECONDS", 30).to_i.seconds
49
55
  end
50
56
 
51
57
  # Registered analyzers.
@@ -98,7 +104,7 @@ module Decidim
98
104
  # Spam detection service class.
99
105
  # If you want to use a different spam detection service, you can use a class service having the following contract
100
106
  config_accessor :resource_detection_service do
101
- "Decidim::Ai::SpamDetection::Service"
107
+ Decidim::Env.new("DECIDIM_SPAM_DETECTION_RESOURCE_SERVICE", "Decidim::Ai::SpamDetection::Service").value
102
108
  end
103
109
 
104
110
  # You can configure the spam threshold for the spam detection service.
@@ -106,7 +112,7 @@ module Decidim
106
112
  # The default value is 0.75
107
113
  # Any value below the threshold will be considered spam.
108
114
  config_accessor :user_score_threshold do
109
- 0.75
115
+ Decidim::Env.new("DECIDIM_SPAM_DETECTION_USER_SCORE_THRESHOLD", 0.75).to_f
110
116
  end
111
117
 
112
118
  # Registered analyzers.
@@ -141,21 +147,16 @@ module Decidim
141
147
 
142
148
  # This config_accessor allows the implementers to change the class being used by the classifier,
143
149
  # in order to change the finder method or what a hidden user really is.
144
- # The same applies for UserGroups.
145
150
  config_accessor :user_models do
146
- @user_models ||= begin
147
- user_models = {}
148
-
149
- user_models["Decidim::UserGroup"] = "Decidim::Ai::SpamDetection::Resource::UserBaseEntity"
150
- user_models["Decidim::User"] = "Decidim::Ai::SpamDetection::Resource::UserBaseEntity"
151
- user_models
152
- end
151
+ {
152
+ "Decidim::User" => "Decidim::Ai::SpamDetection::Resource::UserBaseEntity"
153
+ }
153
154
  end
154
155
 
155
156
  # Spam detection service class.
156
157
  # If you want to use a different spam detection service, you can use a class service having the following contract
157
158
  config_accessor :user_detection_service do
158
- "Decidim::Ai::SpamDetection::Service"
159
+ Decidim::Env.new("DECIDIM_SPAM_DETECTION_USER_SERVICE", "Decidim::Ai::SpamDetection::Service").value
159
160
  end
160
161
 
161
162
  # this is the generic resource classifier class. If you need to change your own class, please change the
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  module Ai
5
5
  def self.version
6
- "0.30.2"
6
+ "0.31.0.rc1"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.2
4
+ version: 0.31.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandru-Emil Lupu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-09-23 00:00:00.000000000 Z
11
+ date: 2025-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: classifier-reborn
@@ -30,70 +30,70 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.30.2
33
+ version: 0.31.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.30.2
40
+ version: 0.31.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: decidim-debates
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.30.2
47
+ version: 0.31.0.rc1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.30.2
54
+ version: 0.31.0.rc1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: decidim-initiatives
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 0.30.2
61
+ version: 0.31.0.rc1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 0.30.2
68
+ version: 0.31.0.rc1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: decidim-meetings
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 0.30.2
75
+ version: 0.31.0.rc1
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 0.30.2
82
+ version: 0.31.0.rc1
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: decidim-proposals
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.30.2
89
+ version: 0.31.0.rc1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.30.2
96
+ version: 0.31.0.rc1
97
97
  description: A module that aims to provide Artificial Intelligence tools for Decidim.
98
98
  email:
99
99
  - contact@alecslupu.ro