Class: Jekyll::ClientSearch::Configuration
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
EmbeddingConfiguration::PREFIXES
Instance Method Summary
collapse
#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
#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
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
#collections ⇒ Object
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
125
126
127
|
# File 'lib/jekyll/client_search/configuration.rb', line 125
def copy_runtime?
@values["copy_runtime"] != false
end
|
#enabled? ⇒ Boolean
82
83
84
|
# File 'lib/jekyll/client_search/configuration.rb', line 82
def enabled?
@values["enabled"] != false
end
|
#engine ⇒ Object
86
87
88
|
# File 'lib/jekyll/client_search/configuration.rb', line 86
def engine
@values.fetch("engine").to_s
end
|
#engine_crossorigin ⇒ Object
98
99
100
|
# File 'lib/jekyll/client_search/configuration.rb', line 98
def engine_crossorigin
@values.fetch("engine_crossorigin", nil)
end
|
#engine_sri ⇒ Object
94
95
96
|
# File 'lib/jekyll/client_search/configuration.rb', line 94
def engine_sri
@values.fetch("engine_sri", nil)
end
|
#engine_url ⇒ Object
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
121
122
123
|
# File 'lib/jekyll/client_search/configuration.rb', line 121
def include_pages?
@values["include_pages"] == true
end
|
#output ⇒ Object
109
110
111
|
# File 'lib/jekyll/client_search/configuration.rb', line 109
def output
normalize_output(@values.fetch("output"))
end
|
#runtime_assets ⇒ Object
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
|