From 4ef2f7a77762a22cb9b37b51a1eae6d0366c9ad1 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Tue, 27 Jan 2026 09:29:48 +0100 Subject: [PATCH 01/14] Revert "Update issue templates" This reverts commit 5a37ad4ec305839938b64b6d24b6c17b1bbea5d2. --- .github/ISSUE_TEMPLATE/bug_report.md | 5 +---- .github/ISSUE_TEMPLATE/tracking.md | 10 ---------- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/tracking.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b6d4f76cdb..603022c243 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,9 +1,6 @@ --- name: Bug report about: Create a report to help us improve -title: '' -labels: '' -assignees: '' --- @@ -34,4 +31,4 @@ If applicable, add the error stacktrace to help explain your problem. - Decidim installation: [e.g. Metadecidim] **Additional context** -Add any other context about the problem here. For instance, add Metadecidim link. +Add any other context about the problem here. For instance, add Metadecidim link. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/tracking.md b/.github/ISSUE_TEMPLATE/tracking.md deleted file mode 100644 index dd085525ea..0000000000 --- a/.github/ISSUE_TEMPLATE/tracking.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Tracking -about: carte de suivi thématique -title: "[tracking]" -labels: '' -assignees: '' - ---- - - From 740885c72dc2782631b6abaf1103e4b128077909 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Fri, 13 Feb 2026 16:31:22 +0100 Subject: [PATCH 02/14] add condition --- .../decidim/ai/spam_detection/spam_digest_generator_job.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb b/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb index a6251d5fdb..9ef9dbcf24 100644 --- a/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb +++ b/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb @@ -14,6 +14,9 @@ class SpamDigestGeneratorJob < ApplicationJob }.freeze def perform(frequency) + # Stop if Decidim-AI is disabled + return unless Rails.application.secrets.dig(:decidim, :ai, :enabled) + # Skip validation if frequency is nil (called by Decidim core specs) return if frequency.nil? && Rails.env.test? raise ArgumentError, "Invalid frequency: #{frequency}" unless frequency && FREQUENCIES.has_key?(frequency.to_sym) From 23548e702301d0c5432c7572c46d01ad030fd125 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 16 Feb 2026 14:36:39 +0100 Subject: [PATCH 03/14] add condition in a method decidim_ai_disabled? --- .../decidim/ai/spam_detection/spam_digest_generator_job.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb b/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb index 9ef9dbcf24..58cdaac7f9 100644 --- a/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb +++ b/app/jobs/decidim/ai/spam_detection/spam_digest_generator_job.rb @@ -15,7 +15,7 @@ class SpamDigestGeneratorJob < ApplicationJob def perform(frequency) # Stop if Decidim-AI is disabled - return unless Rails.application.secrets.dig(:decidim, :ai, :enabled) + return unless decidim_ai_enabled? # Skip validation if frequency is nil (called by Decidim core specs) return if frequency.nil? && Rails.env.test? @@ -40,6 +40,10 @@ def perform(frequency) private + def decidim_ai_enabled? + Rails.application.secrets.dig(:decidim, :ai, :enabled) == true + end + # Counts the spam reports for the given organization and frequency (daily/weekly) def count_spam(organization, frequency) since = frequency == :weekly ? 1.week.ago : 1.day.ago From fd59917f626cb7014857f77d774f3c5d15be1bc4 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Thu, 19 Feb 2026 13:35:53 +0100 Subject: [PATCH 04/14] update default flag of decidim_ai to false --- .env-example | 6 +++--- config/secrets.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.env-example b/.env-example index 3efc530ff4..764455ec48 100644 --- a/.env-example +++ b/.env-example @@ -50,9 +50,9 @@ GEOCODER_UNITS=km # Units for geocoder results (e.g., km or m # DECIDIM_CLEANER_DELETE_DELETED_AUTHORIZATIONS_DATA= #= Decidim AI -# DECIDIM_AI_ENABLED="true" Default: true -# DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="true" Default: true -# DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="true" Default: true +# DECIDIM_AI_ENABLED="false" Default: false +# DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="false" Default: false +# DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="false" Default: false # DECIDIM_AI_ENDPOINT="https://" # DECIDIM_AI_BASIC_AUTH=":" Required for the AI Request Handler # DECIDIM_AI_REPORTING_USER_EMAIL="" diff --git a/config/secrets.yml b/config/secrets.yml index c0479a2f82..01ecc46ac2 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -52,9 +52,9 @@ decidim_default: &decidim_default repetition_times: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i %> strong: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).to_boolean_string %> ai: - enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", true).to_boolean_string %> - user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> - generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> + enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", false).to_boolean_string %> + user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", false).to_boolean_string %> + generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", false).to_boolean_string %> endpoint: <%= Decidim::Env.new("DECIDIM_AI_ENDPOINT").to_s %> secret: <%= Decidim::Env.new("DECIDIM_AI_SECRET").to_s %> basic_auth: <%= Decidim::Env.new("DECIDIM_AI_BASIC_AUTH").to_s %> From 3477cca2873d42b8211ba9b9b410fc044afd0dd8 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Thu, 19 Feb 2026 18:23:13 +0100 Subject: [PATCH 05/14] update default value and delete decidim_ai reference in text mail --- .env-example | 4 ++-- config/locales/en.yml | 4 ++-- config/locales/fr.yml | 2 +- config/secrets.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.env-example b/.env-example index 764455ec48..f8cb29dbe2 100644 --- a/.env-example +++ b/.env-example @@ -51,8 +51,8 @@ GEOCODER_UNITS=km # Units for geocoder results (e.g., km or m #= Decidim AI # DECIDIM_AI_ENABLED="false" Default: false -# DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="false" Default: false -# DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="false" Default: false +# DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="true" Default: true +# DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="true" Default: true # DECIDIM_AI_ENDPOINT="https://" # DECIDIM_AI_BASIC_AUTH=":" Required for the AI Request Handler # DECIDIM_AI_REPORTING_USER_EMAIL="" diff --git a/config/locales/en.yml b/config/locales/en.yml index c3eaaf25de..dc0d31831e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -58,9 +58,9 @@ en: frequency_label: daily: today weekly: this week - subject: AI spam detection summary - %{count} spam items detected (%{frequency_label}) + subject: Reports summary - %{count} spam (%{frequency_label}) summary: |- - AI anti-spam summary for %{organization}: %{count} items were automatically flagged %{frequency_label} by the Decidim AI system.

