Class: Jekyll::ClientSearch::Configuration

Inherits:
Object
  • Object
show all
Includes:
ConfigurationAccessors, EmbeddingConfiguration
Defined in:
lib/jekyll/client_search/configuration.rb

Overview

Reads the client_search section of the Jekyll site config and exposes validated, normalized values to the generator.

Constant Summary collapse

ENGINES =
%w[minisearch elasticlunr semantic].freeze
ENGINE_CDN_URLS =
{
  "minisearch" => "https://cdn.jsdelivr.net/npm/minisearch@7.2.0/dist/umd/index.min.js",
  "elasticlunr" => "https://cdn.jsdelivr.net/npm/elasticlunr@0.9.5/elasticlunr.min.js",
  "semantic" => nil
}.freeze
DEFAULTS =
{
  "enabled" => true,
  "engine" => "minisearch",
  "output" => "search-index.json",
  "collections" => ["posts"],
  "include_pages" => false,
  "copy_runtime" => true,
  "embedding" => {
    "enabled" => false,
    "model" => "embeddinggemma:300m",
    "base_url" => "http://localhost:11434",
    "connect_timeout" => 5,
    "read_timeout" => 120,
    "fail_on_error" => true,
    "query_embedder" => {
      "type" => "transformers"
    }
  }
}.freeze

Constants included from EmbeddingConfiguration

EmbeddingConfiguration::PREFIXES

Instance Method Summary collapse

Methods included from EmbeddingConfiguration

#embedding_base_url, #embedding_connect_timeout, #embedding_document_prefix, #embedding_enabled?, #embedding_fail_on_error?, #embedding_identity, #embedding_include_in_index?, #embedding_model, #embedding_query_prefix, #embedding_read_timeout

Methods included from ConfigurationAccessors

#live_search_config, #query_embedder_api_url, #query_embedder_asset, #query_embedder_assets, #query_embedder_config_json, #query_embedder_model, #query_embedder_type, #related_configuration, #related_enabled?, #related_output

Constructor Details

#initialize(site) ⇒ Configuration

Returns a new instance of Configuration.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/jekyll/client_search/configuration.rb', line 39

def initialize(site)
  configured = site.config["client_search"]
  configured = { "enabled" => false } if configured == false
  configured ||= {}
  unless configured.is_a?(Hash)
    raise Jekyll::Errors::FatalException,
          "client_search configuration must be a mapping or false"
  end

  @values = DEFAULTS.merge(configured)
  @live_search = LiveSearchConfiguration.new(configured["live_search"] || {}, engine: engine)
  @related = RelatedConfiguration.new(configured["related"] || {})
  merge_embedding_config(configured["embedding"])
  validate_engine!
  return unless embedding_enabled?

  validate_embedding!
  validate_query_embedder!
end

Instance Method Details

#collectionsObject



113
114
115
116
117
118
119
# File 'lib/jekyll/client_search/configuration.rb', line 113

def collections
  Array(@values["collections"])
    .compact
    .map(&:to_s)
    .reject(&:empty?)
    .uniq
end

#copy_runtime?Boolean

Returns:

  • (Boolean)


125
126
127
# File 'lib/jekyll/client_search/configuration.rb', line 125

def copy_runtime?
  @values["copy_runtime"] != false
end

#enabled?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/jekyll/client_search/configuration.rb', line 82

def enabled?
  @values["enabled"] != false
end

#engineObject



86
87
88
# File 'lib/jekyll/client_search/configuration.rb', line 86

def engine
  @values.fetch("engine").to_s
end

#engine_crossoriginObject



98
99
100
# File 'lib/jekyll/client_search/configuration.rb', line 98

def engine_crossorigin
  @values.fetch("engine_crossorigin", nil)
end

#engine_sriObject



94
95
96
# File 'lib/jekyll/client_search/configuration.rb', line 94

def engine_sri
  @values.fetch("engine_sri", nil)
end

#engine_urlObject



90
91
92
# File 'lib/jekyll/client_search/configuration.rb', line 90

def engine_url
  @values.key?("engine_url") ? @values.fetch("engine_url") : ENGINE_CDN_URLS.fetch(engine)
end

#include_pages?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'lib/jekyll/client_search/configuration.rb', line 121

def include_pages?
  @values["include_pages"] == true
end

#outputObject



109
110
111
# File 'lib/jekyll/client_search/configuration.rb', line 109

def output
  normalize_output(@values.fetch("output"))
end

#runtime_assetsObject



102
103
104
105
106
107
# File 'lib/jekyll/client_search/configuration.rb', line 102

def runtime_assets
  assets = ["assets/client-search-base.js", "assets/adapters/#{engine}.js"]
  assets.concat(query_embedder_assets) if engine == "semantic" && embedding_enabled?
  assets << "assets/client-search-related.js" if related_enabled?
  assets
end