-
-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy pathruby_llm.rb
89 lines (75 loc) · 2.06 KB
/
ruby_llm.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# frozen_string_literal: true
require 'base64'
require 'event_stream_parser'
require 'faraday'
require 'faraday/retry'
require 'json'
require 'logger'
require 'securerandom'
require 'zeitwerk'
loader = Zeitwerk::Loader.for_gem
loader.inflector.inflect(
'ruby_llm' => 'RubyLLM',
'llm' => 'LLM',
'openai' => 'OpenAI',
'api' => 'API',
'deepseek' => 'DeepSeek',
'bedrock' => 'Bedrock',
'openrouter' => 'OpenRouter'
)
loader.ignore("#{__dir__}/tasks")
loader.ignore("#{__dir__}/ruby_llm/railtie")
loader.ignore("#{__dir__}/ruby_llm/active_record")
loader.setup
# A delightful Ruby interface to modern AI language models.
# Provides a unified way to interact with models from OpenAI, Anthropic and others
# with a focus on developer happiness and convention over configuration.
module RubyLLM
class Error < StandardError; end
class << self
def context
context_config = config.dup
yield context_config if block_given?
Context.new(context_config)
end
def chat(...)
Chat.new(...)
end
def embed(...)
Embedding.embed(...)
end
def paint(...)
Image.paint(...)
end
def models
Models.instance
end
def providers
Provider.providers.values
end
def configure
yield config
end
def config
@config ||= Configuration.new
end
def logger
@logger ||= Logger.new(
$stdout,
progname: 'RubyLLM',
level: ENV['RUBYLLM_DEBUG'] ? Logger::DEBUG : Logger::INFO
)
end
end
end
RubyLLM::Provider.register :openai, RubyLLM::Providers::OpenAI
RubyLLM::Provider.register :anthropic, RubyLLM::Providers::Anthropic
RubyLLM::Provider.register :gemini, RubyLLM::Providers::Gemini
RubyLLM::Provider.register :deepseek, RubyLLM::Providers::DeepSeek
RubyLLM::Provider.register :bedrock, RubyLLM::Providers::Bedrock
RubyLLM::Provider.register :openrouter, RubyLLM::Providers::OpenRouter
RubyLLM::Provider.register :ollama, RubyLLM::Providers::Ollama
if defined?(Rails::Railtie)
require 'ruby_llm/railtie'
require 'ruby_llm/active_record/acts_as'
end