+ Reports summary for %{organization}: %{count} items were flagged %{frequency_label}.

View detected spams. authorization_handlers: data_authorization_handler: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index de319c03ae..1b95e2180c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -68,7 +68,7 @@ fr: weekly: cette semaine subject: Résumé anti-spam, %{count} spams détectés (%{frequency_label}) summary: |- - Résumé IA anti-spam pour %{organization} : %{count} contenus ont été automatiquement signalés %{frequency_label} par le système Decidim AI.

+ Résumé anti-spam pour %{organization} : %{count} contenus ont été signalés %{frequency_label}.

Voir les spams détectés. authorization_handlers: data_authorization_handler: diff --git a/config/secrets.yml b/config/secrets.yml index 01ecc46ac2..f064c2f871 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -53,8 +53,8 @@ decidim_default: &decidim_default strong: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).to_boolean_string %> ai: enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", false).to_boolean_string %> - user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", false).to_boolean_string %> - generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", false).to_boolean_string %> + user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> + generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> endpoint: <%= Decidim::Env.new("DECIDIM_AI_ENDPOINT").to_s %> secret: <%= Decidim::Env.new("DECIDIM_AI_SECRET").to_s %> basic_auth: <%= Decidim::Env.new("DECIDIM_AI_BASIC_AUTH").to_s %> From d9e0dcd1e3acd1354ba8e5f6fcb08763a58130c9 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 23 Feb 2026 12:09:30 +0100 Subject: [PATCH 06/14] debug CI, search clue --- config/initializers/decidim_ai.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index 5088274deb..46aba68fe1 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -1,5 +1,11 @@ # frozen_string_literal: true +Rails.logger.warn " DEBUG AI INIT " +Rails.logger.warn "ENV DECIDIM_AI_ENABLED: #{ENV['DECIDIM_AI_ENABLED'].inspect}" +Rails.logger.warn "Secrets decidim.ai.enabled: #{Rails.application.secrets.dig(:decidim, :ai, :enabled).inspect}" +Rails.logger.warn "Rails.env: #{Rails.env}" +Rails.logger.warn "=======================" + # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) From 2d94c628d7d70950478d489e462e585e1a37e47e Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 23 Feb 2026 13:01:15 +0100 Subject: [PATCH 07/14] fix CI by disabled Redis for Decidim_Ai in test --- config/environments/test.rb | 4 ++++ config/initializers/decidim_ai.rb | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/config/environments/test.rb b/config/environments/test.rb index a853644ce4..01ad53bd67 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true +# Disable Redis backend for Decidim AI in test +ENV['DECIDIM_SPAM_DETECTION_BACKEND_USER'] ||= 'memory' +ENV['DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE'] ||= 'memory' + require "active_support/core_ext/integer/time" # The test environment is used exclusively to run your application's diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index 46aba68fe1..5088274deb 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -1,11 +1,5 @@ # frozen_string_literal: true -Rails.logger.warn " DEBUG AI INIT " -Rails.logger.warn "ENV DECIDIM_AI_ENABLED: #{ENV['DECIDIM_AI_ENABLED'].inspect}" -Rails.logger.warn "Secrets decidim.ai.enabled: #{Rails.application.secrets.dig(:decidim, :ai, :enabled).inspect}" -Rails.logger.warn "Rails.env: #{Rails.env}" -Rails.logger.warn "=======================" - # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) From b8440e024d828975a37c687fac775fd3528f9f78 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 23 Feb 2026 14:33:56 +0100 Subject: [PATCH 08/14] initialize decidim_ai_enabled to false before secrets --- config/environments/test.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/environments/test.rb b/config/environments/test.rb index 01ad53bd67..4c12d16d32 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,8 +1,10 @@ # frozen_string_literal: true +ENV["DECIDIM_AI_ENABLED"] ||= "false" + # Disable Redis backend for Decidim AI in test -ENV['DECIDIM_SPAM_DETECTION_BACKEND_USER'] ||= 'memory' -ENV['DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE'] ||= 'memory' +ENV["DECIDIM_SPAM_DETECTION_BACKEND_USER"] ||= "memory" +ENV["DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE"] ||= "memory" require "active_support/core_ext/integer/time" From 8390c1894e2e0b44528fcdc684a490be6c8c35ed Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 23 Feb 2026 14:41:13 +0100 Subject: [PATCH 09/14] fix CI --- config/initializers/decidim_ai.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index 5088274deb..40a5a87902 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -2,7 +2,7 @@ # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. -if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) +if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) && !ENV["CI"] if Rails.application.secrets.dig(:decidim, :ai, :endpoint).blank? || Rails.application.secrets.dig(:decidim, :ai, :basic_auth).blank? Rails.logger.warn "[decidim-ai] Initializer - AI endpoint or secret not configured. AI features will be disabled." From a852d60092b5194527357afc1afd085ac1f93eb6 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Mon, 23 Feb 2026 15:11:05 +0100 Subject: [PATCH 10/14] fix CI --- config/application.rb | 12 ++++++++++++ config/environments/test.rb | 6 ------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/config/application.rb b/config/application.rb index 16b8fd27f2..6b21fd09a1 100644 --- a/config/application.rb +++ b/config/application.rb @@ -2,6 +2,12 @@ require_relative "boot" +ENV["DECIDIM_AI_ENABLED"] ||= "false" + +# Disable Redis backend for Decidim AI in test +ENV["DECIDIM_SPAM_DETECTION_BACKEND_USER"] ||= "memory" +ENV["DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE"] ||= "memory" + require "decidim/rails" require "action_cable/engine" @@ -9,6 +15,12 @@ module DecidimApp class Application < Rails::Application + config.before_initialize do + if ENV["CI"] + Decidim::Ai::SpamDetection.resource_analyzers = [] + Decidim::Ai::SpamDetection.user_analyzers = [] + end + end config.load_defaults 7.0 require "decidim_app/omniauth/configurator" diff --git a/config/environments/test.rb b/config/environments/test.rb index 4c12d16d32..a853644ce4 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,11 +1,5 @@ # frozen_string_literal: true -ENV["DECIDIM_AI_ENABLED"] ||= "false" - -# Disable Redis backend for Decidim AI in test -ENV["DECIDIM_SPAM_DETECTION_BACKEND_USER"] ||= "memory" -ENV["DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE"] ||= "memory" - require "active_support/core_ext/integer/time" # The test environment is used exclusively to run your application's From a86f118c9cf8e38b176d9a3af5bb607684069e81 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Tue, 24 Feb 2026 12:15:16 +0100 Subject: [PATCH 11/14] test CI --- .env-example | 2 +- config/secrets.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env-example b/.env-example index f8cb29dbe2..3efc530ff4 100644 --- a/.env-example +++ b/.env-example @@ -50,7 +50,7 @@ GEOCODER_UNITS=km # Units for geocoder results (e.g., km or m # DECIDIM_CLEANER_DELETE_DELETED_AUTHORIZATIONS_DATA= #= Decidim AI -# DECIDIM_AI_ENABLED="false" Default: false +# DECIDIM_AI_ENABLED="true" Default: true # DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="true" Default: true # DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="true" Default: true # DECIDIM_AI_ENDPOINT="https://" diff --git a/config/secrets.yml b/config/secrets.yml index f064c2f871..c0479a2f82 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -52,7 +52,7 @@ decidim_default: &decidim_default repetition_times: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i %> strong: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).to_boolean_string %> ai: - enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", false).to_boolean_string %> + enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", true).to_boolean_string %> user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> endpoint: <%= Decidim::Env.new("DECIDIM_AI_ENDPOINT").to_s %> From b1cf7cd57ffb38a46bfc29a347005b61351e5c9a Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Tue, 24 Feb 2026 12:32:52 +0100 Subject: [PATCH 12/14] add config analyzer in first place --- .env-example | 2 +- config/initializers/decidim_ai.rb | 14 +++++++++++++- config/secrets.yml | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.env-example b/.env-example index 3efc530ff4..f8cb29dbe2 100644 --- a/.env-example +++ b/.env-example @@ -50,7 +50,7 @@ GEOCODER_UNITS=km # Units for geocoder results (e.g., km or m # DECIDIM_CLEANER_DELETE_DELETED_AUTHORIZATIONS_DATA= #= Decidim AI -# DECIDIM_AI_ENABLED="true" Default: true +# DECIDIM_AI_ENABLED="false" Default: false # DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED="true" Default: true # DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED="true" Default: true # DECIDIM_AI_ENDPOINT="https://" diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index 40a5a87902..409de270ac 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -1,8 +1,20 @@ # frozen_string_literal: true +analyzers = [ + { + name: :bayes, + strategy: Decidim::Ai::SpamDetection::Strategy::Bayes, + options: { + adapter: "memory" + } + } +] +Decidim::Ai::SpamDetection.resource_analyzers = analyzers +Decidim::Ai::SpamDetection.user_analyzers = analyzers +return # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. -if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) && !ENV["CI"] +if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) if Rails.application.secrets.dig(:decidim, :ai, :endpoint).blank? || Rails.application.secrets.dig(:decidim, :ai, :basic_auth).blank? Rails.logger.warn "[decidim-ai] Initializer - AI endpoint or secret not configured. AI features will be disabled." diff --git a/config/secrets.yml b/config/secrets.yml index c0479a2f82..f064c2f871 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -52,7 +52,7 @@ decidim_default: &decidim_default repetition_times: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i %> strong: <%= Decidim::Env.new("DECIDIM_ADMIN_PASSWORD_STRONG", true).to_boolean_string %> ai: - enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", true).to_boolean_string %> + enabled: <%= Decidim::Env.new("DECIDIM_AI_ENABLED", false).to_boolean_string %> user_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_USER_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> generic_spam_analyzer_enabled: <%= Decidim::Env.new("DECIDIM_AI_GENERIC_SPAM_ANALYZER_ENABLED", true).to_boolean_string %> endpoint: <%= Decidim::Env.new("DECIDIM_AI_ENDPOINT").to_s %> From 290cbf4205574b336d22c8eb9971d0e764e5e98e Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Tue, 24 Feb 2026 13:50:14 +0100 Subject: [PATCH 13/14] clean --- config/application.rb | 12 ------------ config/initializers/decidim_ai.rb | 2 +- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/config/application.rb b/config/application.rb index 6b21fd09a1..16b8fd27f2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -2,12 +2,6 @@ require_relative "boot" -ENV["DECIDIM_AI_ENABLED"] ||= "false" - -# Disable Redis backend for Decidim AI in test -ENV["DECIDIM_SPAM_DETECTION_BACKEND_USER"] ||= "memory" -ENV["DECIDIM_SPAM_DETECTION_BACKEND_RESOURCE"] ||= "memory" - require "decidim/rails" require "action_cable/engine" @@ -15,12 +9,6 @@ module DecidimApp class Application < Rails::Application - config.before_initialize do - if ENV["CI"] - Decidim::Ai::SpamDetection.resource_analyzers = [] - Decidim::Ai::SpamDetection.user_analyzers = [] - end - end config.load_defaults 7.0 require "decidim_app/omniauth/configurator" diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index 409de270ac..f3c752b772 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + analyzers = [ { name: :bayes, @@ -11,7 +12,6 @@ Decidim::Ai::SpamDetection.resource_analyzers = analyzers Decidim::Ai::SpamDetection.user_analyzers = analyzers -return # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) From dd8e75c49abaae623298604f0648f092d9fd31c1 Mon Sep 17 00:00:00 2001 From: barbara oliveira Date: Tue, 24 Feb 2026 14:09:01 +0100 Subject: [PATCH 14/14] refacto --- config/initializers/decidim_ai.rb | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/config/initializers/decidim_ai.rb b/config/initializers/decidim_ai.rb index f3c752b772..07df908537 100644 --- a/config/initializers/decidim_ai.rb +++ b/config/initializers/decidim_ai.rb @@ -1,17 +1,5 @@ # frozen_string_literal: true -analyzers = [ - { - name: :bayes, - strategy: Decidim::Ai::SpamDetection::Strategy::Bayes, - options: { - adapter: "memory" - } - } -] -Decidim::Ai::SpamDetection.resource_analyzers = analyzers -Decidim::Ai::SpamDetection.user_analyzers = analyzers - # This file is a Decidim initializer for the AI module. # It configures the Third Party AI provider. if Decidim.module_installed?(:ai) && Rails.application.secrets.dig(:decidim, :ai, :enabled) @@ -77,6 +65,17 @@ Decidim::Ai::SpamDetection.user_spam_analyzer_job = "Decidim::Ai::SpamDetection::ThirdParty::UserSpamAnalyzerJob" Decidim::Ai::SpamDetection.generic_spam_analyzer_job = "Decidim::Ai::SpamDetection::ThirdParty::GenericSpamAnalyzerJob" else + analyzers = [ + { + name: :bayes, + strategy: Decidim::Ai::SpamDetection::Strategy::Bayes, + options: { + adapter: "memory" + } + } + ] + Decidim::Ai::SpamDetection.resource_analyzers = analyzers + Decidim::Ai::SpamDetection.user_analyzers = analyzers Rails.logger.warn "[decidim-ai] Initializer - AI module is not installed or spam detection is disabled. AI features will be disabled." Rails.logger.warn "[decidim-ai] Initializer - Spam detection enabled: #{Rails.application.secrets.dig(:decidim, :ai, :spam_detection, :enabled).presence || false}" end