lammy 0.4.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lammy/chat.rb +1 -1
- data/lib/lammy/openai.rb +14 -4
- data/lib/lammy/schema.rb +16 -4
- 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: 656f2074be0687f9996946697d7bc3ea5286b384749113521012bb061f88f914
|
4
|
+
data.tar.gz: de4f1f7c8ec35448807230777ee4a5e75a3eacb7d66c88978296d5f30bf38efd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dc35a49b4139d03baf530930d6157023a8b6e4eed36fdf26ad9c042a4e8c8d87ee812330aef2c047e9f6f45d4240a6c5c74abd1fc223ca011a6cc32fe1fdfff
|
7
|
+
data.tar.gz: 9066b3c808e63abc01822ec355bcf49dd19aa5632c5b68640ddba5d33fd951c05f12da14ea600049d9bdbe66f3a8ad803f3e6194ea6a114080887ee4178a2a4d
|
data/lib/lammy/chat.rb
CHANGED
@@ -18,7 +18,7 @@ module L
|
|
18
18
|
# Initialize context
|
19
19
|
@system_message = nil
|
20
20
|
|
21
|
-
#
|
21
|
+
# `context` sets the system message and is available within the instance
|
22
22
|
define_singleton_method(:context) do |message|
|
23
23
|
@system_message = message
|
24
24
|
end
|
data/lib/lammy/openai.rb
CHANGED
@@ -24,12 +24,13 @@ module L
|
|
24
24
|
# Generate a response with support for structured output
|
25
25
|
def chat(user_message, system_message = nil)
|
26
26
|
schema = schema(settings)
|
27
|
+
messages = messages(user_message, system_message)
|
28
|
+
|
27
29
|
response = client.chat(
|
28
30
|
parameters: {
|
29
|
-
model: settings[:model],
|
30
|
-
|
31
|
-
|
32
|
-
].compact
|
31
|
+
model: settings[:model],
|
32
|
+
response_format: schema,
|
33
|
+
messages: messages
|
33
34
|
}.compact
|
34
35
|
).dig('choices', 0, 'message', 'content')
|
35
36
|
|
@@ -66,6 +67,15 @@ module L
|
|
66
67
|
}
|
67
68
|
end
|
68
69
|
|
70
|
+
def messages(user_message, system_message)
|
71
|
+
return user_message if user_message.is_a?(Array)
|
72
|
+
|
73
|
+
[
|
74
|
+
system_message ? L.system(system_message) : nil,
|
75
|
+
L.user(user_message)
|
76
|
+
].compact
|
77
|
+
end
|
78
|
+
|
69
79
|
def array?(schema)
|
70
80
|
schema.is_a?(Hash) && schema.dig('json_schema', 'schema', 'properties', 'items', 'type') == 'array'
|
71
81
|
end
|
data/lib/lammy/schema.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module L
|
4
|
-
# Structured Outputs is a feature that ensures the model will always generate responses
|
5
|
-
# that adhere to your supplied JSON Schema, so you don't need to worry about the model
|
6
|
-
# omitting a required key, or hallucinating an invalid enum value. This is a set of
|
7
|
-
# helper methods to help you define your JSON Schema easily.
|
8
4
|
module Schema
|
5
|
+
def system(content)
|
6
|
+
{ role: :system, content: content }
|
7
|
+
end
|
8
|
+
|
9
|
+
def user(content)
|
10
|
+
{ role: :user, content: content }
|
11
|
+
end
|
12
|
+
|
13
|
+
def assistant(content)
|
14
|
+
{ role: :assistant, content: content }
|
15
|
+
end
|
16
|
+
|
17
|
+
# Structured Outputs is a feature that ensures the model will always generate responses
|
18
|
+
# that adhere to your supplied JSON Schema, so you don't need to worry about the model
|
19
|
+
# omitting a required key, or hallucinating an invalid enum value. This is a set of
|
20
|
+
# helper methods to help you define your JSON Schema easily.
|
9
21
|
def to_a(object)
|
10
22
|
{
|
11
23
|
'type' => 'object',
|
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.6.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-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anthropic
|