-
-
Notifications
You must be signed in to change notification settings - Fork 443
Expand file tree
/
Copy pathruby_llm.rb
More file actions
119 lines (101 loc) · 2.78 KB
/
ruby_llm.rb
File metadata and controls
119 lines (101 loc) · 2.78 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# frozen_string_literal: true
require 'base64'
require 'event_stream_parser'
require 'faraday'
require 'faraday/multipart'
require 'faraday/retry'
require 'json'
require 'logger'
require 'marcel'
require 'securerandom'
require 'date'
require 'time'
require 'zeitwerk'
loader = Zeitwerk::Loader.for_gem
loader.inflector.inflect(
'azure' => 'Azure',
'UI' => 'UI',
'api' => 'API',
'bedrock' => 'Bedrock',
'deepseek' => 'DeepSeek',
'gpustack' => 'GPUStack',
'llm' => 'LLM',
'mistral' => 'Mistral',
'openai' => 'OpenAI',
'openrouter' => 'OpenRouter',
'pdf' => 'PDF',
'perplexity' => 'Perplexity',
'ruby_llm' => 'RubyLLM',
'vertexai' => 'VertexAI',
'xai' => 'XAI'
)
loader.ignore("#{__dir__}/tasks")
loader.ignore("#{__dir__}/generators")
loader.ignore("#{__dir__}/ruby_llm/active_record")
loader.ignore("#{__dir__}/ruby_llm/railtie.rb")
loader.setup
# A delightful Ruby interface to modern AI language models.
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 moderate(...)
Moderation.moderate(...)
end
def paint(...)
Image.paint(...)
end
def transcribe(...)
Transcription.transcribe(...)
end
def upload_file(...)
ProviderFile.upload(...)
end
def download_file(...)
ProviderFile.download(...)
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 ||= config.logger || Logger.new(
config.log_file,
progname: 'RubyLLM',
level: config.log_level
)
end
end
end
RubyLLM::Provider.register :anthropic, RubyLLM::Providers::Anthropic
RubyLLM::Provider.register :azure, RubyLLM::Providers::Azure
RubyLLM::Provider.register :bedrock, RubyLLM::Providers::Bedrock
RubyLLM::Provider.register :deepseek, RubyLLM::Providers::DeepSeek
RubyLLM::Provider.register :gemini, RubyLLM::Providers::Gemini
RubyLLM::Provider.register :gpustack, RubyLLM::Providers::GPUStack
RubyLLM::Provider.register :mistral, RubyLLM::Providers::Mistral
RubyLLM::Provider.register :ollama, RubyLLM::Providers::Ollama
RubyLLM::Provider.register :openai, RubyLLM::Providers::OpenAI
RubyLLM::Provider.register :openrouter, RubyLLM::Providers::OpenRouter
RubyLLM::Provider.register :perplexity, RubyLLM::Providers::Perplexity
RubyLLM::Provider.register :vertexai, RubyLLM::Providers::VertexAI
RubyLLM::Provider.register :xai, RubyLLM::Providers::XAI
require 'ruby_llm/railtie' if defined?(Rails::Railtie)