Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ tmp/
# Test results
/spec/examples.txt
/coverage/

/vendor/sensemaking-tools/
1 change: 1 addition & 0 deletions app/components/admin/settings/features_tab_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def settings
feature.graphql_api
feature.sdg
feature.machine_learning
feature.sensemaker
feature.remove_investments_supports
feature.gdpr.require_consent_for_notifications
feature.dashboard.notification_emails
Expand Down
50 changes: 50 additions & 0 deletions app/lib/sensemaker/paths.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
module Sensemaker
module Paths
def self.sensemaker_package_folder
if Rails.env.test?
Rails.root.join("tmp/sensemaker_test_folder/package")
else
Rails.root.join("node_modules/@cosla/sensemaking-tools")
end
end

def self.sensemaker_folder
if Rails.env.test?
Rails.root.join("tmp/sensemaker_test_folder")
else
Rails.root.join("vendor/sensemaking-tools")
end
end

def self.sensemaker_data_folder
if Rails.env.test?
Rails.root.join("tmp/sensemaker_test_folder/data")
else
Rails.root.join(Tenant.current_secrets.sensemaker_data_folder)
end
end

def self.visualization_folder
if Rails.env.test?
Rails.root.join("tmp/sensemaker_test_folder/web-ui")
else
Rails.root.join("node_modules/@cosla/sensemaking-web-ui")
end
end

def self.key_file
if Rails.env.test?
Rails.root.join("tmp/sensemaker_test_folder/default-service-account-key.json")
else
Rails.root.join(Tenant.current_secrets.sensemaker_key_file)
end
end

def self.parse_key_file
JSON.parse(File.read(key_file))
rescue JSON::ParserError, Errno::ENOENT => e
Rails.logger.error "Failed to parse key file: #{e.message}"
{}
end
end
end
1 change: 1 addition & 0 deletions app/models/setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ def defaults
"feature.remove_investments_supports": true,
"feature.cookies_consent": false,
"feature.gdpr.require_consent_for_notifications": false,
"feature.sensemaker": false,
"homepage.widgets.feeds.debates": true,
"homepage.widgets.feeds.processes": true,
"homepage.widgets.feeds.proposals": true,
Expand Down
31 changes: 30 additions & 1 deletion config/deploy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ def main_deploy_server

set :linked_files, %w[config/database.yml config/secrets.yml]
set :linked_dirs, %w[.bundle log tmp public/system public/assets
public/ckeditor_assets public/machine_learning/data storage]
public/ckeditor_assets public/machine_learning/data storage
vendor/sensemaking-tools]

set :keep_releases, 5

Expand Down Expand Up @@ -63,6 +64,8 @@ def main_deploy_server

set :whenever_roles, -> { :app }

set :setup_sensemaker, ENV["SETUP_SENSEMAKER"] == "true"

namespace :deploy do
after "rvm1:hook", "map_node_bins"

Expand All @@ -72,6 +75,9 @@ def main_deploy_server
after "deploy:migrate", "add_new_settings"

after :publishing, "setup_puma"

after :publishing, "setup_sensemaker"

after :finished, "refresh_sitemap"

desc "Deploys and runs the tasks needed to upgrade to a new release"
Expand Down Expand Up @@ -176,3 +182,26 @@ def main_deploy_server
after "setup_puma", "puma:install"
after "setup_puma", "puma:enable"
end

desc "Setup Sensemaker"
task :setup_sensemaker do
on roles(:app) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "sensemaker:setup" if fetch(:setup_sensemaker, false)
end
end
end
end

task :setup_delayed_job_environment do
on roles(fetch(:delayed_job_roles)) do
fnm_setup = fetch(:fnm_setup_command)
SSHKit.config.command_map.prefix[:bundle].unshift(-> { "#{fnm_setup} && EXECJS_RUNTIME='' " })
end
end

before "delayed_job:start", "setup_delayed_job_environment"
before "delayed_job:restart", "setup_delayed_job_environment"
before "delayed_job:stop", "setup_delayed_job_environment"
before "delayed_job:status", "setup_delayed_job_environment"
2 changes: 2 additions & 0 deletions config/locales/en/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ en:
community_description: "Enables the community section in the proposals and investment projects of the Participatory Budgets"
machine_learning: "AI / Machine learning"
machine_learning_description: "Enable the AI / Machine Learning section to run python scripts and enrich content automatically."
sensemaker: "Sensemaker"
sensemaker_description: "Enable Sensemaker integration to help make sense of large-scale conversations."
map: "Proposals and budget investments geolocation"
map_description: "Enables geolocation of proposals and investment projects"
allow_images: "Allow upload and show images"
Expand Down
2 changes: 2 additions & 0 deletions config/locales/es/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ es:
community_description: "Activa la sección de comunidad en las propuestas y en los proyectos de gasto de los Presupuestos participativos"
machine_learning: "IA / Machine learning"
machine_learning_description: "Habilita la sección de IA / Machine Learning para ejecutar scripts de python y enriquecer el contenido automáticamente."
sensemaker: "Sensemaker"
sensemaker_description: "Habilita la integración de Sensemaker para ayudar a analizar y comprender conversaciones a gran escala."
map: "Geolocalización de propuestas y proyectos de gasto"
map_description: "Activa la geolocalización de propuestas y proyectos de gasto"
allow_images: "Permitir subir y mostrar imágenes"
Expand Down
12 changes: 12 additions & 0 deletions config/secrets.yml.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
sensemaker: &sensemaker
sensemaker_data_folder: "vendor/sensemaking-tools/data"
# Path to the Google Cloud Service Account key file
# See: https://cloud.google.com/iam/docs/keys-create-delete
sensemaker_key_file: "vendor/sensemaking-tools/default-service-account-key.json"
sensemaker_model_name: "gemini-2.5-flash-lite"

llm: &llm
# Provide keys for the LLM providers you intend to use.
# consult RubyLLM https://rubyllm.com/configuration#global-configuration-rubyllmconfigure configuration for all supported providers and use the same key names here.
Expand Down Expand Up @@ -37,10 +44,12 @@ development:
# maximum_attempts: 20
# unlock_in: 1 # In hours
<<: *maps
<<: *sensemaker

test:
# time_zone: ""
<<: *maps
<<: *sensemaker

staging:
# secret_key_base: ""
Expand Down Expand Up @@ -103,6 +112,7 @@ staging:
oidc_issuer: ""
<<: *maps
<<: *apis
<<: *sensemaker

preproduction:
# secret_key_base: ""
Expand Down Expand Up @@ -165,6 +175,7 @@ preproduction:
oidc_issuer: ""
<<: *maps
<<: *apis
<<: *sensemaker

production:
# secret_key_base: ""
Expand Down Expand Up @@ -226,3 +237,4 @@ production:
oidc_issuer: ""
<<: *maps
<<: *apis
<<: *sensemaker
28 changes: 28 additions & 0 deletions lib/capistrano/tasks/sensemaker.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
namespace :sensemaker do
desc "Setup Sensemaking Tools on the remote server"
task :setup do
on roles(:app) do
within current_path do
execute :rake, "sensemaker:setup"
end
end
end

desc "Check Sensemaking Tools dependencies on the remote server"
task :check_dependencies do
on roles(:app) do
within current_path do
execute :rake, "sensemaker:check_dependencies"
end
end
end

desc "Verify Sensemaking Tools are installed and working correctly"
task :verify_installation do
on roles(:app) do
within current_path do
execute :rake, "sensemaker:verify"
end
end
end
end
Loading