llm.rb 4.0.0 → 4.2.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +2 -2
  3. data/README.md +226 -192
  4. data/lib/llm/agent.rb +226 -0
  5. data/lib/llm/bot.rb +57 -28
  6. data/lib/llm/error.rb +4 -0
  7. data/lib/llm/function/tracing.rb +19 -0
  8. data/lib/llm/function.rb +16 -3
  9. data/lib/llm/json_adapter.rb +1 -1
  10. data/lib/llm/message.rb +7 -0
  11. data/lib/llm/prompt.rb +85 -0
  12. data/lib/llm/provider.rb +74 -10
  13. data/lib/llm/providers/anthropic/error_handler.rb +27 -5
  14. data/lib/llm/providers/anthropic/files.rb +22 -16
  15. data/lib/llm/providers/anthropic/models.rb +4 -3
  16. data/lib/llm/providers/anthropic.rb +6 -5
  17. data/lib/llm/providers/deepseek.rb +3 -3
  18. data/lib/llm/providers/gemini/error_handler.rb +34 -12
  19. data/lib/llm/providers/gemini/files.rb +18 -13
  20. data/lib/llm/providers/gemini/images.rb +4 -3
  21. data/lib/llm/providers/gemini/models.rb +4 -3
  22. data/lib/llm/providers/gemini.rb +36 -13
  23. data/lib/llm/providers/llamacpp.rb +3 -3
  24. data/lib/llm/providers/ollama/error_handler.rb +28 -6
  25. data/lib/llm/providers/ollama/models.rb +4 -3
  26. data/lib/llm/providers/ollama.rb +9 -7
  27. data/lib/llm/providers/openai/audio.rb +10 -7
  28. data/lib/llm/providers/openai/error_handler.rb +41 -14
  29. data/lib/llm/providers/openai/files.rb +19 -14
  30. data/lib/llm/providers/openai/images.rb +10 -7
  31. data/lib/llm/providers/openai/models.rb +4 -3
  32. data/lib/llm/providers/openai/moderations.rb +4 -3
  33. data/lib/llm/providers/openai/responses.rb +10 -7
  34. data/lib/llm/providers/openai/vector_stores.rb +34 -23
  35. data/lib/llm/providers/openai.rb +9 -7
  36. data/lib/llm/providers/xai.rb +3 -3
  37. data/lib/llm/providers/zai.rb +2 -2
  38. data/lib/llm/schema/object.rb +2 -2
  39. data/lib/llm/schema.rb +16 -2
  40. data/lib/llm/server_tool.rb +3 -3
  41. data/lib/llm/session.rb +3 -0
  42. data/lib/llm/tracer/logger.rb +192 -0
  43. data/lib/llm/tracer/null.rb +49 -0
  44. data/lib/llm/tracer/telemetry.rb +255 -0
  45. data/lib/llm/tracer.rb +134 -0
  46. data/lib/llm/version.rb +1 -1
  47. data/lib/llm.rb +5 -3
  48. data/llm.gemspec +4 -1
  49. metadata +39 -3
  50. data/lib/llm/builder.rb +0 -61
data/lib/llm.rb CHANGED
@@ -3,10 +3,11 @@
3
3
  module LLM
4
4
  require "stringio"
5
5
  require_relative "llm/json_adapter"
6
+ require_relative "llm/tracer"
6
7
  require_relative "llm/error"
7
8
  require_relative "llm/contract"
8
9
  require_relative "llm/usage"
9
- require_relative "llm/builder"
10
+ require_relative "llm/prompt"
10
11
  require_relative "llm/schema"
11
12
  require_relative "llm/object"
12
13
  require_relative "llm/version"
@@ -17,7 +18,8 @@ module LLM
17
18
  require_relative "llm/multipart"
18
19
  require_relative "llm/file"
19
20
  require_relative "llm/provider"
20
- require_relative "llm/bot"
21
+ require_relative "llm/session"
22
+ require_relative "llm/agent"
21
23
  require_relative "llm/buffer"
22
24
  require_relative "llm/function"
23
25
  require_relative "llm/eventstream"
@@ -34,7 +36,7 @@ module LLM
34
36
  ##
35
37
  # Returns the JSON adapter used by the library
36
38
  # @return [Class]
37
- # Returns a class that responds to +dump+ and +load+
39
+ # Returns a class that responds to `dump` and `load`
38
40
  def json
39
41
  @json ||= JSONAdapter::JSON
40
42
  end
data/llm.gemspec CHANGED
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = ">= 3.2.0"
22
22
 
23
23
  spec.metadata["homepage_uri"] = spec.homepage
24
- spec.metadata["source_code_uri"] = "https://github.com/llmrb/llm"
24
+ spec.metadata["source_code_uri"] = "https://github.com/llmrb/llm.rb"
25
+ spec.metadata["documentation_uri"] = "https://0x1eef.github.io/x/llm.rb"
25
26
 
