lammy 0.6.0 → 0.7.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 +5 -1
- data/lib/lammy/openai.rb +16 -6
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 160025e8046546a063a9a75deb7e1f29186973f9b7fe2096018734c6d9e1a523
|
4
|
+
data.tar.gz: 0402c839e540115883c2b3bc99b065ab2b7f590824aa05aa9b50ac42e288fd76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3db10fe3e0615d2a0c8a739e6a9baf5c406aa3ed8d7dc18f9521a470ffcd51a2544a9365f51614ff2f0f70d34719b485de3bbd18a82cacde05b529314808b93e
|
7
|
+
data.tar.gz: 65ab65d92be1cca2f88382ab3c347c83c2182493dc4bf358379c35fb16d06d13053ed57d3b266dd2674e337c5db07090cc937e5ffa05ed4d113225d8cabf0a06
|
data/lib/lammy/chat.rb
CHANGED
@@ -23,6 +23,10 @@ module L
|
|
23
23
|
@system_message = message
|
24
24
|
end
|
25
25
|
|
26
|
+
define_singleton_method(:stream) do |proc|
|
27
|
+
@stream = proc
|
28
|
+
end
|
29
|
+
|
26
30
|
# Call the original method to get the user message
|
27
31
|
user_message = original_method.bind(self).call(*args, &block)
|
28
32
|
|
@@ -35,7 +39,7 @@ module L
|
|
35
39
|
raise "Unsupported model: #{settings[:model]}"
|
36
40
|
end
|
37
41
|
|
38
|
-
client.chat(user_message, @system_message)
|
42
|
+
client.chat(user_message, @system_message, @stream)
|
39
43
|
end
|
40
44
|
end
|
41
45
|
end
|
data/lib/lammy/openai.rb
CHANGED
@@ -22,20 +22,26 @@ module L
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# Generate a response with support for structured output
|
25
|
-
def chat(user_message, system_message = nil)
|
25
|
+
def chat(user_message, system_message = nil, stream = nil)
|
26
26
|
schema = schema(settings)
|
27
27
|
messages = messages(user_message, system_message)
|
28
28
|
|
29
|
-
|
29
|
+
request = client.chat(
|
30
30
|
parameters: {
|
31
31
|
model: settings[:model],
|
32
32
|
response_format: schema,
|
33
|
-
messages: messages
|
33
|
+
messages: messages,
|
34
|
+
stream: stream ? ->(chunk) { stream.call(stream_content(chunk)) } : nil
|
34
35
|
}.compact
|
35
|
-
)
|
36
|
+
)
|
36
37
|
|
37
|
-
|
38
|
-
|
38
|
+
if stream.nil?
|
39
|
+
response = request.dig('choices', 0, 'message', 'content')
|
40
|
+
content = schema ? ::Hashie::Mash.new(JSON.parse(response)) : response
|
41
|
+
array?(schema) ? content.items : content
|
42
|
+
else
|
43
|
+
stream
|
44
|
+
end
|
39
45
|
end
|
40
46
|
|
41
47
|
# OpenAI’s text embeddings measure the relatedness of text strings. An embedding is a vector of floating point
|
@@ -80,6 +86,10 @@ module L
|
|
80
86
|
schema.is_a?(Hash) && schema.dig('json_schema', 'schema', 'properties', 'items', 'type') == 'array'
|
81
87
|
end
|
82
88
|
|
89
|
+
def stream_content(chunk)
|
90
|
+
chunk.dig('choices', 0, 'delta', 'content')
|
91
|
+
end
|
92
|
+
|
83
93
|
def client
|
84
94
|
return settings[:client] if settings[:client]
|
85
95
|
|
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.7.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-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anthropic
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '7.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.14.2
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.14.2
|
55
69
|
description: An LLM library for Ruby
|
56
70
|
email: kamil@nicieja.co
|
57
71
|
executables: []
|