lammy 0.8.3 → 0.9.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/lib/lammy/chat.rb +8 -8
- data/lib/lammy/claude.rb +14 -6
- data/lib/lammy/openai.rb +11 -10
- data/lib/lammy.rb +19 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ff43d19861d0ae98debcecac11133a2abb26a9a7cd44636b63ba5195bf6984f
|
4
|
+
data.tar.gz: 0dbe0ed8665a34ce50cc6c0862d77f926b298f353035018ebdb27dbe1e7d3674
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07e4aaae22128eb3e16447c136bab320c5887649611cb8acc5f29709c53841c52442040fd8a21609d2dd6df19e5565950f618334ca6fe1cb2515f71d25d09202
|
7
|
+
data.tar.gz: 3b5352026f96575f874187b02f02ec57795748409853fb59e52df490223e05563ea5f53530d2c83e1930b4666601da9382c39f83bd2e43cd071c74aae52f93d0
|
data/lib/lammy/chat.rb
CHANGED
@@ -23,14 +23,14 @@ module Lammy
|
|
23
23
|
# Call the original method to get the user message
|
24
24
|
user_message = original_method.bind(self).call(*args, &block)
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
model = settings[:model] || Lammy.configuration.model
|
27
|
+
client = if OpenAI::MODELS.any? { |regex| model =~ regex }
|
28
|
+
OpenAI.new(settings)
|
29
|
+
elsif Claude::MODELS.any? { |regex| model =~ regex }
|
30
|
+
Claude.new(settings)
|
31
|
+
else
|
32
|
+
raise "Unsupported model: #{model}"
|
33
|
+
end
|
34
34
|
|
35
35
|
client.chat(user_message, @system_message, @stream)
|
36
36
|
end
|
data/lib/lammy/claude.rb
CHANGED
@@ -6,11 +6,18 @@ require 'hashie'
|
|
6
6
|
module Lammy
|
7
7
|
# Use the Claude API's Ruby library
|
8
8
|
class Claude
|
9
|
-
MODELS =
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
MODELS = [
|
10
|
+
/\Aclaude-3-5-sonnet-latest\z/,
|
11
|
+
/\Aclaude-3-5-haiku-latest\z/,
|
12
|
+
/\Aclaude-3-opus-latest\z/,
|
13
|
+
/\Aclaude-3-5-sonnet-20240620\z/,
|
14
|
+
/\Aclaude-3-5-haiku-20241022\z/,
|
15
|
+
/\Aclaude-3-opus-20240229\z/,
|
16
|
+
/\Aclaude-3-sonnet-20240229\z/,
|
17
|
+
/\Aclaude-3-haiku-20240307\z/,
|
18
|
+
/\Aclaude-2\.1\z/,
|
19
|
+
/\Aclaude-2\.0\z/,
|
20
|
+
/\Aclaude-instant-1\.2\z/
|
14
21
|
].freeze
|
15
22
|
|
16
23
|
attr_reader :settings
|
@@ -24,7 +31,7 @@ module Lammy
|
|
24
31
|
response = client.messages(
|
25
32
|
parameters: {
|
26
33
|
system: system_message,
|
27
|
-
model: settings[:model],
|
34
|
+
model: settings[:model] || Lammy.configuration.model,
|
28
35
|
max_tokens: settings[:max_tokens] || 4096,
|
29
36
|
stream: stream ? ->(chunk) { stream.call(stream_content(chunk)) } : nil,
|
30
37
|
messages: user_message.is_a?(Array) ? user_message : [vision(L.user(user_message))]
|
@@ -57,6 +64,7 @@ module Lammy
|
|
57
64
|
|
58
65
|
def client
|
59
66
|
return settings[:client] if settings[:client]
|
67
|
+
return Lammy.configuration.client if Lammy.configuration.client
|
60
68
|
|
61
69
|
@client ||= ::Anthropic::Client.new(
|
62
70
|
access_token: ENV.fetch('ANTHROPIC_API_KEY')
|
data/lib/lammy/openai.rb
CHANGED
@@ -7,20 +7,20 @@ require 'base64'
|
|
7
7
|
module Lammy
|
8
8
|
# Use the OpenAI API's Ruby library
|
9
9
|
class OpenAI
|
10
|
-
MODELS =
|
11
|
-
gpt-4o
|
10
|
+
MODELS = [
|
11
|
+
/^gpt-4o(?:-\d{4}-\d{2}-\d{2})?$/, /^chatgpt-4o-latest$/,
|
12
12
|
|
13
|
-
gpt-4o-mini
|
13
|
+
/^gpt-4o-mini(?:-\d{4}-\d{2}-\d{2})?$/,
|
14
14
|
|
15
|
-
o1
|
15
|
+
/^o1(?:-preview(?:-\d{4}-\d{2}-\d{2})?)?$/,
|
16
16
|
|
17
|
-
o1-mini
|
17
|
+
/^o1-mini(?:-\d{4}-\d{2}-\d{2})?$/,
|
18
18
|
|
19
|
-
gpt-3
|
19
|
+
/^gpt-3\.5-turbo$/,
|
20
20
|
|
21
|
-
gpt-4
|
22
|
-
gpt-3
|
23
|
-
|
21
|
+
/^gpt-4(?:-turbo(?:-\d{4}-\d{2}-\d{2})?|-32k|-\d{4}-preview|-vision-preview)?$/,
|
22
|
+
/^gpt-3\.5-turbo-(?:\d{4}|\d{2}k-\d{4}|-instruct)$/,
|
23
|
+
/^(?:davinci|babbage)-002$/
|
24
24
|
].freeze
|
25
25
|
|
26
26
|
EMBEDDINGS = %w[
|
@@ -40,7 +40,7 @@ module Lammy
|
|
40
40
|
|
41
41
|
request = client.chat(
|
42
42
|
parameters: {
|
43
|
-
model: settings[:model],
|
43
|
+
model: settings[:model] || Lammy.configuration.model,
|
44
44
|
response_format: schema,
|
45
45
|
messages: messages,
|
46
46
|
stream: stream ? ->(chunk) { stream.call(stream_content(chunk)) } : nil
|
@@ -118,6 +118,7 @@ module Lammy
|
|
118
118
|
|
119
119
|
def client
|
120
120
|
return settings[:client] if settings[:client]
|
121
|
+
return Lammy.configuration.client if Lammy.configuration.client
|
121
122
|
|
122
123
|
@client ||= ::OpenAI::Client.new(
|
123
124
|
access_token: ENV.fetch('OPENAI_ACCESS_TOKEN')
|
data/lib/lammy.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module Lammy
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :model, :client
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@model = nil
|
9
|
+
@client = nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.configuration
|
14
|
+
@configuration ||= Configuration.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.configure
|
18
|
+
yield(configuration)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
3
22
|
require 'lammy/embeddings'
|
4
23
|
require 'lammy/claude'
|
5
24
|
require 'lammy/openai'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lammy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kamil Nicieja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anthropic
|