ruby_llm 1.3.1 → 1.3.2beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2287ea41c7591e593a315a35fd34ef8e32968c1b7337042c0b08338caeda784
4
- data.tar.gz: 55a2690e1faa46d9ecdda3e8115ae64549be8d52c80fb5ffdb2aadd6fa8887dd
3
+ metadata.gz: b069393971ae461a63487ba8a13d1f81a791d96fc0f537fceb02de88d9e690d0
4
+ data.tar.gz: c34f0884ffd9cffd3c0311ebbe8d7fbacc151b17512984b999dace24fa0bfe74
5
5
  SHA512:
6
- metadata.gz: 8d5c7d2b3b73f289bdad5c5faac487a03221101302567a1d36b073de84e97e3650cc4d103ce6f9e641659c0ecc69484593535ed964b933f7d14b19b5dce34e81
7
- data.tar.gz: 1515124ad74198461fdbc8105f7173392df7bee2038c701ad85d6da258107bb3ddd366878fa140bd5de354b41dfe8abc5887a78adf2c7cb3beb0cf6caa64f764
6
+ metadata.gz: 5ba83dd19febb3070e0f127eb6dc87fd92664d8afae2f4024240588fdc8624dabdcc5c2b089e5147d22601c3505b966f4bed7383fbf6e36ce8dff5bea568ef87
7
+ data.tar.gz: b7940d1a6b8bf72ba08eb9d63440505935022d372ffdab6aac51599fb23a9e68af49085cb965488f7306d28143f7b39ec9c0138a93ba52ad3ca3ac574e03a442
@@ -65,13 +65,17 @@
65
65
  "gemini": "gemini-2.0-flash-lite-001",
66
66
  "openrouter": "google/gemini-2.0-flash-lite-001"
67
67
  },
68
- "gemini-2.5-flash-preview-05-20": {
69
- "gemini": "gemini-2.5-flash-preview-05-20",
70
- "openrouter": "google/gemini-2.5-flash-preview-05-20"
68
+ "gemini-2.5-flash": {
69
+ "gemini": "gemini-2.5-flash",
70
+ "openrouter": "google/gemini-2.5-flash"
71
71
  },
72
- "gemini-2.5-pro-exp-03-25": {
73
- "gemini": "gemini-2.5-pro-exp-03-25",
74
- "openrouter": "google/gemini-2.5-pro-exp-03-25"
72
+ "gemini-2.5-flash-lite-preview-06-17": {
73
+ "gemini": "gemini-2.5-flash-lite-preview-06-17",
74
+ "openrouter": "google/gemini-2.5-flash-lite-preview-06-17"
75
+ },
76
+ "gemini-2.5-pro": {
77
+ "gemini": "gemini-2.5-pro",
78
+ "openrouter": "google/gemini-2.5-pro"
75
79
  },
76
80
  "gemini-2.5-pro-preview-05-06": {
77
81
  "gemini": "gemini-2.5-pro-preview-05-06",
@@ -89,18 +93,14 @@
89
93
  "gemini": "gemma-3-4b-it",
90
94
  "openrouter": "google/gemma-3-4b-it"
91
95
  },
96
+ "gemma-3n-e4b-it": {
97
+ "gemini": "gemma-3n-e4b-it",
98
+ "openrouter": "google/gemma-3n-e4b-it"
99
+ },
92
100
  "gpt-3.5-turbo": {
93
101
  "openai": "gpt-3.5-turbo",
94
102
  "openrouter": "openai/gpt-3.5-turbo"
95
103
  },
96
- "gpt-3.5-turbo-0125": {
97
- "openai": "gpt-3.5-turbo-0125",
98
- "openrouter": "openai/gpt-3.5-turbo-0125"
99
- },
100
- "gpt-3.5-turbo-1106": {
101
- "openai": "gpt-3.5-turbo-1106",
102
- "openrouter": "openai/gpt-3.5-turbo-1106"
103
- },
104
104
  "gpt-3.5-turbo-16k": {
105
105
  "openai": "gpt-3.5-turbo-16k",
106
106
  "openrouter": "openai/gpt-3.5-turbo-16k"
@@ -137,10 +137,6 @@
137
137
  "openai": "gpt-4.1-nano",
138
138
  "openrouter": "openai/gpt-4.1-nano"
139
139
  },
140
- "gpt-4.5-preview": {
141
- "openai": "gpt-4.5-preview",
142
- "openrouter": "openai/gpt-4.5-preview"
143
- },
144
140
  "gpt-4o": {
145
141
  "openai": "gpt-4o",
146
142
  "openrouter": "openai/gpt-4o"
@@ -99,7 +99,7 @@ module RubyLLM
99
99
  def determine_mime_type
100
100
  return @mime_type = active_storage_content_type if active_storage? && active_storage_content_type.present?
101
101
 
102
- @mime_type = RubyLLM::MimeType.for(@source, name: @filename)
102
+ @mime_type = RubyLLM::MimeType.for(url? ? nil : @source, name: @filename)
103
103
  @mime_type = RubyLLM::MimeType.for(content) if @mime_type == 'application/octet-stream'
104
104
  @mime_type = 'audio/wav' if @mime_type == 'audio/x-wav' # Normalize WAV type
105
105
  end
data/lib/ruby_llm/chat.rb CHANGED
@@ -93,18 +93,19 @@ module RubyLLM
93
93
  end
94
94
 
95
95
  def complete(&)
96
- @on[:new_message]&.call
97
96
  response = @provider.complete(
98
97
  messages,
99
98
  tools: @tools,
100
99
  temperature: @temperature,
101
100
  model: @model.id,
102
101
  connection: @connection,
103
- &
102
+ &wrap_streaming_block(&)
104
103
  )
105
- @on[:end_message]&.call(response)
106
104
 
105
+ @on[:new_message]&.call unless block_given?
107
106
  add_message response
107
+ @on[:end_message]&.call(response)
108
+
108
109
  if response.tool_call?
109
110
  handle_tool_calls(response, &)
110
111
  else
@@ -124,11 +125,28 @@ module RubyLLM
124
125
 
125
126
  private
126
127
 
128
+ def wrap_streaming_block(&block)
129
+ return nil unless block_given?
130
+
131
+ first_chunk_received = false
132
+
133
+ proc do |chunk|
134
+ # Create message on first content chunk
135
+ unless first_chunk_received
136
+ first_chunk_received = true
137
+ @on[:new_message]&.call
138
+ end
139
+
140
+ # Pass chunk to user's block
141
+ block.call chunk
142
+ end
143
+ end
144
+
127
145
  def handle_tool_calls(response, &)
128
146
  response.tool_calls.each_value do |tool_call|
129
147
  @on[:new_message]&.call
130
148
  result = execute_tool tool_call
131
- message = add_tool_result tool_call.id, result
149
+ message = add_message role: :tool, content: result.to_s, tool_call_id: tool_call.id
132
150
  @on[:end_message]&.call(message)
133
151
  end
134
152
 
@@ -140,13 +158,5 @@ module RubyLLM
140
158
  args = tool_call.arguments
141
159
  tool.call(args)
142
160
  end
143
-
144
- def add_tool_result(tool_use_id, result)
145
- add_message(
146
- role: :tool,
147
- content: result.is_a?(Hash) && result[:error] ? result[:error] : result.to_s,
148
- tool_call_id: tool_use_id
149
- )
150
- end
151
161
  end
152
162
  end