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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d44c524678b02c6e7bb07135102e42750ff70786f2941d7768f2d1598b7a8f98
4
- data.tar.gz: 8d94092fc72aecf3d1b2bad51f864785a99761448ea423f68bc82437fe8ed270
3
+ metadata.gz: 2ff43d19861d0ae98debcecac11133a2abb26a9a7cd44636b63ba5195bf6984f
4
+ data.tar.gz: 0dbe0ed8665a34ce50cc6c0862d77f926b298f353035018ebdb27dbe1e7d3674
5
5
  SHA512:
6
- metadata.gz: 0ef97bb570e1879206760211b0d7f2c76382281f73b6f3d2bd38801cf94348e22837dc79465d9b55c352ae7f917e3bdb4e33db5eb8057237f20ed206f25a9dc7
7
- data.tar.gz: 6db191e6da9b0b7f762d65e194fee4484b86965ebb74d6e6e67957cdd06d9a90d6162df86d8727bdf67754f3b1d3fedce1ff186956fe7fc35c8ef98245a7ae42
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
- client = case settings[:model]
27
- when *OpenAI::MODELS
28
- OpenAI.new(settings)
29
- when *Claude::MODELS
30
- Claude.new(settings)
31
- else
32
- raise "Unsupported model: #{settings[:model]}"
33
- end
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 = %w[
10
- claude-3-5-sonnet-latest claude-3-5-haiku-latest claude-3-opus-latest
11
- claude-3-5-sonnet-20240620 claude-3-5-haiku-20241022
12
- claude-3-opus-20240229 claude-3-sonnet-20240229 claude-3-haiku-20240307
13
- claude-2.1 claude-2.0 claude-instant-1.2
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 = %w[
11
- gpt-4o gpt-4o-2024-08-06 gpt-4o-2024-05-13 gpt-4o chatgpt-4o-latest
10
+ MODELS = [
11
+ /^gpt-4o(?:-\d{4}-\d{2}-\d{2})?$/, /^chatgpt-4o-latest$/,
12
12
 
13
- gpt-4o-mini gpt-4o-mini-2024-07-18
13
+ /^gpt-4o-mini(?:-\d{4}-\d{2}-\d{2})?$/,
14
14
 
15
- o1-preview o1-preview-2024-09-12
15
+ /^o1(?:-preview(?:-\d{4}-\d{2}-\d{2})?)?$/,
16
16
 
17
- o1-mini o1-mini-2024-09-12
17
+ /^o1-mini(?:-\d{4}-\d{2}-\d{2})?$/,
18
18
 
19
- gpt-3.5-turbo
19
+ /^gpt-3\.5-turbo$/,
20
20
 
21
- gpt-4-turbo gpt-4-turbo-2024-04-09 gpt-4 gpt-4-32k gpt-4-0125-preview gpt-4-1106-preview gpt-4-vision-preview
22
- gpt-3.5-turbo-0125 gpt-3.5-turbo-instruct gpt-3.5-turbo-1106 gpt-3.5-turbo-0613 gpt-3.5-turbo-16k-0613
23
- gpt-3.5-turbo-0301 davinci-002 babbage-002
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.8.3
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-29 00:00:00.000000000 Z
11
+ date: 2024-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anthropic