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 +4 -4
- data/README.md +1 -1
- data/app/jobs/decidim/ai/spam_detection/generic_spam_analyzer_job.rb +9 -1
- data/lib/decidim/ai/engine.rb +0 -6
- data/lib/decidim/ai/language/language.rb +1 -1
- data/lib/decidim/ai/spam_detection/spam_detection.rb +16 -15
- data/lib/decidim/ai/version.rb +1 -1
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f168e99545bccfb435d2bb4e9675cbe676c77f205546273f35ed05a33e53cc85
|
4
|
+
data.tar.gz: 47b17958cee549fdf6131f56c4cc700a03493c136a846414e534b89a77ca47f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,
|
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(
|
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
|
data/lib/decidim/ai/engine.rb
CHANGED
@@ -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
|
|
@@ -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
|
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
|
-
|
147
|
-
|
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
|
data/lib/decidim/ai/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|