Class: Admin::EmbeddingsController
- Inherits:
-
CrmController
- Object
- ActionController::Base
- ApplicationController
- CrmController
- Admin::EmbeddingsController
- Defined in:
- app/controllers/admin/embeddings_controller.rb
Overview
Admin controller for managing content embeddings and semantic search.
Provides tools for viewing embedding statistics, triggering batch generation,
refreshing stale embeddings, searching the embedding database, and managing
embedding lifecycle (cleanup, regeneration).
Constant Summary collapse
- EMBEDDABLE_TYPES =
Base embeddable types (Item split into subtypes below)
%w[Post Article Showcase Video Image SiteMap ReviewsIo Item ProductLine CallRecord Activity Communication AssistantBrainEntry].freeze
- ITEM_SUBTYPES =
Item subtypes for distinguishing publications from regular items
{ 'publication' => 'Publication (PDF)', 'product' => 'Product (Regular Item)' }.freeze
- ARTICLE_SUBTYPES =
Article subtypes.
{ 'ArticleFaq' => 'FAQ', 'ArticleTechnical' => 'Technical', 'ArticleTraining' => 'Training', 'ArticleProcedure' => 'Procedure' }.freeze
Constants included from Controllers::ReferenceFindable
Controllers::ReferenceFindable::ID_EMBEDDED_PATTERNS
Constants included from Controllers::AnalyticsEvents
Controllers::AnalyticsEvents::MAX_QUEUED_EVENTS, Controllers::AnalyticsEvents::SESSION_KEY
Constants included from Controllers::ErrorRendering
Controllers::ErrorRendering::NON_CONTENT_PATH_PREFIXES
Instance Method Summary collapse
-
#cleanup ⇒ void
Triggers cleanup of orphan embeddings.
-
#generate ⇒ void
Queues batch embedding generation for a specific record type.
-
#generate_one ⇒ void
Generates an embedding for a single record.
-
#index ⇒ void
Renders the embeddings index page with coverage statistics and recent embeddings.
-
#refresh ⇒ void
Triggers a refresh of stale embeddings.
-
#search ⇒ void
Renders the semantic/hybrid search results page.
Methods inherited from CrmController
#access_denied, #context_id, #context_object, #crm_home_path, #current_ability, #default_url_options, #download_temp, #get_tempfile_path_for_download, #init_status_job_collector, #initialize_crm_lazy_chunks, #persist_enqueued_status_jobs, #record_not_found, #redirect_to_job_or_fallback, #render_edit_action, #set_context, #set_download_path, #stash_file_for_temp_download, #sync_admin_presence_cookie, #touch_employee_last_seen
Methods inherited from ApplicationController
#account_impersonated?, #add_to_flash, #after_sign_in_path_for, #bypass_forgery_protection?, #chat_enabled?, #cloudflare_cleared?, #default_catalog, #default_url_options, #enable_turbo_frames, #find_publication, #fix_invalid_accept_header, #init_js_utils, #is_globals_call?, #layout_by_resource, #locale_store, #redirect_to, #require_employee_for_crm, #set_base_host, #set_real_ip, #set_report_errors_for, #should_render_layout?, #skip_layout_for_turbo_frame?, #stamp_impersonation_context, #tab_frame_breakout_request?, #warmlyyours_canada_ip?, #warmlyyours_ip?, #y
Methods included from Controllers::ReturnPathHandling
#check_for_return_path, #redirect_to_return_path_or_default
Methods included from Controllers::AnalyticsEvents
#consume_queued_analytics_events, #registration_lead_type, #track_event
Methods included from Controllers::DeviceDetection
Methods included from Controllers::SubdomainDetection
#is_crm_request?, #is_www_request?, #json_request?
Methods included from Controllers::TurboSafeRedirect
Methods included from Controllers::TrackingDetection
#bot_request?, #gdpr_country?, #gdpr_country_data, #prevent_bots, #set_tracking_cookie, #track_visitor?
Methods included from Controllers::AcceleratedFileSending
#send_file_accelerated, #send_upload_accelerated
Methods included from Controllers::ErrorRendering
#excp_string, #mail_to_for_error_reporting, #render_400, #render_404, #render_406, #render_410, #render_500, #render_invalid_authenticity_token, #render_ip_spoof_error, #render_unpermitted_parameters, #safe_referer_or_fallback
Methods included from Controllers::TurnstileVerification
#load_turnstile_script_tag, #turnstile_lazy_widget, #turnstile_script_tag, #turnstile_widget, #validate_turnstile!
Methods included from Controllers::CloudflareCaching
edge_cached, #edge_cached_action?, #reset_cloudflare_cache, #set_cloudflare_cache, #skip_edge_cache!, #skip_session
Methods included from Controllers::Webpackable
#preload_webpack_fonts, #webpack_css_include, #webpack_css_url, #webpack_js_include, #wpd_is_running?
Methods included from Controllers::Localizable
#cloudflare_country_locale, #determine_request_locale, #geocoder_locale, #guest_user_locale_check, #locale_optional_www_auth_path?, #param_locale, #set_locale, #set_request_locale, #skip_localization?, #warmlyyours_ip_locale
Methods included from Controllers::Authenticable
#access_denied, #authenticate_account, #authenticate_account!, #authenticate_account_from_login_token!, #check_is_a_manager, #check_is_a_sales_manager, #check_is_an_admin, #check_is_an_employee, #check_party, #clear_mismatched_guest_user, #create_guest_user, #credentials?, #current_or_guest_user, #current_or_guest_user_id_read_only, #current_user, #devise_mapping, #fully_logged_in?, #generate_bot_id, #guest_user, #identifiable?, #init_current_user, #initialize_guest, #load_context_user, #logging_in, #resource, #resource_name, #restrict_access_for_non_employees, #scrubbed_request_path, #user_object, #warn_on_session_guest_id_leak
Methods included from UrlsHelper
#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?
Instance Method Details
#cleanup ⇒ void
This method returns an undefined value.
Triggers cleanup of orphan embeddings.
Removes embeddings for records that are unpublished, inactive, or deleted.
96 97 98 99 100 |
# File 'app/controllers/admin/embeddings_controller.rb', line 96 def cleanup ServiceRunner.perform_async('Maintenance::EmbeddingOrphanCleanup') flash[:info] = 'Orphan embedding cleanup has been queued' redirect_to end |
#generate ⇒ void
This method returns an undefined value.
Queues batch embedding generation for a specific record type.
Enqueues EmbeddingBatchQueueWorker to generate embeddings for all records of the
specified type. Supports article subtypes (FAQ, Technical, etc.) and image fingerprints.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'app/controllers/admin/embeddings_controller.rb', line 59 def generate type = generate_params[:type] if ARTICLE_SUBTYPES.key?(type) EmbeddingBatchQueueWorker.perform_async('Article', article_type: type) flash[:info] = "Queued batch worker for #{ARTICLE_SUBTYPES[type]} articles. Check Sidekiq for progress." elsif EMBEDDABLE_TYPES.include?(type) EmbeddingBatchQueueWorker.perform_async(type) flash[:info] = "Queued batch worker for #{type} records. Check Sidekiq for progress." elsif type == 'ImageFingerprints' # pHash fingerprint generation (separate from full analysis) EmbeddingBatchQueueWorker.perform_async(type) flash[:info] = 'Queued batch worker for pHash fingerprints. Check Sidekiq for progress.' else flash[:error] = "Invalid type: #{type}" end redirect_to end |
#generate_one ⇒ void
This method returns an undefined value.
Generates an embedding for a single record.
Accepts a record type and ID, and queues EmbeddingWorker to generate or
regenerate the embedding with forced refresh.
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'app/controllers/admin/embeddings_controller.rb', line 108 def generate_one permitted = generate_one_params type = permitted[:type] id = permitted[:id] unless EMBEDDABLE_TYPES.include?(type) flash[:error] = "Invalid type: #{type}" redirect_to and return end EmbeddingWorker.perform_async(type, id.to_i, force: true) flash[:info] = "Queued #{type}##{id} for embedding generation" redirect_to end |
#index ⇒ void
This method returns an undefined value.
Renders the embeddings index page with coverage statistics and recent embeddings.
31 32 33 34 |
# File 'app/controllers/admin/embeddings_controller.rb', line 31 def index @stats = build_stats @recent_embeddings = ContentEmbedding.order(updated_at: :desc).limit(10).includes(:embeddable) end |
#refresh ⇒ void
This method returns an undefined value.
Triggers a refresh of stale embeddings.
Queues EmbeddingRefreshWorker to scan and refresh any embeddings that are stale
or need updating.
85 86 87 88 89 |
# File 'app/controllers/admin/embeddings_controller.rb', line 85 def refresh EmbeddingRefreshWorker.perform_async flash[:info] = 'Embedding refresh worker has been queued' redirect_to end |
#search ⇒ void
This method returns an undefined value.
Renders the semantic/hybrid search results page.
Performs hybrid or semantic search against the embedding database using user-supplied
query and optional type/similarity filters. Supports both vector similarity and full-text.
42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/admin/embeddings_controller.rb', line 42 def search permitted = search_params @query = permitted[:query] @types = permitted[:types].presence @limit = (permitted[:limit] || 10).to_i.clamp(1, 50) @use_hybrid = permitted[:hybrid] != '0' @min_similarity = (permitted[:min_similarity] || 0).to_f.clamp(0, 1) @results = perform_search if @query.present? end |