lammy 0.7.0 → 0.8.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/openai.rb +23 -8
- data/lib/lammy/schema.rb +12 -2
- 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: ec35c0b162ca174c4baaa39d040632e10ce1e18a8b79e281161ff79f99a0758b
|
4
|
+
data.tar.gz: 88542e30eddbd8e1d26e2fbef989e7e2467f0503abc1544410f9f6f9490f6083
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f2230a56f061fb8595ad27a6539c42807e0507fbd86542866f79a9a40f8c98cd345d45a3d3611ebc7c738b5e0919b55f5567b27c60db83c393b64be25edcbde
|
7
|
+
data.tar.gz: d2c855118e9cfb30287ba8902c1dd74aed6bcd5161ba59b8752eeb755b75735ec1a634166b2493f718c5a6572d496f796e370c3232ec0e05dc01a0f30772441c
|
data/lib/lammy/openai.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'openai'
|
4
4
|
require 'hashie'
|
5
|
+
require 'base64'
|
5
6
|
|
6
7
|
module L
|
7
8
|
# Use the OpenAI API's Ruby library
|
@@ -35,13 +36,11 @@ module L
|
|
35
36
|
}.compact
|
36
37
|
)
|
37
38
|
|
38
|
-
if stream
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
stream
|
44
|
-
end
|
39
|
+
return stream if stream
|
40
|
+
|
41
|
+
response = request.dig('choices', 0, 'message', 'content')
|
42
|
+
content = schema ? ::Hashie::Mash.new(JSON.parse(response)) : response
|
43
|
+
array?(schema) ? content.items : content
|
45
44
|
end
|
46
45
|
|
47
46
|
# OpenAI’s text embeddings measure the relatedness of text strings. An embedding is a vector of floating point
|
@@ -78,10 +77,26 @@ module L
|
|
78
77
|
|
79
78
|
[
|
80
79
|
system_message ? L.system(system_message) : nil,
|
81
|
-
L.user(user_message)
|
80
|
+
vision(L.user(user_message))
|
82
81
|
].compact
|
83
82
|
end
|
84
83
|
|
84
|
+
def vision(message)
|
85
|
+
image = message[:_image]
|
86
|
+
base = message.except(:_image)
|
87
|
+
|
88
|
+
return base unless image
|
89
|
+
|
90
|
+
messages = [
|
91
|
+
{ 'type' => 'text', 'text' => message[:content] },
|
92
|
+
{
|
93
|
+
'type' => 'image_url', 'image_url' => { 'url' => "data:image/jpeg;base64,#{Base64.encode64(image)}" }
|
94
|
+
}
|
95
|
+
]
|
96
|
+
|
97
|
+
base.merge(content: messages)
|
98
|
+
end
|
99
|
+
|
85
100
|
def array?(schema)
|
86
101
|
schema.is_a?(Hash) && schema.dig('json_schema', 'schema', 'properties', 'items', 'type') == 'array'
|
87
102
|
end
|
data/lib/lammy/schema.rb
CHANGED
@@ -2,15 +2,25 @@
|
|
2
2
|
|
3
3
|
module L
|
4
4
|
module Schema
|
5
|
+
def self.formatted?(content)
|
6
|
+
content.is_a?(Hash) && content.key?(:role) && content.key?(:content)
|
7
|
+
end
|
8
|
+
|
5
9
|
def system(content)
|
10
|
+
return content if L::Schema.formatted?(content)
|
11
|
+
|
6
12
|
{ role: :system, content: content }
|
7
13
|
end
|
8
14
|
|
9
|
-
def user(content)
|
10
|
-
|
15
|
+
def user(content, image: nil)
|
16
|
+
return content if L::Schema.formatted?(content)
|
17
|
+
|
18
|
+
{ role: :user, content: content, _image: image }
|
11
19
|
end
|
12
20
|
|
13
21
|
def assistant(content)
|
22
|
+
return content if L::Schema.formatted?(content)
|
23
|
+
|
14
24
|
{ role: :assistant, content: content }
|
15
25
|
end
|
16
26
|
|
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.8.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-10-
|
11
|
+
date: 2024-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anthropic
|