# Dynamic settings the user can change within the app (helpful for self-hosting) class Setting < RailsSettings::Base class ValidationError < StandardError; end cache_prefix { "v1" } field :twelve_data_api_key, type: :string, default: ENV["TWELVE_DATA_API_KEY"] field :openai_access_token, type: :string, default: ENV["OPENAI_ACCESS_TOKEN"] field :openai_uri_base, type: :string, default: ENV["OPENAI_URI_BASE"] field :openai_model, type: :string, default: ENV["OPENAI_MODEL"] field :brand_fetch_client_id, type: :string, default: ENV["BRAND_FETCH_CLIENT_ID"] field :require_invite_for_signup, type: :boolean, default: false field :require_email_confirmation, type: :boolean, default: ENV.fetch("REQUIRE_EMAIL_CONFIRMATION", "true") == "true" # Validates OpenAI configuration requires model when custom URI base is set def self.validate_openai_config!(uri_base: nil, model: nil) # Use provided values or current settings uri_base_value = uri_base.nil? ? openai_uri_base : uri_base model_value = model.nil? ? openai_model : model # If custom URI base is set, model must also be set if uri_base_value.present? && model_value.blank? raise ValidationError, "OpenAI model is required when custom URI base is configured" end end end