lammy 0.8.0 → 0.8.1
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 +4 -11
- data/lib/lammy/claude.rb +65 -0
- data/lib/lammy/embeddings.rb +4 -11
- data/lib/lammy/openai.rb +1 -1
- data/lib/lammy/schema.rb +1 -1
- data/lib/lammy.rb +24 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4708e6d34ee95ab93a6e737204ced2d8bac4dab9dde0102b1cfeaa9df7f31afd
|
4
|
+
data.tar.gz: 896b3e2211f6fd6ad2918f31657fd794d98e53a27027773c7b7d2f275f5ad390
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b7c7d3fa8d35996d5287d9be7cbf16dee55ed828f39e38faf460e87f9d1d75f9f9073b1e96461ea7ddf3459a2d7d8b1617dadd0ccc2b6ad44e4a6db2fe2be89
|
7
|
+
data.tar.gz: de5c76c9ede8414de9fc9de0da4bbca907948be8c5ce43cae6477d1f0e868cedfcd8095ce06fbfaff1f960b58ed8bf2150c7051a8048fcacdbc2d5b3665eff8b
|
data/lib/lammy/chat.rb
CHANGED
@@ -1,20 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module Lammy
|
4
4
|
module Chat
|
5
|
-
def
|
6
|
-
@next_llm_settings = kwargs
|
7
|
-
end
|
8
|
-
|
9
|
-
def handle_llm(method_name)
|
10
|
-
settings = @next_llm_settings
|
11
|
-
@next_llm_settings = nil
|
12
|
-
|
5
|
+
def self.handle(klass, method_name, settings)
|
13
6
|
# Unbind the original method
|
14
|
-
original_method = instance_method(method_name)
|
7
|
+
original_method = klass.instance_method(method_name)
|
15
8
|
|
16
9
|
# Redefine the method
|
17
|
-
define_method(method_name) do |*args, &block|
|
10
|
+
klass.define_method(method_name) do |*args, &block|
|
18
11
|
# Initialize context
|
19
12
|
@system_message = nil
|
20
13
|
|
data/lib/lammy/claude.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'anthropic'
|
4
|
+
require 'hashie'
|
5
|
+
|
6
|
+
module Lammy
|
7
|
+
# Use the Claude API's Ruby library
|
8
|
+
class Claude
|
9
|
+
MODELS = %w[
|
10
|
+
claude-3-5-sonnet-20240620
|
11
|
+
claude-3-opus-20240229 claude-3-sonnet-20240229 claude-3-haiku-20240307
|
12
|
+
claude-2.1 claude-2.0 claude-instant-1.2
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
attr_reader :settings
|
16
|
+
|
17
|
+
def initialize(settings)
|
18
|
+
@settings = settings
|
19
|
+
end
|
20
|
+
|
21
|
+
# Generate a response with support for structured output
|
22
|
+
def chat(user_message, system_message = nil, stream = nil)
|
23
|
+
response = client.messages(
|
24
|
+
parameters: {
|
25
|
+
system: system_message,
|
26
|
+
model: settings[:model],
|
27
|
+
max_tokens: settings[:max_tokens] || 4096,
|
28
|
+
stream: stream ? ->(chunk) { stream.call(stream_content(chunk)) } : nil,
|
29
|
+
messages: user_message.is_a?(Array) ? user_message : [vision(L.user(user_message))]
|
30
|
+
}.compact
|
31
|
+
)
|
32
|
+
|
33
|
+
stream || response.dig('content', 0, 'text')
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def stream_content(chunk)
|
39
|
+
chunk.dig('delta', 'text')
|
40
|
+
end
|
41
|
+
|
42
|
+
def vision(message)
|
43
|
+
image = message[:_image]
|
44
|
+
base = message.except(:_image)
|
45
|
+
|
46
|
+
return base unless image
|
47
|
+
|
48
|
+
messages = [
|
49
|
+
{ 'type' => 'image',
|
50
|
+
'source' => { 'type' => 'base64', 'media_type' => 'image/jpeg', 'data' => Base64.strict_encode64(image) } },
|
51
|
+
{ 'type' => 'text', 'text' => message[:content] }
|
52
|
+
]
|
53
|
+
|
54
|
+
base.merge(content: messages)
|
55
|
+
end
|
56
|
+
|
57
|
+
def client
|
58
|
+
return settings[:client] if settings[:client]
|
59
|
+
|
60
|
+
@client ||= ::Anthropic::Client.new(
|
61
|
+
access_token: ENV.fetch('ANTHROPIC_API_KEY')
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/lammy/embeddings.rb
CHANGED
@@ -1,20 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
3
|
+
module Lammy
|
4
4
|
module Embeddings
|
5
|
-
def
|
6
|
-
@next_v_settings = kwargs
|
7
|
-
end
|
8
|
-
|
9
|
-
def handle_v(method_name)
|
10
|
-
settings = @next_v_settings
|
11
|
-
@next_v_settings = nil
|
12
|
-
|
5
|
+
def self.handle(klass, method_name, settings)
|
13
6
|
# Unbind the original method
|
14
|
-
original_method = instance_method(method_name)
|
7
|
+
original_method = klass.instance_method(method_name)
|
15
8
|
|
16
9
|
# Redefine the method
|
17
|
-
define_method(method_name) do |*args, &block|
|
10
|
+
klass.define_method(method_name) do |*args, &block|
|
18
11
|
# # Initialize chunking settings
|
19
12
|
# @chunk_by_size = nil
|
20
13
|
|
data/lib/lammy/openai.rb
CHANGED
data/lib/lammy/schema.rb
CHANGED
data/lib/lammy.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module Lammy; end
|
4
|
+
|
3
5
|
require 'lammy/embeddings'
|
4
6
|
require 'lammy/claude'
|
5
7
|
require 'lammy/openai'
|
@@ -10,16 +12,34 @@ module L
|
|
10
12
|
extend Schema
|
11
13
|
|
12
14
|
def self.included(base)
|
13
|
-
base.extend Chat
|
14
|
-
base.extend Embeddings
|
15
15
|
base.extend ClassMethods
|
16
16
|
end
|
17
17
|
|
18
18
|
# Wrap generative methods with handlers
|
19
19
|
module ClassMethods
|
20
|
+
def llm(**kwargs)
|
21
|
+
@next_llm_settings = kwargs
|
22
|
+
end
|
23
|
+
|
24
|
+
def v(**kwargs)
|
25
|
+
@next_v_settings = kwargs
|
26
|
+
end
|
27
|
+
|
20
28
|
def method_added(method_name)
|
21
|
-
|
22
|
-
|
29
|
+
if @next_llm_settings
|
30
|
+
next_llm_settings = @next_llm_settings
|
31
|
+
@next_llm_settings = nil
|
32
|
+
|
33
|
+
Lammy::Chat.handle(self, method_name, next_llm_settings)
|
34
|
+
end
|
35
|
+
|
36
|
+
if @next_v_settings
|
37
|
+
next_v_settings = @next_v_settings
|
38
|
+
@next_v_settings = nil
|
39
|
+
|
40
|
+
Lammy::Embeddings.handle(self, method_name, next_v_settings)
|
41
|
+
end
|
42
|
+
|
23
43
|
super
|
24
44
|
end
|
25
45
|
end
|
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.
|
4
|
+
version: 0.8.1
|
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-10-
|
11
|
+
date: 2024-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anthropic
|
@@ -74,6 +74,7 @@ extra_rdoc_files: []
|
|
74
74
|
files:
|
75
75
|
- lib/lammy.rb
|
76
76
|
- lib/lammy/chat.rb
|
77
|
+
- lib/lammy/claude.rb
|
77
78
|
- lib/lammy/embeddings.rb
|
78
79
|
- lib/lammy/openai.rb
|
79
80
|
- lib/lammy/schema.rb
|