llm.rb 11.3.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +270 -1
- data/LICENSE +92 -17
- data/README.md +209 -647
- data/data/anthropic.json +433 -249
- data/data/bedrock.json +2097 -1055
- data/data/deepinfra.json +993 -0
- data/data/deepseek.json +53 -28
- data/data/google.json +389 -771
- data/data/openai.json +1053 -771
- data/data/xai.json +133 -292
- data/data/zai.json +249 -141
- data/lib/llm/a2a.rb +2 -2
- data/lib/llm/active_record/acts_as_agent.rb +10 -41
- data/lib/llm/active_record/acts_as_llm.rb +25 -0
- data/lib/llm/active_record.rb +3 -3
- data/lib/llm/agent.rb +1 -1
- data/lib/llm/context.rb +9 -5
- data/lib/llm/contract/completion.rb +2 -2
- data/lib/llm/cost.rb +1 -1
- data/lib/llm/function/fiber_group.rb +2 -2
- data/lib/llm/function/task_group.rb +2 -2
- data/lib/llm/function/thread_group.rb +3 -3
- data/lib/llm/pipe.rb +1 -1
- data/lib/llm/provider.rb +2 -2
- data/lib/llm/providers/anthropic/request_adapter.rb +1 -1
- data/lib/llm/providers/bedrock/request_adapter/completion.rb +5 -5
- data/lib/llm/providers/bedrock/request_adapter.rb +3 -3
- data/lib/llm/providers/bedrock/response_adapter/completion.rb +2 -2
- data/lib/llm/providers/bedrock/response_adapter.rb +2 -2
- data/lib/llm/providers/deepinfra/audio.rb +66 -0
- data/lib/llm/providers/deepinfra/images.rb +90 -0
- data/lib/llm/providers/deepinfra/response_adapter.rb +36 -0
- data/lib/llm/providers/deepinfra.rb +100 -0
- data/lib/llm/providers/deepseek/images.rb +109 -0
- data/lib/llm/providers/deepseek/request_adapter.rb +32 -0
- data/lib/llm/providers/deepseek/response_adapter/image.rb +9 -0
- data/lib/llm/providers/deepseek/response_adapter.rb +29 -0
- data/lib/llm/providers/deepseek.rb +4 -2
- data/lib/llm/providers/google/request_adapter.rb +23 -6
- data/lib/llm/providers/google.rb +4 -4
- data/lib/llm/providers/ollama/request_adapter.rb +1 -1
- data/lib/llm/providers/openai/audio.rb +6 -2
- data/lib/llm/providers/openai/images.rb +9 -50
- data/lib/llm/providers/openai/request_adapter/respond.rb +38 -4
- data/lib/llm/providers/openai/request_adapter.rb +1 -1
- data/lib/llm/providers/openai/response_adapter/audio.rb +5 -1
- data/lib/llm/providers/openai/response_adapter/completion.rb +1 -1
- data/lib/llm/providers/openai/response_adapter/image.rb +0 -4
- data/lib/llm/providers/openai/responses.rb +1 -0
- data/lib/llm/providers/openai/stream_parser.rb +5 -6
- data/lib/llm/providers/openai.rb +2 -2
- data/lib/llm/providers/xai/images.rb +49 -26
- data/lib/llm/providers/xai.rb +2 -2
- data/lib/llm/registry.rb +2 -2
- data/lib/llm/response.rb +11 -1
- data/lib/llm/schema/leaf.rb +7 -1
- data/lib/llm/schema/object.rb +1 -1
- data/lib/llm/schema/renderer.rb +121 -0
- data/lib/llm/schema.rb +30 -0
- data/lib/llm/sequel/agent.rb +2 -43
- data/lib/llm/sequel/plugin.rb +25 -7
- data/lib/llm/stream.rb +1 -1
- data/lib/llm/tool.rb +2 -2
- data/lib/llm/tracer/telemetry.rb +4 -6
- data/lib/llm/tracer.rb +9 -21
- data/lib/llm/transport/execution.rb +16 -1
- data/lib/llm/transport/http.rb +2 -2
- data/lib/llm/transport/net_http_adapter.rb +1 -1
- data/lib/llm/transport/persistent_http.rb +1 -1
- data/lib/llm/transport/response/http.rb +1 -1
- data/lib/llm/uridata.rb +16 -0
- data/lib/llm/utils.rb +1 -1
- data/lib/llm/version.rb +1 -1
- data/lib/llm.rb +20 -8
- data/llm.gemspec +14 -26
- data/resources/deepdive.md +966 -0
- metadata +26 -29
- data/lib/llm/tracer/langsmith.rb +0 -144
|
@@ -21,7 +21,7 @@ class LLM::Transport
|
|
|
21
21
|
when :put then ::Net::HTTP::Put.new(path, headers)
|
|
22
22
|
when :patch then ::Net::HTTP::Patch.new(path, headers)
|
|
23
23
|
when :delete then ::Net::HTTP::Delete.new(path, headers)
|
|
24
|
-
else ::Net::
|
|
24
|
+
else ::Net::HTTPGenericRequest.new(method, path, nil, headers)
|
|
25
25
|
end
|
|
26
26
|
if req.body
|
|
27
27
|
http_req.body = req.body
|
|
@@ -81,7 +81,7 @@ class LLM::Transport
|
|
|
81
81
|
|
|
82
82
|
##
|
|
83
83
|
# Performs a request on the current HTTP transport.
|
|
84
|
-
# Accepts both
|
|
84
|
+
# Accepts both `Net::HTTPRequest` and {LLM::Transport::Request}.
|
|
85
85
|
#
|
|
86
86
|
# @param [Net::HTTPRequest, LLM::Transport::Request] request
|
|
87
87
|
# @param [Fiber] owner
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
class LLM::Transport::Response
|
|
4
4
|
##
|
|
5
5
|
# {LLM::Transport::Response::HTTP LLM::Transport::Response::HTTP}
|
|
6
|
-
# adapts a
|
|
6
|
+
# adapts a `Net::HTTPResponse` to the
|
|
7
7
|
# {LLM::Transport::Response LLM::Transport::Response} interface.
|
|
8
8
|
#
|
|
9
9
|
# This is the default wrapper for responses produced by the built-in
|
data/lib/llm/uridata.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module LLM
|
|
4
|
+
class URIData < Struct.new(:content_type, :encoding_type, :encoded, :decoded)
|
|
5
|
+
##
|
|
6
|
+
# @param [String] str
|
|
7
|
+
# A string
|
|
8
|
+
# @return [URIData]
|
|
9
|
+
def self.parse(str)
|
|
10
|
+
_, data = str.split(":")
|
|
11
|
+
content_type, data = data.split(";")
|
|
12
|
+
encoding_type, data = data.split(",")
|
|
13
|
+
URIData.new(content_type, encoding_type, data, StringIO.new(data.unpack1("m0")))
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/llm/utils.rb
CHANGED
data/lib/llm/version.rb
CHANGED
data/lib/llm.rb
CHANGED
|
@@ -37,6 +37,7 @@ module LLM
|
|
|
37
37
|
require_relative "llm/server_tool"
|
|
38
38
|
require_relative "llm/mcp"
|
|
39
39
|
require_relative "llm/a2a"
|
|
40
|
+
require_relative "llm/uridata"
|
|
40
41
|
|
|
41
42
|
##
|
|
42
43
|
# Thread-safe monitors for different contexts
|
|
@@ -154,6 +155,14 @@ module LLM
|
|
|
154
155
|
LLM::OpenAI.new(**)
|
|
155
156
|
end
|
|
156
157
|
|
|
158
|
+
##
|
|
159
|
+
# @param key (see LLM::Provider#initialize)
|
|
160
|
+
# @return (see LLM::DeepInfra#initialize)
|
|
161
|
+
def deepinfra(**)
|
|
162
|
+
lock(:require) { require_relative "llm/providers/deepinfra" unless defined?(LLM::DeepInfra) }
|
|
163
|
+
LLM::DeepInfra.new(**)
|
|
164
|
+
end
|
|
165
|
+
|
|
157
166
|
##
|
|
158
167
|
# @param (see LLM::Bedrock#initialize)
|
|
159
168
|
# @return (see LLM::Bedrock#initialize)
|
|
@@ -181,16 +190,19 @@ module LLM
|
|
|
181
190
|
end
|
|
182
191
|
|
|
183
192
|
##
|
|
184
|
-
# @param [Hash
|
|
185
|
-
#
|
|
193
|
+
# @param [Hash] opts
|
|
194
|
+
# MCP client options
|
|
195
|
+
# @option opts [Hash, nil] :stdio
|
|
196
|
+
# Standard I/O transport options
|
|
197
|
+
# @option opts [Array<String>] :stdio/:argv
|
|
186
198
|
# The command to run for the MCP process
|
|
187
|
-
# @option
|
|
199
|
+
# @option opts [Hash] :stdio/:env
|
|
188
200
|
# The environment variables to set for the MCP process
|
|
189
|
-
# @option
|
|
201
|
+
# @option opts [String, nil] :stdio/:cwd
|
|
190
202
|
# The working directory for the MCP process
|
|
191
203
|
# @return [LLM::MCP]
|
|
192
|
-
def mcp(**)
|
|
193
|
-
LLM::MCP.new(**)
|
|
204
|
+
def mcp(**opts)
|
|
205
|
+
LLM::MCP.new(**opts)
|
|
194
206
|
end
|
|
195
207
|
|
|
196
208
|
##
|
|
@@ -234,7 +246,7 @@ module LLM
|
|
|
234
246
|
##
|
|
235
247
|
# Provides a thread-safe lock
|
|
236
248
|
# @param [Symbol] name The name of the lock
|
|
237
|
-
# @param [Proc]
|
|
249
|
+
# @param [Proc] block The block to execute within the lock
|
|
238
250
|
# @return [void]
|
|
239
|
-
def lock(name, &) = @monitors[name].synchronize(&)
|
|
251
|
+
def lock(name, &block) = @monitors[name].synchronize(&block)
|
|
240
252
|
end
|
data/llm.gemspec
CHANGED
|
@@ -5,46 +5,34 @@ require_relative "lib/llm/version"
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "llm.rb"
|
|
7
7
|
spec.version = LLM::VERSION
|
|
8
|
-
spec.authors = ["
|
|
9
|
-
spec.email = ["robert@
|
|
10
|
-
|
|
11
|
-
spec.summary = "Ruby's
|
|
12
|
-
spec.description =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
only when needed, and offers a single runtime for providers, agents,
|
|
17
|
-
tools, skills, MCP, A2A (Agent2Agent), RAG (vector stores & embeddings),
|
|
18
|
-
streaming, files, and persisted state. As a bonus, llm.rb is also available
|
|
19
|
-
for mruby.
|
|
20
|
-
|
|
21
|
-
It supports OpenAI, OpenAI-compatible endpoints, Anthropic, Google
|
|
22
|
-
Gemini, DeepSeek, xAI, Z.ai, AWS Bedrock, Ollama, and llama.cpp. It
|
|
23
|
-
also includes built-in ActiveRecord and Sequel support, plus concurrent
|
|
24
|
-
tool execution through threads, tasks (via async gem), fibers, ractors,
|
|
25
|
-
and fork (via xchan.rb gem).
|
|
26
|
-
DESC
|
|
27
|
-
|
|
28
|
-
spec.license = "0BSD"
|
|
8
|
+
spec.authors = ["bsdrobert", "Antar Azri", "Rodrigo Serrano"]
|
|
9
|
+
spec.email = ["robert@r.uby.dev"]
|
|
10
|
+
|
|
11
|
+
spec.summary = "Ruby's capable AI runtime"
|
|
12
|
+
spec.description = "llm.rb is not a library, framework or toolkit but " \
|
|
13
|
+
"an advanced runtime for building highly capable AI " \
|
|
14
|
+
"applications on CRuby."
|
|
15
|
+
spec.license = "BUSL-1.1"
|
|
29
16
|
spec.required_ruby_version = ">= 3.3.0"
|
|
30
17
|
|
|
31
|
-
spec.homepage = "https://
|
|
18
|
+
spec.homepage = "https://r.uby.dev/llm/"
|
|
32
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
33
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
|
34
|
-
spec.metadata["documentation_uri"] =
|
|
35
|
-
spec.metadata["changelog_uri"] = "https://
|
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/r-uby-dev/llm.rb"
|
|
21
|
+
spec.metadata["documentation_uri"] = spec.homepage
|
|
22
|
+
spec.metadata["changelog_uri"] = "https://r.uby.dev/api-docs/llm.rb/file.CHANGELOG.html"
|
|
36
23
|
|
|
37
24
|
spec.files = Dir[
|
|
38
25
|
"README.md", "LICENSE",
|
|
39
26
|
"lib/*.rb", "lib/**/*.rb",
|
|
40
27
|
"data/*.json", "CHANGELOG.md",
|
|
28
|
+
"resources/deepdive.md",
|
|
41
29
|
"llm.gemspec"
|
|
42
30
|
]
|
|
43
31
|
spec.require_paths = ["lib"]
|
|
44
32
|
|
|
45
33
|
spec.add_development_dependency "webmock", "~> 3.24.0"
|
|
46
34
|
spec.add_development_dependency "yard", "~> 0.9.37"
|
|
47
|
-
spec.add_development_dependency "
|
|
35
|
+
spec.add_development_dependency "redcarpet", "~> 3.6"
|
|
48
36
|
spec.add_development_dependency "webrick", "~> 1.8"
|
|
49
37
|
spec.add_development_dependency "test-cmd.rb", "~> 0.12.0"
|
|
50
38
|
spec.add_development_dependency "rake", "~> 13.0"
|