26
27
  spec.files = Dir[
27
28
  "README.md", "LICENSE",
@@ -41,4 +42,6 @@ Gem::Specification.new do |spec|
41
42
  spec.add_development_dependency "vcr", "~> 6.0"
42
43
  spec.add_development_dependency "dotenv", "~> 2.8"
43
44
  spec.add_development_dependency "net-http-persistent", "~> 4.0"
45
+ spec.add_development_dependency "opentelemetry-sdk", "~> 1.10"
46
+ spec.add_development_dependency "logger", "~> 1.7"
44
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: llm.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antar Azri
@@ -164,6 +164,34 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '4.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: opentelemetry-sdk
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.10'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.10'
181
+ - !ruby/object:Gem::Dependency
182
+ name: logger
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.7'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.7'
167
195
  description: llm.rb is a zero-dependency Ruby toolkit for Large Language Models that
168
196
  includes OpenAI, Gemini, Anthropic, xAI (grok), zAI, DeepSeek, Ollama, and LlamaCpp.
169
197
  The toolkit includes full support for chat, streaming, tool calling, audio, images,
@@ -178,9 +206,9 @@ files:
178
206
  - LICENSE
179
207
  - README.md
180
208
  - lib/llm.rb
209
+ - lib/llm/agent.rb
181
210
  - lib/llm/bot.rb
182
211
  - lib/llm/buffer.rb
183
- - lib/llm/builder.rb
184
212
  - lib/llm/client.rb
185
213
  - lib/llm/contract.rb
186
214
  - lib/llm/contract/completion.rb
@@ -191,6 +219,7 @@ files:
191
219
  - lib/llm/eventstream/parser.rb
192
220
  - lib/llm/file.rb
193
221
  - lib/llm/function.rb
222
+ - lib/llm/function/tracing.rb
194
223
  - lib/llm/json_adapter.rb
195
224
  - lib/llm/message.rb
196
225
  - lib/llm/mime.rb
@@ -199,6 +228,7 @@ files:
199
228
  - lib/llm/object.rb
200
229
  - lib/llm/object/builder.rb
201
230
  - lib/llm/object/kernel.rb
231
+ - lib/llm/prompt.rb
202
232
  - lib/llm/provider.rb
203
233
  - lib/llm/providers/anthropic.rb
204
234
  - lib/llm/providers/anthropic/error_handler.rb
@@ -282,8 +312,13 @@ files:
282
312
  - lib/llm/schema/string.rb
283
313
  - lib/llm/schema/version.rb
284
314
  - lib/llm/server_tool.rb
315
+ - lib/llm/session.rb
285
316
  - lib/llm/tool.rb
286
317
  - lib/llm/tool/param.rb
318
+ - lib/llm/tracer.rb
319
+ - lib/llm/tracer/logger.rb
320
+ - lib/llm/tracer/null.rb
321
+ - lib/llm/tracer/telemetry.rb
287
322
  - lib/llm/usage.rb
288
323
  - lib/llm/utils.rb
289
324
  - lib/llm/version.rb
@@ -293,7 +328,8 @@ licenses:
293
328
  - 0BSD
294
329
  metadata:
295
330
  homepage_uri: https://github.com/llmrb/llm
296
- source_code_uri: https://github.com/llmrb/llm
331
+ source_code_uri: https://github.com/llmrb/llm.rb
332
+ documentation_uri: https://0x1eef.github.io/x/llm.rb
297
333
  rdoc_options: []
298
334
  require_paths:
299
335
  - lib
data/lib/llm/builder.rb DELETED
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # The {LLM::Builder LLM::Builder} class can build a collection
5
- # of messages that can be sent in a single request.
6
- #
7
- # @example
8
- # llm = LLM.openai(key: ENV["KEY"])
9
- # bot = LLM::Bot.new(llm)
10
- # prompt = bot.build_prompt do
11
- # it.system "Your task is to assist the user"
12
- # it.user "Hello. Can you assist me?"
13
- # end
14
- # res = bot.chat(prompt)
15
- class LLM::Builder
16
- ##
17
- # @param [Proc] evaluator
18
- # The evaluator
19
- def initialize(&evaluator)
20
- @buffer = []
21
- @evaluator = evaluator
22
- end
23
-
24
- ##
25
- # @return [void]
26
- def call
27
- @evaluator.call(self)
28
- end
29
-
30
- ##
31
- # @param [String] content
32
- # The message
33
- # @param [Symbol] role
34
- # The role (eg user, system)
35
- # @return [void]
36
- def chat(content, role: :user)
37
- @buffer << LLM::Message.new(role, content)
38
- end
39
-
40
- ##
41
- # @param [String] content
42
- # The message content
43
- # @return [void]
44
- def user(content)
45
- chat(content, role: :user)
46
- end
47
-
48
- ##
49
- # @param [String] content
50
- # The message content
51
- # @return [void]
52
- def system(content)
53
- chat(content, role: :system)
54
- end
55
-
56
- ##
57
- # @return [Array]
58
- def to_a
59
- @buffer.dup
60
- end
61
- end