module RubyLLM::Providers::Gemini::Embeddings

def embed(text, model:) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength

rubocop:disable Metrics/AbcSize,Metrics/MethodLength
Must be public for Provider module
def embed(text, model:) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  payload = {
    content: {
      parts: format_text_for_embedding(text)
    }
  }
  url = "models/#{model}:embedContent"
  response = post(url, payload)
  if text.is_a?(Array)
    # We need to make separate calls for each text with Gemini
    embeddings = text.map do |t|
      single_payload = { content: { parts: [{ text: t.to_s }] } }
      single_response = post(url, single_payload)
      single_response.body.dig('embedding', 'values')
    end
    Embedding.new(
      vectors: embeddings,
      model: model,
      input_tokens: response.body.dig('usageMetadata', 'promptTokenCount') || 0
    )
  else
    Embedding.new(
      vectors: response.body.dig('embedding', 'values'),
      model: model,
      input_tokens: response.body.dig('usageMetadata', 'promptTokenCount') || 0
    )
  end
end

def format_text_for_embedding(text)

def format_text_for_embedding(text)
  if text.is_a?(Array)
    text.map { |t| { text: t.to_s } }
  else
    [{ text: text.to_s }]
  end
end