ruby_llm 1.0.0 → 1.1.0rc1

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +58 -19
  3. data/lib/ruby_llm/active_record/acts_as.rb +46 -7
  4. data/lib/ruby_llm/aliases.json +65 -0
  5. data/lib/ruby_llm/aliases.rb +56 -0
  6. data/lib/ruby_llm/chat.rb +11 -10
  7. data/lib/ruby_llm/configuration.rb +4 -0
  8. data/lib/ruby_llm/error.rb +15 -4
  9. data/lib/ruby_llm/models.json +1489 -283
  10. data/lib/ruby_llm/models.rb +57 -22
  11. data/lib/ruby_llm/provider.rb +44 -41
  12. data/lib/ruby_llm/providers/anthropic/capabilities.rb +8 -9
  13. data/lib/ruby_llm/providers/anthropic/chat.rb +31 -4
  14. data/lib/ruby_llm/providers/anthropic/streaming.rb +12 -6
  15. data/lib/ruby_llm/providers/anthropic.rb +4 -0
  16. data/lib/ruby_llm/providers/bedrock/capabilities.rb +168 -0
  17. data/lib/ruby_llm/providers/bedrock/chat.rb +108 -0
  18. data/lib/ruby_llm/providers/bedrock/models.rb +84 -0
  19. data/lib/ruby_llm/providers/bedrock/signing.rb +831 -0
  20. data/lib/ruby_llm/providers/bedrock/streaming/base.rb +46 -0
  21. data/lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb +63 -0
  22. data/lib/ruby_llm/providers/bedrock/streaming/message_processing.rb +79 -0
  23. data/lib/ruby_llm/providers/bedrock/streaming/payload_processing.rb +90 -0
  24. data/lib/ruby_llm/providers/bedrock/streaming/prelude_handling.rb +91 -0
  25. data/lib/ruby_llm/providers/bedrock/streaming.rb +36 -0
  26. data/lib/ruby_llm/providers/bedrock.rb +83 -0
  27. data/lib/ruby_llm/providers/deepseek/chat.rb +17 -0
  28. data/lib/ruby_llm/providers/deepseek.rb +5 -0
  29. data/lib/ruby_llm/providers/gemini/capabilities.rb +50 -34
  30. data/lib/ruby_llm/providers/gemini/chat.rb +8 -15
  31. data/lib/ruby_llm/providers/gemini/images.rb +5 -10
  32. data/lib/ruby_llm/providers/gemini/models.rb +0 -8
  33. data/lib/ruby_llm/providers/gemini/streaming.rb +35 -76
  34. data/lib/ruby_llm/providers/gemini/tools.rb +12 -12
  35. data/lib/ruby_llm/providers/gemini.rb +4 -0
  36. data/lib/ruby_llm/providers/openai/capabilities.rb +154 -177
  37. data/lib/ruby_llm/providers/openai/streaming.rb +9 -13
  38. data/lib/ruby_llm/providers/openai.rb +4 -0
  39. data/lib/ruby_llm/streaming.rb +96 -0
  40. data/lib/ruby_llm/tool.rb +15 -7
  41. data/lib/ruby_llm/version.rb +1 -1
  42. data/lib/ruby_llm.rb +8 -3
  43. data/lib/tasks/browser_helper.rb +97 -0
  44. data/lib/tasks/capability_generator.rb +123 -0
  45. data/lib/tasks/capability_scraper.rb +224 -0
  46. data/lib/tasks/cli_helper.rb +22 -0
  47. data/lib/tasks/code_validator.rb +29 -0
  48. data/lib/tasks/model_updater.rb +66 -0
  49. data/lib/tasks/models.rake +28 -197
  50. data/lib/tasks/vcr.rake +97 -0
  51. metadata +42 -19
  52. data/.github/workflows/cicd.yml +0 -109
  53. data/.github/workflows/docs.yml +0 -53
  54. data/.gitignore +0 -58
  55. data/.overcommit.yml +0 -26
  56. data/.rspec +0 -3
  57. data/.rspec_status +0 -50
  58. data/.rubocop.yml +0 -10
  59. data/.yardopts +0 -12
  60. data/Gemfile +0 -32
  61. data/Rakefile +0 -9
  62. data/bin/console +0 -17
  63. data/bin/setup +0 -6
  64. data/ruby_llm.gemspec +0 -43
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --require spec_helper
2
- --format documentation
3
- --color
data/.rspec_status DELETED
@@ -1,50 +0,0 @@
1
- example_id | status | run_time |
2
- -------------------------------------------------- | ------ | --------------- |
3
- ./spec/ruby_llm/active_record/acts_as_spec.rb[1:1] | passed | 3.38 seconds |
4
- ./spec/ruby_llm/active_record/acts_as_spec.rb[1:2] | passed | 2.48 seconds |
5
- ./spec/ruby_llm/chat_content_spec.rb[1:1:1] | passed | 2.74 seconds |
6
- ./spec/ruby_llm/chat_content_spec.rb[1:1:2] | passed | 1.29 seconds |
7
- ./spec/ruby_llm/chat_content_spec.rb[1:1:3] | passed | 2.54 seconds |
8
- ./spec/ruby_llm/chat_content_spec.rb[1:2:1] | passed | 2.77 seconds |
9
- ./spec/ruby_llm/chat_content_spec.rb[1:2:2] | passed | 2.1 seconds |
10
- ./spec/ruby_llm/chat_pdf_spec.rb[1:1:1] | passed | 7.75 seconds |
11
- ./spec/ruby_llm/chat_pdf_spec.rb[1:1:2] | passed | 13.88 seconds |
12
- ./spec/ruby_llm/chat_spec.rb[1:1:1:1] | passed | 1.02 seconds |
13
- ./spec/ruby_llm/chat_spec.rb[1:1:1:2] | passed | 3.95 seconds |
14
- ./spec/ruby_llm/chat_spec.rb[1:1:2:1] | passed | 0.4854 seconds |
15
- ./spec/ruby_llm/chat_spec.rb[1:1:2:2] | passed | 1.37 seconds |
16
- ./spec/ruby_llm/chat_spec.rb[1:1:3:1] | passed | 7.34 seconds |
17
- ./spec/ruby_llm/chat_spec.rb[1:1:3:2] | passed | 19.22 seconds |
18
- ./spec/ruby_llm/chat_spec.rb[1:1:4:1] | passed | 3.15 seconds |
19
- ./spec/ruby_llm/chat_spec.rb[1:1:4:2] | passed | 2.51 seconds |
20
- ./spec/ruby_llm/chat_streaming_spec.rb[1:1:1:1] | passed | 0.91374 seconds |
21
- ./spec/ruby_llm/chat_streaming_spec.rb[1:1:2:1] | passed | 0.50088 seconds |
22
- ./spec/ruby_llm/chat_streaming_spec.rb[1:1:3:1] | passed | 5.69 seconds |
23
- ./spec/ruby_llm/chat_streaming_spec.rb[1:1:4:1] | passed | 1.22 seconds |
24
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:1] | passed | 4.26 seconds |
25
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:2] | passed | 6.16 seconds |
26
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:3] | passed | 11.15 seconds |
27
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:4] | passed | 1.3 seconds |
28
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:5] | passed | 2.71 seconds |
29
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:6] | passed | 2.43 seconds |
30
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:7] | passed | 2.71 seconds |
31
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:8] | passed | 4 seconds |
32
- ./spec/ruby_llm/chat_tools_spec.rb[1:1:9] | passed | 2.81 seconds |
33
- ./spec/ruby_llm/embeddings_spec.rb[1:1:1:1] | passed | 0.33357 seconds |
34
- ./spec/ruby_llm/embeddings_spec.rb[1:1:1:2] | passed | 0.43632 seconds |
35
- ./spec/ruby_llm/embeddings_spec.rb[1:1:2:1] | passed | 0.65614 seconds |
36
- ./spec/ruby_llm/embeddings_spec.rb[1:1:2:2] | passed | 2.16 seconds |
37
- ./spec/ruby_llm/error_handling_spec.rb[1:1] | passed | 0.29366 seconds |
38
- ./spec/ruby_llm/image_generation_spec.rb[1:1:1] | passed | 14.16 seconds |
39
- ./spec/ruby_llm/image_generation_spec.rb[1:1:2] | passed | 16.22 seconds |
40
- ./spec/ruby_llm/image_generation_spec.rb[1:1:3] | passed | 9.1 seconds |
41
- ./spec/ruby_llm/image_generation_spec.rb[1:1:4] | passed | 0.00138 seconds |
42
- ./spec/ruby_llm/models_spec.rb[1:1:1] | passed | 0.01071 seconds |
43
- ./spec/ruby_llm/models_spec.rb[1:1:2] | passed | 0.00056 seconds |
44
- ./spec/ruby_llm/models_spec.rb[1:1:3] | passed | 0.00336 seconds |
45
- ./spec/ruby_llm/models_spec.rb[1:2:1] | passed | 0.00016 seconds |
46
- ./spec/ruby_llm/models_spec.rb[1:2:2] | passed | 0.00085 seconds |
47
- ./spec/ruby_llm/models_spec.rb[1:3:1] | passed | 1.44 seconds |
48
- ./spec/ruby_llm/models_spec.rb[1:3:2] | passed | 1.23 seconds |
49
- ./spec/ruby_llm/models_spec.rb[1:4:1] | passed | 0.0003 seconds |
50
- ./spec/ruby_llm/models_spec.rb[1:4:2] | passed | 0.00175 seconds |
data/.rubocop.yml DELETED
@@ -1,10 +0,0 @@
1
- plugins:
2
- - rubocop-rake
3
- - rubocop-rspec
4
-
5
- AllCops:
6
- NewCops: enable
7
- TargetRubyVersion: 3.1
8
- Exclude:
9
- - docs/**/*
10
- - vendor/**/*
data/.yardopts DELETED
@@ -1,12 +0,0 @@
1
- --markup markdown
2
- --markup-provider redcarpet
3
- --title "RubyLLM API Documentation"
4
- --protected
5
- --private
6
- --embed-mixins
7
- --output-dir doc/yard
8
- --readme README.md
9
- lib/**/*.rb
10
- -
11
- LICENSE
12
-
data/Gemfile DELETED
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- gemspec
6
-
7
- group :development do
8
- # Rails integration dependencies
9
- gem 'activerecord', '>= 6.0', '< 9.0'
10
- gem 'activesupport', '>= 6.0', '< 9.0'
11
-
12
- # Development dependencies
13
- gem 'bundler', '>= 2.0'
14
- gem 'codecov'
15
- gem 'dotenv'
16
- gem 'irb'
17
- gem 'nokogiri'
18
- gem 'overcommit', '>= 0.66'
19
- gem 'pry', '>= 0.14'
20
- gem 'rake', '>= 13.0'
21
- gem 'rdoc'
22
- gem 'reline'
23
- gem 'rspec', '~> 3.12'
24
- gem 'rubocop', '>= 1.0'
25
- gem 'rubocop-rake', '>= 0.6'
26
- gem 'rubocop-rspec'
27
- gem 'simplecov', '>= 0.21'
28
- gem 'simplecov-cobertura'
29
- gem 'sqlite3'
30
- gem 'webmock', '~> 3.18'
31
- gem 'yard', '>= 0.9'
32
- end
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/setup'
4
- require 'bundler/gem_tasks'
5
- require 'rake/clean'
6
-
7
- Dir.glob('lib/tasks/**/*.rake').each { |r| load r }
8
-
9
- task default: %w[build]
data/bin/console DELETED
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'ruby_llm'
6
- require 'dotenv/load'
7
-
8
- require 'irb'
9
-
10
- RubyLLM.configure do |config|
11
- config.openai_api_key = ENV.fetch('OPENAI_API_KEY', nil)
12
- config.anthropic_api_key = ENV.fetch('ANTHROPIC_API_KEY', nil)
13
- config.gemini_api_key = ENV.fetch('GEMINI_API_KEY', nil)
14
- config.deepseek_api_key = ENV.fetch('DEEPSEEK_API_KEY', nil)
15
- end
16
-
17
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
data/ruby_llm.gemspec DELETED
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'lib/ruby_llm/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'ruby_llm'
7
- spec.version = RubyLLM::VERSION
8
- spec.authors = ['Carmine Paolino']
9
- spec.email = ['carmine@paolino.me']
10
-
11
- spec.summary = 'Beautiful Ruby interface to modern AI'
12
- spec.description = 'A delightful Ruby way to work with AI. Chat in text, analyze and generate images, understand ' \
13
- 'audio, and use tools through a unified interface to OpenAI, Anthropic, Google, and DeepSeek. ' \
14
- 'Built for developer happiness with automatic token counting, proper streaming, and Rails ' \
15
- 'integration. No wrapping your head around multiple APIs - just clean Ruby code that works.'
16
- spec.homepage = 'https://rubyllm.com'
17
- spec.license = 'MIT'
18
- spec.required_ruby_version = Gem::Requirement.new('>= 3.1.0')
19
-
20
- spec.metadata['homepage_uri'] = spec.homepage
21
- spec.metadata['source_code_uri'] = 'https://github.com/crmne/ruby_llm'
22
- spec.metadata['changelog_uri'] = "#{spec.metadata['source_code_uri']}/commits/main"
23
- spec.metadata['documentation_uri'] = spec.homepage
24
- spec.metadata['bug_tracker_uri'] = "#{spec.metadata['source_code_uri']}/issues"
25
-
26
- spec.metadata['rubygems_mfa_required'] = 'true'
27
-
28
- # Specify which files should be added to the gem when it is released.
29
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
30
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
31
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|docs)/}) }
32
- end
33
- spec.bindir = 'exe'
34
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
- spec.require_paths = ['lib']
36
-
37
- # Runtime dependencies
38
- spec.add_dependency 'event_stream_parser', '~> 1'
39
- spec.add_dependency 'faraday', '~> 2'
40
- spec.add_dependency 'faraday-multipart', '~> 1'
41
- spec.add_dependency 'faraday-retry', '~> 2'
42
- spec.add_dependency 'zeitwerk', '~> 2'
43
- end