Class: LLM::OpenAI

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

Overview

The OpenAI class implements a provider for [OpenAI](platform.openai.com/)

Defined Under Namespace

Modules: Format, ResponseParser Classes: ErrorHandler

Constant Summary collapse

HOST =
"api.openai.com"

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) ⇒ OpenAI

Returns a new instance of OpenAI.

Parameters:

  • secret (String)

    The secret key for authentication



17
18
19
# File 'lib/llm/providers/openai.rb', line 17

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

Instance Method Details

#assistant_roleString

Returns the role of the assistant in the conversation. Usually “assistant” or “model”

Returns:

  • (String)

    Returns the role of the assistant in the conversation. Usually “assistant” or “model”



47
48
49
# File 'lib/llm/providers/openai.rb', line 47

def assistant_role
  "assistant"
end

#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:



36
37
38
39
40
41
42
43
# File 'lib/llm/providers/openai.rb', line 36

def complete(prompt, role = :user, **params)
  params   = {model: "gpt-4o-mini"}.merge!(params)
  req      = Net::HTTP::Post.new("/v1/chat/completions", headers)
  messages = [*(params.delete(:messages) || []), Message.new(role, prompt)]
  req.body = JSON.dump({messages: format(messages)}.merge!(params))
  res      = request(@http, req)
  Response::Completion.new(res).extend(response_parser)
end

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

Parameters:

  • input (String, Array<String>)

    The input to embed

Returns:



24
25
26
27
28
29
# File 'lib/llm/providers/openai.rb', line 24

def embed(input, **params)
  req = Net::HTTP::Post.new("/v1/embeddings", headers)
  req.body = JSON.dump({input:, model: "text-embedding-3-small"}.merge!(params))
  res = request(@http, req)
  Response::Embedding.new(res).extend(response_parser)
end

#modelsObject



51
52
53
# File 'lib/llm/providers/openai.rb', line 51

def models
  @models ||= load_models!("openai")
end