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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/lammy/chat.rb +5 -1
  3. data/lib/lammy/openai.rb +16 -6
  4. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 656f2074be0687f9996946697d7bc3ea5286b384749113521012bb061f88f914
4
- data.tar.gz: de4f1f7c8ec35448807230777ee4a5e75a3eacb7d66c88978296d5f30bf38efd
3
+ metadata.gz: 160025e8046546a063a9a75deb7e1f29186973f9b7fe2096018734c6d9e1a523
4
+ data.tar.gz: 0402c839e540115883c2b3bc99b065ab2b7f590824aa05aa9b50ac42e288fd76
5
5
  SHA512:
6
- metadata.gz: 1dc35a49b4139d03baf530930d6157023a8b6e4eed36fdf26ad9c042a4e8c8d87ee812330aef2c047e9f6f45d4240a6c5c74abd1fc223ca011a6cc32fe1fdfff
7
- data.tar.gz: 9066b3c808e63abc01822ec355bcf49dd19aa5632c5b68640ddba5d33fd951c05f12da14ea600049d9bdbe66f3a8ad803f3e6194ea6a114080887ee4178a2a4d
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
- response = client.chat(
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
- ).dig('choices', 0, 'message', 'content')
36
+ )
36
37
 
37
- content = schema ? ::Hashie::Mash.new(JSON.parse(response)) : response
38
- array?(schema) ? content.items : content
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.6.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-05 00:00:00.000000000 Z
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: []