Module: LLM

Defined in:
lib/llm.rb,
lib/llm/bot.rb,
lib/llm/error.rb,
lib/llm/buffer.rb,
lib/llm/client.rb,
lib/llm/message.rb,
lib/llm/version.rb,
lib/llm/response.rb,
lib/llm/eventhandler.rb,
lib/llm/providers/xai.rb,
lib/llm/providers/gemini.rb,
lib/llm/providers/ollama.rb,
lib/llm/providers/openai.rb,
lib/llm/providers/deepseek.rb,
lib/llm/providers/llamacpp.rb,
lib/llm/providers/anthropic.rb

Defined Under Namespace

Modules: Client Classes: Anthropic, Bot, Buffer, DeepSeek, Error, File, Function, Gemini, LlamaCpp, Message, Object, Ollama, OpenAI, Provider, Response, ResponseError, Schema, Tool, XAI

Constant Summary collapse

UnauthorizedError =

HTTPUnauthorized

Class.new(ResponseError)
RateLimitError =

HTTPTooManyRequests

Class.new(ResponseError)
ServerError =

HTTPServerError

Class.new(ResponseError)
FormatError =

When an given an input object that is not understood

Class.new(Error)
PromptError =

When given a prompt object that is not understood

Class.new(FormatError)
VERSION =
"0.15.0"

Class Method Summary collapse

Class Method Details

.File(obj) ⇒ LLM::File

Parameters:

  • obj (String, File, LLM::Response)

    The path to the file, or an existing file reference

Returns:



82
83
84
85
86
87
88
89
90
91
# File 'lib/llm/file.rb', line 82

def LLM.File(obj)
  case obj
  when File
    obj.close unless obj.closed?
    LLM.File(obj.path)
  when LLM::File, LLM::Response then obj
  when String then LLM::File.new(obj)
  else raise TypeError, "don't know how to handle #{obj.class} objects"
  end
end

.geminiGemini

Returns a new instance of Gemini.

Parameters:

  • key (String, nil)

    The secret key for authentication

  • host (String)

    The host address of the LLM provider

  • port (Integer)

    The port number

  • timeout (Integer)

    The number of seconds to wait for a response

  • ssl (Boolean)

    Whether to use SSL for the connection

  • persistent (Boolean)

    Whether to use a persistent connection. Requires the net-http-persistent gem.

Returns:

  • (Gemini)

    a new instance of Gemini



36
37
38
39
# File 'lib/llm.rb', line 36

def gemini(**)
  require_relative "llm/providers/gemini" unless defined?(LLM::Gemini)
  LLM::Gemini.new(**)
end

.ollama(key: nil) ⇒ Ollama

Returns a new instance of Ollama.

Parameters:

  • key (String, nil) (defaults to: nil)

    The secret key for authentication

Returns:

  • (Ollama)

    a new instance of Ollama



44
45
46
47
# File 'lib/llm.rb', line 44

def ollama(key: nil, **)
  require_relative "llm/providers/ollama" unless defined?(LLM::Ollama)
  LLM::Ollama.new(key:, **)
end

.llamacpp(key: nil) ⇒ LLM::LlamaCpp

Parameters:

  • key (String, nil) (defaults to: nil)

    The secret key for authentication

Returns:



52
53
54
55
# File 'lib/llm.rb', line 52

def llamacpp(key: nil, **)
  require_relative "llm/providers/llamacpp" unless defined?(LLM::LlamaCpp)
  LLM::LlamaCpp.new(key:, **)
end

.deepseekLLM::DeepSeek

Parameters:

  • key (String, nil)

    The secret key for authentication

Returns:



60
61
62
63
# File 'lib/llm.rb', line 60

def deepseek(**)
  require_relative "llm/providers/deepseek" unless defined?(LLM::DeepSeek)
  LLM::DeepSeek.new(**)
end

.openaiOpenAI

Returns a new instance of OpenAI.

Parameters:

  • key (String, nil)

    The secret key for authentication

Returns:

  • (OpenAI)

    a new instance of OpenAI



68
69
70
71
# File 'lib/llm.rb', line 68

def openai(**)
  require_relative "llm/providers/openai" unless defined?(LLM::OpenAI)
  LLM::OpenAI.new(**)
end

.xaiXAI

Returns a new instance of XAI.

Parameters:

  • key (String, nil)

    The secret key for authentication

  • host (String)

    A regional host or the default (“api.x.ai”)

Returns:

  • (XAI)

    a new instance of XAI



77
78
79
80
# File 'lib/llm.rb', line 77

def xai(**)
  require_relative "llm/providers/xai" unless defined?(LLM::XAI)
  LLM::XAI.new(**)
end

.function(name, &b) ⇒ LLM::Function

Define or get a function

Examples:

LLM.function(:system) do |fn|
  fn.description "Run system command"
  fn.params do |schema|
    schema.object(command: schema.string.required)
  end
  fn.define do |command:|
    system(command)
  end
end

Parameters:

  • name (Symbol)

    The name of the function

  • b (Proc)

    The block to define the function

Returns:



97
98
99
100
101
102
103
# File 'lib/llm.rb', line 97

def function(name, &b)
  if block_given?
    functions[name.to_s] = LLM::Function.new(name, &b)
  else
    functions[name.to_s]
  end
end

.functionsHash<String,LLM::Function>

Returns all known functions

Returns:



108
109
110
# File 'lib/llm.rb', line 108

def functions
  @functions ||= {}
end

.anthropicAnthropic

Returns a new instance of Anthropic.

Parameters:

  • key (String, nil)

    The secret key for authentication

  • host (String)

    The host address of the LLM provider

  • port (Integer)

    The port number

  • timeout (Integer)

    The number of seconds to wait for a response

  • ssl (Boolean)

    Whether to use SSL for the connection

  • persistent (Boolean)

    Whether to use a persistent connection. Requires the net-http-persistent gem.

Returns:

  • (Anthropic)

    a new instance of Anthropic



28
29
30
31
# File 'lib/llm.rb', line 28

def anthropic(**)
  require_relative "llm/providers/anthropic" unless defined?(LLM::Anthropic)
  LLM::Anthropic.new(**)
end