ruby_llm_community 0.0.1 → 0.0.3
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/LICENSE +22 -0
- data/README.md +172 -0
- data/lib/generators/ruby_llm/install/templates/INSTALL_INFO.md.tt +108 -0
- data/lib/generators/ruby_llm/install/templates/chat_model.rb.tt +3 -0
- data/lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt +8 -0
- data/lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt +15 -0
- data/lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt +14 -0
- data/lib/generators/ruby_llm/install/templates/initializer.rb.tt +6 -0
- data/lib/generators/ruby_llm/install/templates/message_model.rb.tt +3 -0
- data/lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt +3 -0
- data/lib/generators/ruby_llm/install_generator.rb +121 -0
- data/lib/ruby_llm/active_record/acts_as.rb +382 -0
- data/lib/ruby_llm/aliases.json +217 -0
- data/lib/ruby_llm/aliases.rb +56 -0
- data/lib/ruby_llm/attachment.rb +164 -0
- data/lib/ruby_llm/chat.rb +226 -0
- data/lib/ruby_llm/chunk.rb +6 -0
- data/lib/ruby_llm/configuration.rb +73 -0
- data/lib/ruby_llm/connection.rb +126 -0
- data/lib/ruby_llm/content.rb +52 -0
- data/lib/ruby_llm/context.rb +29 -0
- data/lib/ruby_llm/embedding.rb +30 -0
- data/lib/ruby_llm/error.rb +84 -0
- data/lib/ruby_llm/image.rb +53 -0
- data/lib/ruby_llm/message.rb +81 -0
- data/lib/ruby_llm/mime_type.rb +67 -0
- data/lib/ruby_llm/model/info.rb +101 -0
- data/lib/ruby_llm/model/modalities.rb +22 -0
- data/lib/ruby_llm/model/pricing.rb +51 -0
- data/lib/ruby_llm/model/pricing_category.rb +48 -0
- data/lib/ruby_llm/model/pricing_tier.rb +34 -0
- data/lib/ruby_llm/model.rb +7 -0
- data/lib/ruby_llm/models.json +29924 -0
- data/lib/ruby_llm/models.rb +214 -0
- data/lib/ruby_llm/models_schema.json +168 -0
- data/lib/ruby_llm/provider.rb +221 -0
- data/lib/ruby_llm/providers/anthropic/capabilities.rb +179 -0
- data/lib/ruby_llm/providers/anthropic/chat.rb +120 -0
- data/lib/ruby_llm/providers/anthropic/embeddings.rb +20 -0
- data/lib/ruby_llm/providers/anthropic/media.rb +116 -0
- data/lib/ruby_llm/providers/anthropic/models.rb +56 -0
- data/lib/ruby_llm/providers/anthropic/streaming.rb +45 -0
- data/lib/ruby_llm/providers/anthropic/tools.rb +108 -0
- data/lib/ruby_llm/providers/anthropic.rb +37 -0
- data/lib/ruby_llm/providers/bedrock/capabilities.rb +167 -0
- data/lib/ruby_llm/providers/bedrock/chat.rb +76 -0
- data/lib/ruby_llm/providers/bedrock/media.rb +73 -0
- data/lib/ruby_llm/providers/bedrock/models.rb +82 -0
- data/lib/ruby_llm/providers/bedrock/signing.rb +831 -0
- data/lib/ruby_llm/providers/bedrock/streaming/base.rb +63 -0
- data/lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb +71 -0
- data/lib/ruby_llm/providers/bedrock/streaming/message_processing.rb +79 -0
- data/lib/ruby_llm/providers/bedrock/streaming/payload_processing.rb +92 -0
- data/lib/ruby_llm/providers/bedrock/streaming/prelude_handling.rb +91 -0
- data/lib/ruby_llm/providers/bedrock/streaming.rb +36 -0
- data/lib/ruby_llm/providers/bedrock.rb +83 -0
- data/lib/ruby_llm/providers/deepseek/capabilities.rb +131 -0
- data/lib/ruby_llm/providers/deepseek/chat.rb +17 -0
- data/lib/ruby_llm/providers/deepseek.rb +30 -0
- data/lib/ruby_llm/providers/gemini/capabilities.rb +351 -0
- data/lib/ruby_llm/providers/gemini/chat.rb +146 -0
- data/lib/ruby_llm/providers/gemini/embeddings.rb +39 -0
- data/lib/ruby_llm/providers/gemini/images.rb +48 -0
- data/lib/ruby_llm/providers/gemini/media.rb +55 -0
- data/lib/ruby_llm/providers/gemini/models.rb +41 -0
- data/lib/ruby_llm/providers/gemini/streaming.rb +66 -0
- data/lib/ruby_llm/providers/gemini/tools.rb +82 -0
- data/lib/ruby_llm/providers/gemini.rb +36 -0
- data/lib/ruby_llm/providers/gpustack/chat.rb +17 -0
- data/lib/ruby_llm/providers/gpustack/models.rb +55 -0
- data/lib/ruby_llm/providers/gpustack.rb +33 -0
- data/lib/ruby_llm/providers/mistral/capabilities.rb +163 -0
- data/lib/ruby_llm/providers/mistral/chat.rb +26 -0
- data/lib/ruby_llm/providers/mistral/embeddings.rb +36 -0
- data/lib/ruby_llm/providers/mistral/models.rb +49 -0
- data/lib/ruby_llm/providers/mistral.rb +32 -0
- data/lib/ruby_llm/providers/ollama/chat.rb +28 -0
- data/lib/ruby_llm/providers/ollama/media.rb +50 -0
- data/lib/ruby_llm/providers/ollama.rb +29 -0
- data/lib/ruby_llm/providers/openai/capabilities.rb +306 -0
- data/lib/ruby_llm/providers/openai/chat.rb +87 -0
- data/lib/ruby_llm/providers/openai/embeddings.rb +36 -0
- data/lib/ruby_llm/providers/openai/images.rb +38 -0
- data/lib/ruby_llm/providers/openai/media.rb +81 -0
- data/lib/ruby_llm/providers/openai/models.rb +39 -0
- data/lib/ruby_llm/providers/openai/response.rb +116 -0
- data/lib/ruby_llm/providers/openai/response_media.rb +76 -0
- data/lib/ruby_llm/providers/openai/streaming.rb +191 -0
- data/lib/ruby_llm/providers/openai/tools.rb +100 -0
- data/lib/ruby_llm/providers/openai.rb +44 -0
- data/lib/ruby_llm/providers/openai_base.rb +44 -0
- data/lib/ruby_llm/providers/openrouter/models.rb +88 -0
- data/lib/ruby_llm/providers/openrouter.rb +26 -0
- data/lib/ruby_llm/providers/perplexity/capabilities.rb +138 -0
- data/lib/ruby_llm/providers/perplexity/chat.rb +17 -0
- data/lib/ruby_llm/providers/perplexity/models.rb +42 -0
- data/lib/ruby_llm/providers/perplexity.rb +52 -0
- data/lib/ruby_llm/railtie.rb +17 -0
- data/lib/ruby_llm/stream_accumulator.rb +103 -0
- data/lib/ruby_llm/streaming.rb +162 -0
- data/lib/ruby_llm/tool.rb +100 -0
- data/lib/ruby_llm/tool_call.rb +31 -0
- data/lib/ruby_llm/utils.rb +49 -0
- data/lib/ruby_llm/version.rb +5 -0
- data/lib/ruby_llm.rb +98 -0
- data/lib/tasks/aliases.rake +235 -0
- data/lib/tasks/models_docs.rake +224 -0
- data/lib/tasks/models_update.rake +108 -0
- data/lib/tasks/release.rake +32 -0
- data/lib/tasks/vcr.rake +99 -0
- metadata +128 -7
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dotenv/load'
|
4
|
+
require 'ruby_llm'
|
5
|
+
require 'json-schema'
|
6
|
+
|
7
|
+
task default: ['models:update']
|
8
|
+
|
9
|
+
namespace :models do
|
10
|
+
desc 'Update available models from providers (API keys needed)'
|
11
|
+
task :update do
|
12
|
+
puts 'Configuring RubyLLM...'
|
13
|
+
configure_from_env
|
14
|
+
|
15
|
+
refresh_models
|
16
|
+
display_model_stats
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def configure_from_env
|
21
|
+
RubyLLM.configure do |config|
|
22
|
+
config.openai_api_key = ENV.fetch('OPENAI_API_KEY', nil)
|
23
|
+
config.anthropic_api_key = ENV.fetch('ANTHROPIC_API_KEY', nil)
|
24
|
+
config.gemini_api_key = ENV.fetch('GEMINI_API_KEY', nil)
|
25
|
+
config.deepseek_api_key = ENV.fetch('DEEPSEEK_API_KEY', nil)
|
26
|
+
config.perplexity_api_key = ENV.fetch('PERPLEXITY_API_KEY', nil)
|
27
|
+
config.openrouter_api_key = ENV.fetch('OPENROUTER_API_KEY', nil)
|
28
|
+
config.mistral_api_key = ENV.fetch('MISTRAL_API_KEY', nil)
|
29
|
+
configure_bedrock(config)
|
30
|
+
config.request_timeout = 30
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def configure_bedrock(config)
|
35
|
+
config.bedrock_api_key = ENV.fetch('AWS_ACCESS_KEY_ID', nil)
|
36
|
+
config.bedrock_secret_key = ENV.fetch('AWS_SECRET_ACCESS_KEY', nil)
|
37
|
+
config.bedrock_region = ENV.fetch('AWS_REGION', nil)
|
38
|
+
config.bedrock_session_token = ENV.fetch('AWS_SESSION_TOKEN', nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
def refresh_models
|
42
|
+
initial_count = RubyLLM.models.all.size
|
43
|
+
puts "Refreshing models (#{initial_count} cached)..."
|
44
|
+
|
45
|
+
models = RubyLLM.models.refresh!
|
46
|
+
|
47
|
+
if models.all.empty? && initial_count.zero?
|
48
|
+
puts 'Error: Failed to fetch models.'
|
49
|
+
exit(1)
|
50
|
+
elsif models.all.size == initial_count && initial_count.positive?
|
51
|
+
puts 'Warning: Model list unchanged.'
|
52
|
+
else
|
53
|
+
puts 'Validating models...'
|
54
|
+
validate_models!(models)
|
55
|
+
|
56
|
+
puts "Saving models.json (#{models.all.size} models)"
|
57
|
+
models.save_models
|
58
|
+
end
|
59
|
+
|
60
|
+
@models = models
|
61
|
+
end
|
62
|
+
|
63
|
+
def validate_models!(models)
|
64
|
+
schema_path = File.expand_path('../ruby_llm/models_schema.json', __dir__)
|
65
|
+
models_data = models.all.map(&:to_h)
|
66
|
+
|
67
|
+
validation_errors = JSON::Validator.fully_validate(schema_path, models_data)
|
68
|
+
|
69
|
+
unless validation_errors.empty?
|
70
|
+
# Save failed models for inspection
|
71
|
+
failed_path = File.expand_path('../ruby_llm/models.failed.json', __dir__)
|
72
|
+
File.write(failed_path, JSON.pretty_generate(models_data))
|
73
|
+
|
74
|
+
puts 'ERROR: Models validation failed:'
|
75
|
+
puts "\nValidation errors:"
|
76
|
+
validation_errors.first(10).each { |error| puts " - #{error}" }
|
77
|
+
puts " ... and #{validation_errors.size - 10} more errors" if validation_errors.size > 10
|
78
|
+
puts "-> Failed models saved to: #{failed_path}"
|
79
|
+
exit(1)
|
80
|
+
end
|
81
|
+
|
82
|
+
puts '✓ Models validation passed'
|
83
|
+
end
|
84
|
+
|
85
|
+
def display_model_stats
|
86
|
+
puts "\nModel count:"
|
87
|
+
provider_counts = @models.all.group_by(&:provider).transform_values(&:count)
|
88
|
+
|
89
|
+
RubyLLM::Provider.providers.each do |sym, provider_class|
|
90
|
+
name = provider_class.name
|
91
|
+
count = provider_counts[sym.to_s] || 0
|
92
|
+
status = status(sym)
|
93
|
+
puts " #{name}: #{count} models #{status}"
|
94
|
+
end
|
95
|
+
|
96
|
+
puts 'Refresh complete.'
|
97
|
+
end
|
98
|
+
|
99
|
+
def status(provider_sym)
|
100
|
+
provider_class = RubyLLM::Provider.providers[provider_sym]
|
101
|
+
if provider_class.local?
|
102
|
+
' (LOCAL - SKIP)'
|
103
|
+
elsif provider_class.configured?(RubyLLM.config)
|
104
|
+
' (OK)'
|
105
|
+
else
|
106
|
+
' (NOT CONFIGURED)'
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :release do
|
4
|
+
desc 'Verify cassettes are fresh enough for release'
|
5
|
+
task :verify_cassettes do
|
6
|
+
max_age_days = 1
|
7
|
+
cassette_dir = 'spec/fixtures/vcr_cassettes'
|
8
|
+
stale_cassettes = []
|
9
|
+
|
10
|
+
Dir.glob("#{cassette_dir}/**/*.yml").each do |cassette|
|
11
|
+
age_days = (Time.now - File.mtime(cassette)) / 86_400
|
12
|
+
|
13
|
+
next unless age_days > max_age_days
|
14
|
+
|
15
|
+
stale_cassettes << {
|
16
|
+
file: File.basename(cassette),
|
17
|
+
age: age_days.round(1)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
if stale_cassettes.any?
|
22
|
+
puts "\n❌ Found stale cassettes (older than #{max_age_days} days):"
|
23
|
+
stale_cassettes.each do |c|
|
24
|
+
puts " - #{c[:file]} (#{c[:age]} days old)"
|
25
|
+
end
|
26
|
+
puts "\nRun locally: bundle exec rspec"
|
27
|
+
exit 1
|
28
|
+
else
|
29
|
+
puts "✅ All cassettes are fresh (< #{max_age_days} days old)"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/tasks/vcr.rake
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dotenv/load'
|
4
|
+
|
5
|
+
# Helper functions at the top level
|
6
|
+
def record_all_cassettes(cassette_dir)
|
7
|
+
# Re-record all cassettes
|
8
|
+
FileUtils.rm_rf(cassette_dir)
|
9
|
+
FileUtils.mkdir_p(cassette_dir)
|
10
|
+
|
11
|
+
puts 'Recording cassettes for all providers...'
|
12
|
+
run_tests
|
13
|
+
puts 'Done recording. Please review the new cassettes.'
|
14
|
+
end
|
15
|
+
|
16
|
+
def record_for_providers(providers, cassette_dir)
|
17
|
+
# Get the list of available providers from RubyLLM itself
|
18
|
+
all_providers = RubyLLM::Provider.providers.keys.map(&:to_s)
|
19
|
+
|
20
|
+
# Check for valid providers
|
21
|
+
if providers.empty?
|
22
|
+
puts "Please specify providers or 'all'. Example: rake vcr:record[openai,anthropic]"
|
23
|
+
puts "Available providers: #{all_providers.join(', ')}"
|
24
|
+
return
|
25
|
+
end
|
26
|
+
|
27
|
+
invalid_providers = providers - all_providers
|
28
|
+
if invalid_providers.any?
|
29
|
+
puts "Invalid providers: #{invalid_providers.join(', ')}"
|
30
|
+
puts "Available providers: #{all_providers.join(', ')}"
|
31
|
+
return
|
32
|
+
end
|
33
|
+
|
34
|
+
# Find and delete matching cassettes
|
35
|
+
cassettes_to_delete = find_matching_cassettes(cassette_dir, providers)
|
36
|
+
|
37
|
+
if cassettes_to_delete.empty?
|
38
|
+
puts 'No cassettes found for the specified providers.'
|
39
|
+
puts 'Running tests to record new cassettes...'
|
40
|
+
else
|
41
|
+
delete_cassettes(cassettes_to_delete)
|
42
|
+
puts "\nRunning tests to record new cassettes..."
|
43
|
+
end
|
44
|
+
|
45
|
+
run_tests
|
46
|
+
|
47
|
+
puts "\nDone recording cassettes for #{providers.join(', ')}."
|
48
|
+
puts 'Please review the updated cassettes for sensitive information.'
|
49
|
+
end
|
50
|
+
|
51
|
+
def find_matching_cassettes(dir, providers)
|
52
|
+
cassettes = []
|
53
|
+
|
54
|
+
Dir.glob("#{dir}/**/*.yml").each do |file|
|
55
|
+
basename = File.basename(file)
|
56
|
+
|
57
|
+
# Precise matching to avoid cross-provider confusion
|
58
|
+
providers.each do |provider|
|
59
|
+
# Match only exact provider prefixes
|
60
|
+
next unless basename =~ /^[^_]*_#{provider}_/ || # For first section like "chat_openai_"
|
61
|
+
basename =~ /_#{provider}_[^_]+_/ # For middle sections like "_openai_gpt4_"
|
62
|
+
|
63
|
+
cassettes << file
|
64
|
+
break
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
cassettes
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete_cassettes(cassettes)
|
72
|
+
puts "Deleting #{cassettes.size} cassettes for re-recording:"
|
73
|
+
cassettes.each do |file|
|
74
|
+
puts " - #{File.basename(file)}"
|
75
|
+
File.delete(file)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def run_tests
|
80
|
+
system('bundle exec rspec') || abort('Tests failed')
|
81
|
+
end
|
82
|
+
|
83
|
+
namespace :vcr do
|
84
|
+
desc 'Record VCR cassettes (rake vcr:record[all] or vcr:record[openai,anthropic])'
|
85
|
+
task :record, [:providers] do |_, args|
|
86
|
+
require 'fileutils'
|
87
|
+
require 'ruby_llm'
|
88
|
+
|
89
|
+
providers = (args[:providers] || '').downcase.split(',')
|
90
|
+
cassette_dir = 'spec/fixtures/vcr_cassettes'
|
91
|
+
FileUtils.mkdir_p(cassette_dir)
|
92
|
+
|
93
|
+
if providers.include?('all')
|
94
|
+
record_all_cassettes(cassette_dir)
|
95
|
+
else
|
96
|
+
record_for_providers(providers, cassette_dir)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_llm_community
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Shippy
|
@@ -121,18 +121,139 @@ dependencies:
|
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: '2'
|
124
|
-
description:
|
125
|
-
|
124
|
+
description: One beautiful Ruby API for GPT, Claude, Gemini, and more. Easily build
|
125
|
+
chatbots, AI agents, RAG applications, and content generators. Features chat (text,
|
126
|
+
images, audio, PDFs), image generation, embeddings, tools (function calling), structured
|
127
|
+
output, Rails integration, and streaming. Works with OpenAI, Anthropic, Google Gemini,
|
128
|
+
AWS Bedrock, DeepSeek, Mistral, Ollama (local models), OpenRouter, Perplexity, GPUStack,
|
129
|
+
and any OpenAI-compatible API. Minimal dependencies - just Faraday, Zeitwerk, and
|
130
|
+
Marcel. With additional features from the community.
|
126
131
|
email:
|
127
132
|
- pshippy@gmail.com
|
128
133
|
executables: []
|
129
134
|
extensions: []
|
130
135
|
extra_rdoc_files: []
|
131
|
-
files:
|
132
|
-
|
136
|
+
files:
|
137
|
+
- LICENSE
|
138
|
+
- README.md
|
139
|
+
- lib/generators/ruby_llm/install/templates/INSTALL_INFO.md.tt
|
140
|
+
- lib/generators/ruby_llm/install/templates/chat_model.rb.tt
|
141
|
+
- lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt
|
142
|
+
- lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt
|
143
|
+
- lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt
|
144
|
+
- lib/generators/ruby_llm/install/templates/initializer.rb.tt
|
145
|
+
- lib/generators/ruby_llm/install/templates/message_model.rb.tt
|
146
|
+
- lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt
|
147
|
+
- lib/generators/ruby_llm/install_generator.rb
|
148
|
+
- lib/ruby_llm.rb
|
149
|
+
- lib/ruby_llm/active_record/acts_as.rb
|
150
|
+
- lib/ruby_llm/aliases.json
|
151
|
+
- lib/ruby_llm/aliases.rb
|
152
|
+
- lib/ruby_llm/attachment.rb
|
153
|
+
- lib/ruby_llm/chat.rb
|
154
|
+
- lib/ruby_llm/chunk.rb
|
155
|
+
- lib/ruby_llm/configuration.rb
|
156
|
+
- lib/ruby_llm/connection.rb
|
157
|
+
- lib/ruby_llm/content.rb
|
158
|
+
- lib/ruby_llm/context.rb
|
159
|
+
- lib/ruby_llm/embedding.rb
|
160
|
+
- lib/ruby_llm/error.rb
|
161
|
+
- lib/ruby_llm/image.rb
|
162
|
+
- lib/ruby_llm/message.rb
|
163
|
+
- lib/ruby_llm/mime_type.rb
|
164
|
+
- lib/ruby_llm/model.rb
|
165
|
+
- lib/ruby_llm/model/info.rb
|
166
|
+
- lib/ruby_llm/model/modalities.rb
|
167
|
+
- lib/ruby_llm/model/pricing.rb
|
168
|
+
- lib/ruby_llm/model/pricing_category.rb
|
169
|
+
- lib/ruby_llm/model/pricing_tier.rb
|
170
|
+
- lib/ruby_llm/models.json
|
171
|
+
- lib/ruby_llm/models.rb
|
172
|
+
- lib/ruby_llm/models_schema.json
|
173
|
+
- lib/ruby_llm/provider.rb
|
174
|
+
- lib/ruby_llm/providers/anthropic.rb
|
175
|
+
- lib/ruby_llm/providers/anthropic/capabilities.rb
|
176
|
+
- lib/ruby_llm/providers/anthropic/chat.rb
|
177
|
+
- lib/ruby_llm/providers/anthropic/embeddings.rb
|
178
|
+
- lib/ruby_llm/providers/anthropic/media.rb
|
179
|
+
- lib/ruby_llm/providers/anthropic/models.rb
|
180
|
+
- lib/ruby_llm/providers/anthropic/streaming.rb
|
181
|
+
- lib/ruby_llm/providers/anthropic/tools.rb
|
182
|
+
- lib/ruby_llm/providers/bedrock.rb
|
183
|
+
- lib/ruby_llm/providers/bedrock/capabilities.rb
|
184
|
+
- lib/ruby_llm/providers/bedrock/chat.rb
|
185
|
+
- lib/ruby_llm/providers/bedrock/media.rb
|
186
|
+
- lib/ruby_llm/providers/bedrock/models.rb
|
187
|
+
- lib/ruby_llm/providers/bedrock/signing.rb
|
188
|
+
- lib/ruby_llm/providers/bedrock/streaming.rb
|
189
|
+
- lib/ruby_llm/providers/bedrock/streaming/base.rb
|
190
|
+
- lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb
|
191
|
+
- lib/ruby_llm/providers/bedrock/streaming/message_processing.rb
|
192
|
+
- lib/ruby_llm/providers/bedrock/streaming/payload_processing.rb
|
193
|
+
- lib/ruby_llm/providers/bedrock/streaming/prelude_handling.rb
|
194
|
+
- lib/ruby_llm/providers/deepseek.rb
|
195
|
+
- lib/ruby_llm/providers/deepseek/capabilities.rb
|
196
|
+
- lib/ruby_llm/providers/deepseek/chat.rb
|
197
|
+
- lib/ruby_llm/providers/gemini.rb
|
198
|
+
- lib/ruby_llm/providers/gemini/capabilities.rb
|
199
|
+
- lib/ruby_llm/providers/gemini/chat.rb
|
200
|
+
- lib/ruby_llm/providers/gemini/embeddings.rb
|
201
|
+
- lib/ruby_llm/providers/gemini/images.rb
|
202
|
+
- lib/ruby_llm/providers/gemini/media.rb
|
203
|
+
- lib/ruby_llm/providers/gemini/models.rb
|
204
|
+
- lib/ruby_llm/providers/gemini/streaming.rb
|
205
|
+
- lib/ruby_llm/providers/gemini/tools.rb
|
206
|
+
- lib/ruby_llm/providers/gpustack.rb
|
207
|
+
- lib/ruby_llm/providers/gpustack/chat.rb
|
208
|
+
- lib/ruby_llm/providers/gpustack/models.rb
|
209
|
+
- lib/ruby_llm/providers/mistral.rb
|
210
|
+
- lib/ruby_llm/providers/mistral/capabilities.rb
|
211
|
+
- lib/ruby_llm/providers/mistral/chat.rb
|
212
|
+
- lib/ruby_llm/providers/mistral/embeddings.rb
|
213
|
+
- lib/ruby_llm/providers/mistral/models.rb
|
214
|
+
- lib/ruby_llm/providers/ollama.rb
|
215
|
+
- lib/ruby_llm/providers/ollama/chat.rb
|
216
|
+
- lib/ruby_llm/providers/ollama/media.rb
|
217
|
+
- lib/ruby_llm/providers/openai.rb
|
218
|
+
- lib/ruby_llm/providers/openai/capabilities.rb
|
219
|
+
- lib/ruby_llm/providers/openai/chat.rb
|
220
|
+
- lib/ruby_llm/providers/openai/embeddings.rb
|
221
|
+
- lib/ruby_llm/providers/openai/images.rb
|
222
|
+
- lib/ruby_llm/providers/openai/media.rb
|
223
|
+
- lib/ruby_llm/providers/openai/models.rb
|
224
|
+
- lib/ruby_llm/providers/openai/response.rb
|
225
|
+
- lib/ruby_llm/providers/openai/response_media.rb
|
226
|
+
- lib/ruby_llm/providers/openai/streaming.rb
|
227
|
+
- lib/ruby_llm/providers/openai/tools.rb
|
228
|
+
- lib/ruby_llm/providers/openai_base.rb
|
229
|
+
- lib/ruby_llm/providers/openrouter.rb
|
230
|
+
- lib/ruby_llm/providers/openrouter/models.rb
|
231
|
+
- lib/ruby_llm/providers/perplexity.rb
|
232
|
+
- lib/ruby_llm/providers/perplexity/capabilities.rb
|
233
|
+
- lib/ruby_llm/providers/perplexity/chat.rb
|
234
|
+
- lib/ruby_llm/providers/perplexity/models.rb
|
235
|
+
- lib/ruby_llm/railtie.rb
|
236
|
+
- lib/ruby_llm/stream_accumulator.rb
|
237
|
+
- lib/ruby_llm/streaming.rb
|
238
|
+
- lib/ruby_llm/tool.rb
|
239
|
+
- lib/ruby_llm/tool_call.rb
|
240
|
+
- lib/ruby_llm/utils.rb
|
241
|
+
- lib/ruby_llm/version.rb
|
242
|
+
- lib/tasks/aliases.rake
|
243
|
+
- lib/tasks/models_docs.rake
|
244
|
+
- lib/tasks/models_update.rake
|
245
|
+
- lib/tasks/release.rake
|
246
|
+
- lib/tasks/vcr.rake
|
247
|
+
homepage: https://rubyllm.com
|
133
248
|
licenses:
|
134
249
|
- MIT
|
135
|
-
metadata:
|
250
|
+
metadata:
|
251
|
+
homepage_uri: https://rubyllm.com
|
252
|
+
source_code_uri: https://github.com/tpaulshippy/ruby_llm_community
|
253
|
+
changelog_uri: https://github.com/tpaulshippy/ruby_llm_community/commits/main
|
254
|
+
documentation_uri: https://rubyllm.com
|
255
|
+
bug_tracker_uri: https://github.com/tpaulshippy/ruby_llm_community/issues
|
256
|
+
rubygems_mfa_required: 'true'
|
136
257
|
rdoc_options: []
|
137
258
|
require_paths:
|
138
259
|
- lib
|
@@ -149,5 +270,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
270
|
requirements: []
|
150
271
|
rubygems_version: 3.6.9
|
151
272
|
specification_version: 4
|
152
|
-
summary:
|
273
|
+
summary: One beautiful Ruby API for GPT, Claude, Gemini, and more with community additions.
|
153
274
|
test_files: []
|