ruby_llm 1.6.3 → 1.7.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/README.md +6 -3
- data/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb +115 -0
- data/lib/generators/ruby_llm/chat_ui/templates/controllers/chats_controller.rb.tt +39 -0
- data/lib/generators/ruby_llm/chat_ui/templates/controllers/messages_controller.rb.tt +24 -0
- data/lib/generators/ruby_llm/chat_ui/templates/controllers/models_controller.rb.tt +14 -0
- data/lib/generators/ruby_llm/chat_ui/templates/jobs/chat_response_job.rb.tt +12 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_chat.html.erb.tt +16 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_form.html.erb.tt +29 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/chats/index.html.erb.tt +16 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/chats/new.html.erb.tt +11 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/chats/show.html.erb.tt +23 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_form.html.erb.tt +21 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_message.html.erb.tt +10 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/messages/create.turbo_stream.erb.tt +9 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/models/_model.html.erb.tt +16 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/models/index.html.erb.tt +30 -0
- data/lib/generators/ruby_llm/chat_ui/templates/views/models/show.html.erb.tt +18 -0
- data/lib/generators/ruby_llm/install/templates/chat_model.rb.tt +2 -2
- data/lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt +4 -4
- data/lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt +8 -7
- data/lib/generators/ruby_llm/install/templates/create_models_migration.rb.tt +43 -0
- data/lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt +6 -5
- data/lib/generators/ruby_llm/install/templates/initializer.rb.tt +10 -4
- data/lib/generators/ruby_llm/install/templates/message_model.rb.tt +4 -3
- data/lib/generators/ruby_llm/install/templates/model_model.rb.tt +3 -0
- data/lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt +2 -2
- data/lib/generators/ruby_llm/install_generator.rb +129 -33
- data/lib/generators/ruby_llm/upgrade_to_v1_7/templates/migration.rb.tt +137 -0
- data/lib/generators/ruby_llm/upgrade_to_v1_7_generator.rb +160 -0
- data/lib/ruby_llm/active_record/acts_as.rb +112 -319
- data/lib/ruby_llm/active_record/acts_as_legacy.rb +398 -0
- data/lib/ruby_llm/active_record/chat_methods.rb +336 -0
- data/lib/ruby_llm/active_record/message_methods.rb +72 -0
- data/lib/ruby_llm/active_record/model_methods.rb +84 -0
- data/lib/ruby_llm/aliases.json +58 -13
- data/lib/ruby_llm/attachment.rb +20 -0
- data/lib/ruby_llm/chat.rb +8 -7
- data/lib/ruby_llm/configuration.rb +9 -0
- data/lib/ruby_llm/connection.rb +4 -4
- data/lib/ruby_llm/model/info.rb +12 -0
- data/lib/ruby_llm/models.json +3579 -2029
- data/lib/ruby_llm/models.rb +51 -22
- data/lib/ruby_llm/provider.rb +3 -3
- data/lib/ruby_llm/providers/anthropic/chat.rb +2 -2
- data/lib/ruby_llm/providers/anthropic/media.rb +1 -1
- data/lib/ruby_llm/providers/anthropic/tools.rb +1 -1
- data/lib/ruby_llm/providers/bedrock/chat.rb +2 -2
- data/lib/ruby_llm/providers/bedrock/models.rb +19 -1
- data/lib/ruby_llm/providers/gemini/chat.rb +53 -25
- data/lib/ruby_llm/providers/gemini/media.rb +1 -1
- data/lib/ruby_llm/providers/gpustack/chat.rb +11 -0
- data/lib/ruby_llm/providers/gpustack/media.rb +45 -0
- data/lib/ruby_llm/providers/gpustack/models.rb +44 -8
- data/lib/ruby_llm/providers/gpustack.rb +1 -0
- data/lib/ruby_llm/providers/ollama/media.rb +2 -6
- data/lib/ruby_llm/providers/ollama/models.rb +36 -0
- data/lib/ruby_llm/providers/ollama.rb +1 -0
- data/lib/ruby_llm/providers/openai/chat.rb +1 -1
- data/lib/ruby_llm/providers/openai/media.rb +4 -4
- data/lib/ruby_llm/providers/openai/tools.rb +11 -6
- data/lib/ruby_llm/providers/openai.rb +2 -2
- data/lib/ruby_llm/providers/vertexai/chat.rb +14 -0
- data/lib/ruby_llm/providers/vertexai/embeddings.rb +32 -0
- data/lib/ruby_llm/providers/vertexai/models.rb +130 -0
- data/lib/ruby_llm/providers/vertexai/streaming.rb +14 -0
- data/lib/ruby_llm/providers/vertexai.rb +55 -0
- data/lib/ruby_llm/railtie.rb +20 -3
- data/lib/ruby_llm/streaming.rb +1 -1
- data/lib/ruby_llm/utils.rb +5 -9
- data/lib/ruby_llm/version.rb +1 -1
- data/lib/ruby_llm.rb +4 -3
- data/lib/tasks/models.rake +525 -0
- data/lib/tasks/release.rake +37 -2
- data/lib/tasks/ruby_llm.rake +15 -0
- data/lib/tasks/vcr.rake +2 -2
- metadata +37 -5
- data/lib/generators/ruby_llm/install/templates/INSTALL_INFO.md.tt +0 -108
- data/lib/tasks/aliases.rake +0 -205
- data/lib/tasks/models_docs.rake +0 -214
- data/lib/tasks/models_update.rake +0 -108
@@ -1,108 +0,0 @@
|
|
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 = RubyLLM::Models.schema_file
|
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
|