ox-ai-workers 1.1.2.11 → 1.1.2.13
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/oxaiworkers/iterator.rb +20 -7
- data/lib/oxaiworkers/models/anthropic_max.rb +1 -1
- data/lib/oxaiworkers/module_request.rb +6 -4
- data/lib/oxaiworkers/request.rb +10 -0
- data/lib/oxaiworkers/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '05159101c78d6f6cf56d925fab18fd9e1bd0346889be8bbb04d1fe1e29f0f070'
|
4
|
+
data.tar.gz: 6ca247c2fa78ef1f1e13a5b6e0c8fffafcad6efaf9ab0f71a162135e03252892
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5aac3e0f145beedd1166ed4844fe8813f6b75fb21ed3b9f9e4353cbe7781a0971a464586e0d9b5e3959d193c7123e3b8472e370257dc643746d6e0250812e31
|
7
|
+
data.tar.gz: 35f03218b1f2de4d99741de669736a18c7aff8c7b7e5a25ca4d3f8e414fe9af5f24015248d2bf69f78c18767d006059ab6e609bd564342feca651e4665037106
|
data/lib/oxaiworkers/iterator.rb
CHANGED
@@ -76,6 +76,8 @@ module OxAiWorkers
|
|
76
76
|
@tasks = []
|
77
77
|
@messages = []
|
78
78
|
@call_id = 0
|
79
|
+
# Очищаем сообщения в worker, если он существует
|
80
|
+
@worker.messages = [] if @worker&.respond_to?(:messages=)
|
79
81
|
complete_iteration
|
80
82
|
end
|
81
83
|
|
@@ -91,7 +93,7 @@ module OxAiWorkers
|
|
91
93
|
else
|
92
94
|
OxAiWorkers.logger.warn "Iterator::inner_monologue is not available: #{speach}"
|
93
95
|
end
|
94
|
-
|
96
|
+
speach
|
95
97
|
end
|
96
98
|
|
97
99
|
def outer_voice(text:)
|
@@ -103,7 +105,7 @@ module OxAiWorkers
|
|
103
105
|
inner_monologue(speach: text)
|
104
106
|
end
|
105
107
|
|
106
|
-
|
108
|
+
text
|
107
109
|
end
|
108
110
|
|
109
111
|
def finish_it
|
@@ -121,6 +123,8 @@ module OxAiWorkers
|
|
121
123
|
# @worker.last_call = nil
|
122
124
|
@worker.call_stack = @call_stack.dup
|
123
125
|
@worker.stop_double_calls = @stop_double_calls
|
126
|
+
# Не очищаем сообщения, а сохраняем их в переменной
|
127
|
+
current_messages = @worker.messages || []
|
124
128
|
@worker.messages = []
|
125
129
|
@worker.append(role: :system, content: "<role>\n#{@role}\n</role>") if @role.present?
|
126
130
|
|
@@ -130,6 +134,8 @@ module OxAiWorkers
|
|
130
134
|
@tools.each do |tool|
|
131
135
|
@worker.append(role: :user, content: tool.context) if tool.respond_to?(:context) && tool.context.present?
|
132
136
|
end
|
137
|
+
# Добавляем сохраненные сообщения обратно, если они не пустые
|
138
|
+
@worker.append(messages: current_messages) if current_messages.present?
|
133
139
|
@worker.append(messages: @messages)
|
134
140
|
# @tasks.each { |task| @worker.append(role: :user, content: "<task>\n#{task}\n</task>") }
|
135
141
|
@worker.tools = [function_schemas]
|
@@ -170,9 +176,13 @@ module OxAiWorkers
|
|
170
176
|
end
|
171
177
|
|
172
178
|
def next_iteration
|
179
|
+
# Сначала добавляем сообщения из очереди к worker
|
180
|
+
@worker.append(messages: @queue)
|
181
|
+
# Затем добавляем их к локальным сообщениям
|
173
182
|
@messages += @queue
|
183
|
+
OxAiWorkers.logger.warn "Iterator::Next iteration: #{@messages.count}/#{@queue.count}"
|
184
|
+
# И только потом очищаем очередь
|
174
185
|
@queue = []
|
175
|
-
@worker.append(messages: @messages)
|
176
186
|
request!
|
177
187
|
end
|
178
188
|
|
@@ -241,17 +251,20 @@ module OxAiWorkers
|
|
241
251
|
out:
|
242
252
|
)
|
243
253
|
end
|
244
|
-
@worker.
|
254
|
+
@worker.finish_without_cleanup if @worker.respond_to?(:finish_without_cleanup)
|
245
255
|
iterate! if can_iterate?
|
246
256
|
end
|
247
257
|
result = @worker.result || @worker.errors
|
248
|
-
|
249
|
-
|
258
|
+
if result.present?
|
259
|
+
OxAiWorkers.logger.warn "Iterator::No tool calls: #{result}"
|
260
|
+
outer_voice text: result
|
261
|
+
end
|
250
262
|
end
|
251
263
|
|
252
264
|
def complete_iteration
|
253
265
|
@queue = []
|
254
|
-
|
266
|
+
# Используем finish_without_cleanup вместо finish
|
267
|
+
@worker.finish_without_cleanup if @worker.respond_to?(:finish_without_cleanup)
|
255
268
|
end
|
256
269
|
|
257
270
|
def add_task(task)
|
@@ -41,12 +41,14 @@ module OxAiWorkers
|
|
41
41
|
@messages.each do |message|
|
42
42
|
content = message[:content]
|
43
43
|
if content.is_a?(String)
|
44
|
-
OxAiWorkers.logger.
|
44
|
+
OxAiWorkers.logger.warn "Request (String)[#{message[:role]}]: #{content.truncate(500)}"
|
45
45
|
elsif content.is_a?(Array)
|
46
|
-
types = content.map
|
47
|
-
|
46
|
+
types = content.map do |item|
|
47
|
+
"#{item[:type]}: #{item[:content]&.truncate(500)}"
|
48
|
+
end.compact.join(', ')
|
49
|
+
OxAiWorkers.logger.warn "Request (Array): [#{types}]"
|
48
50
|
else
|
49
|
-
OxAiWorkers.logger.
|
51
|
+
OxAiWorkers.logger.warn "Request (Other): #{message.inspect}"
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
data/lib/oxaiworkers/request.rb
CHANGED
@@ -9,6 +9,16 @@ module OxAiWorkers
|
|
9
9
|
cleanup
|
10
10
|
end
|
11
11
|
|
12
|
+
# Метод для завершения без очистки сообщений
|
13
|
+
def finish_without_cleanup
|
14
|
+
@custom_id = SecureRandom.uuid
|
15
|
+
# Очищаем только результат и ошибки, но не сообщения
|
16
|
+
@result = nil
|
17
|
+
@errors = nil
|
18
|
+
@tool_calls = nil
|
19
|
+
@is_truncated = false
|
20
|
+
end
|
21
|
+
|
12
22
|
def request!
|
13
23
|
response = @model.request(params)
|
14
24
|
parse_choices(response)
|
data/lib/oxaiworkers/version.rb
CHANGED