Class: LLM::Gemini

Inherits:
Provider show all
Includes:
Format
Defined in:
lib/llm/providers/gemini.rb,
lib/llm/providers/gemini/format.rb,
lib/llm/providers/gemini/error_handler.rb,
lib/llm/providers/gemini/response_parser.rb

Overview

The Gemini class implements a provider for [Gemini](ai.google.dev/)

Defined Under Namespace

Modules: Format, ResponseParser Classes: ErrorHandler

Constant Summary collapse

HOST =
"generativelanguage.googleapis.com"
DEFAULT_PARAMS =
{model: "gemini-1.5-flash"}.freeze

Instance Method Summary collapse

Methods included from Format

#format

Methods inherited from Provider

#chat, #chat!, #inspect

Methods included from HTTPClient

#request

Constructor Details

#initialize(secret) ⇒ Gemini

Returns a new instance of Gemini.

Parameters:

  • secret (String)

    The secret key for authentication



18
19
20
# File 'lib/llm/providers/gemini.rb', line 18

def initialize(secret, **)
  super(secret, host: HOST, **)
end

Instance Method Details

#complete(prompt, role = :user, **params) ⇒ LLM::Response::Completion

Parameters:

  • prompt (String)

    The input prompt to be completed

  • role (Symbol) (defaults to: :user)

    The role of the prompt (e.g. :user, :system)

Returns:

See Also:



39
40
41
42
43
44
45
46
47
48
# File 'lib/llm/providers/gemini.rb', line 39

def complete(prompt, role = :user, **params)
  params = DEFAULT_PARAMS.merge(params)
  path = ["/v1beta/models", params.delete(:model)].join("/")
  req = Net::HTTP::Post.new [path, "generateContent"].join(":")
  messages = [*(params.delete(:messages) || []), LLM::Message.new(role, prompt)]
  body = {contents: format(messages)}
  req = preflight(req, body)
  res = request(@http, req)
  Response::Completion.new(res).extend(response_parser)
end

#embed(input, **params) ⇒ LLM::Response::Embedding

Parameters:

  • input (String)

    The input to embed

Returns:



25
26
27
28
29
30
31
32
# File 'lib/llm/providers/gemini.rb', line 25

def embed(input, **params)
  path = ["/v1beta/models", "text-embedding-004"].join("/")
  req = Net::HTTP::Post.new [path, "embedContent"].join(":")
  body = {content: {parts: [{text: input}]}}
  req = preflight(req, body)
  res = request @http, req
  Response::Embedding.new(res).extend(response_parser)
end