Class: Jekyll::ClientSearch::QueryEmbedderConfiguration
- Inherits:
-
Object
- Object
- Jekyll::ClientSearch::QueryEmbedderConfiguration
- Defined in:
- lib/jekyll/client_search/query_embedder_configuration.rb
Overview
Normalizes browser query-embedder settings.
Constant Summary collapse
- TYPES =
%w[transformers ollama_api none].freeze
- MODEL_MAP =
{ "embeddinggemma:300m" => "onnx-community/embeddinggemma-300m-ONNX", "all-minilm" => "Xenova/all-MiniLM-L6-v2" }.freeze
- DEFAULT_LIBRARY_URL =
"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.8.1"- DEFAULTS =
{ "type" => "transformers", "library_url" => DEFAULT_LIBRARY_URL, "dtype" => "q8", "worker" => true, "timeout_ms" => 300_000, "retry_attempts" => 1, "max_tokens" => 512 }.freeze
- JSON_KEYS =
{ "library_url" => "libraryUrl", "model_base_url" => "modelBaseUrl", "wasm_base_url" => "wasmBaseUrl", "worker_url" => "workerUrl", "device" => "device", "dtype" => "dtype", "worker" => "worker", "timeout_ms" => "timeoutMs", "retry_attempts" => "retryAttempts", "max_tokens" => "maxTokens" }.freeze
Instance Method Summary collapse
- #api_url ⇒ Object
- #asset ⇒ Object
- #assets ⇒ Object
-
#initialize(config, build_model:, build_base_url:, query_prefix:) ⇒ QueryEmbedderConfiguration
constructor
A new instance of QueryEmbedderConfiguration.
- #model ⇒ Object
- #to_json ⇒ Object
- #type ⇒ Object
Constructor Details
#initialize(config, build_model:, build_base_url:, query_prefix:) ⇒ QueryEmbedderConfiguration
Returns a new instance of QueryEmbedderConfiguration.
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 39 def initialize(config, build_model:, build_base_url:, query_prefix:) unless config.is_a?(Hash) raise Jekyll::Errors::FatalException, "client_search embedding.query_embedder configuration must be a mapping" end @values = DEFAULTS.merge(config) @values["timeout_ms"] = 30_000 if @values["type"] == "ollama_api" && !config.key?("timeout_ms") @build_model = build_model @build_base_url = build_base_url @query_prefix = query_prefix validate! end |
Instance Method Details
#api_url ⇒ Object
66 67 68 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 66 def api_url @values.fetch("api_url", "#{@build_base_url}/api/embed") end |
#asset ⇒ Object
83 84 85 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 83 def asset assets.first end |
#assets ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 70 def assets case type when "transformers" files = ["assets/query-embedders/transformers.js"] files << "assets/query-embedders/transformers-worker.js" if @values["worker"] files when "ollama_api" ["assets/query-embedders/ollama-api.js"] else [] end end |
#model ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 57 def model return @values.fetch("model") if @values.key?("model") return @build_model unless type == "transformers" return MODEL_MAP.fetch(@build_model) if MODEL_MAP.key?(@build_model) raise Jekyll::Errors::FatalException, "embedding query_embedder.model is required for #{@build_model.inspect}" end |
#to_json ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 87 def to_json(*) config = { "type" => type, "model" => model, "apiUrl" => api_url, "buildModel" => @build_model, "queryPrefix" => @query_prefix } JSON_KEYS.each do |source, target| config[target] = @values[source] if @values.key?(source) end config.to_json end |
#type ⇒ Object
53 54 55 |
# File 'lib/jekyll/client_search/query_embedder_configuration.rb', line 53 def type @values.fetch("type") end |