Module: Rogalik::Plugins::GeminiEmbeddings::EmbeddingsMethods
- Defined in:
- lib/rogalik/plugins/gemini_embeddings.rb
Instance Attribute Summary collapse
-
#api_key ⇒ String
readonly
Gemini API key.
-
#base_url ⇒ String
readonly
Base URL for the Gemini API.
-
#model ⇒ String
readonly
Embedding model name.
Instance Method Summary collapse
-
#client ⇒ Faraday::Connection
Returns a memoized Faraday client configured for the Gemini API.
-
#embed_documents(documents) ⇒ Array<Pipeline::Document>
Generates embeddings for each document and assigns them in place.
-
#embed_text(text) ⇒ Array<Float>
Generates an embedding vector for a single string.
- #initialize(config: Rogalik.configuration.embeddings) ⇒ Object
Instance Attribute Details
#api_key ⇒ String (readonly)
Returns Gemini API key.
14 15 16 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 14 def api_key @api_key end |
#base_url ⇒ String (readonly)
Returns base URL for the Gemini API.
20 21 22 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 20 def base_url @base_url end |
#model ⇒ String (readonly)
Returns embedding model name.
17 18 19 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 17 def model @model end |
Instance Method Details
#client ⇒ Faraday::Connection
Returns a memoized Faraday client configured for the Gemini API.
36 37 38 39 40 41 42 43 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 36 def client @client ||= Faraday.new(url: base_url) do |con| con.request :json con.response :json con.headers["Content-Type"] = "application/json" con.headers["x-goog-api-key"] = api_key end end |
#embed_documents(documents) ⇒ Array<Pipeline::Document>
Generates embeddings for each document and assigns them in place. Uses the batchEmbedContents endpoint to embed all documents in a single request.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 50 def (documents) response = client.post(batch_endpoint) do |req| req.body = { requests: documents.map do |doc| { model: "models/#{model}", content: { parts: [ { text: doc.page_content } ] } } end } end raise StandardError, "Gemini embedding request failed (HTTP #{response.status})" unless response.success? response.body.fetch("embeddings").each_with_index do |, i| documents[i]. = ["values"] end documents end |
#embed_text(text) ⇒ Array<Float>
Generates an embedding vector for a single string.
72 73 74 75 76 77 78 79 80 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 72 def (text) response = client.post() do |req| req.body = { model: "models/#{model}", content: { parts: [ { text: text } ] } } end raise StandardError, "Gemini embedding request failed (HTTP #{response.status})" unless response.success? response.body.dig("embedding", "values") end |
#initialize(config: Rogalik.configuration.embeddings) ⇒ Object
23 24 25 26 27 28 29 30 31 |
# File 'lib/rogalik/plugins/gemini_embeddings.rb', line 23 def initialize(config: Rogalik.configuration.) api_key = config.api_key || ENV["GEMINI_API_KEY"] raise ArgumentError, "Gemini API key is required, set through env GEMINI_API_KEY or config" if api_key.nil? raise ArgumentError, "Gemini model name is required" if config.model.nil? @api_key = api_key @model = config.model @base_url = config.base_url || ENV["GEMINI_BASE_URL"] || BASE_URL end |