ox-ai-workers 0.5.1 → 0.5.2
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/CHANGELOG.md +9 -4
- data/README.md +13 -4
- data/lib/ox-ai-workers.rb +11 -1
- data/lib/oxaiworkers/assistant/coder.rb +4 -4
- data/lib/oxaiworkers/assistant/localizer.rb +25 -0
- data/lib/oxaiworkers/assistant/sysop.rb +4 -4
- data/lib/oxaiworkers/contextual_logger.rb +60 -0
- data/lib/oxaiworkers/delayed_request.rb +1 -1
- data/lib/oxaiworkers/iterator.rb +1 -9
- data/lib/oxaiworkers/module_request.rb +0 -3
- data/lib/oxaiworkers/request.rb +1 -3
- data/lib/oxaiworkers/state_batch.rb +0 -5
- data/lib/oxaiworkers/state_helper.rb +1 -1
- data/lib/oxaiworkers/tool/database.rb +3 -2
- data/lib/oxaiworkers/tool/eval.rb +3 -2
- data/lib/oxaiworkers/tool/file_system.rb +3 -3
- data/lib/oxaiworkers/version.rb +1 -1
- data/locales/en.assistant.yml +5 -1
- data/locales/ru.assistant.yml +4 -0
- data/template/my_assistant.rb +5 -5
- data/template/start +2 -0
- data/template/tools/my_tool.rb +1 -1
- metadata +13 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b0bc20d6b4c721456a19d590a596d989b10b9dd246027ce586404eb4741946a
|
4
|
+
data.tar.gz: 5fd3e688b4898cb976ebc91f2da315fc3efa22b2a347349e3958373a64426213
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98d855e5b18762f1acf4233e646733539e29954331e39501ea053c9641cc049ec15c5830523ee6763775e5a2d65123e6dc910d2c7bac41809fef12d9170f4aa3
|
7
|
+
data.tar.gz: cce07e1dc69d769df0830dc175481996a733d71428de65a6632a4aadae129192004a3b795008c370792baa3fc50dc88f89db6d9ea2a9e4459a66b69a07961bcb
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.5.2] - 2024-07-31
|
4
|
+
|
5
|
+
- Added new assistant: `Localizer`
|
6
|
+
- Added logger
|
7
|
+
|
3
8
|
## [0.5.1] - 2024-07-30
|
4
9
|
|
5
10
|
- Improved FileSystem functionality
|
@@ -27,10 +32,10 @@
|
|
27
32
|
|
28
33
|
## [0.3.0] - 2024-07-30
|
29
34
|
|
30
|
-
- on_inner_monologue: ->(text:) { puts
|
31
|
-
- on_outer_voice: ->(text:) { puts
|
32
|
-
- on_action_request: ->(text:) { puts
|
33
|
-
- on_pack_history: ->(text:) { puts
|
35
|
+
- on_inner_monologue: ->(text:) { puts "monologue: #{text}" }
|
36
|
+
- on_outer_voice: ->(text:) { puts "voice: #{text}" }
|
37
|
+
- on_action_request: ->(text:) { puts "action: #{text}" }
|
38
|
+
- on_pack_history: ->(text:) { puts "summary: #{text}" }
|
34
39
|
|
35
40
|
## [0.2.5] - 2024-07-30
|
36
41
|
|
data/README.md
CHANGED
@@ -111,10 +111,10 @@ iterator = OxAiWorkers::Iterator.new(
|
|
111
111
|
worker: my_worker,
|
112
112
|
tools: [my_tool],
|
113
113
|
role: "You are a software agent inside my computer",
|
114
|
-
on_inner_monologue: ->(text:) { puts
|
115
|
-
on_outer_voice: ->(text:) { puts
|
116
|
-
on_action_request: ->(text:) { puts
|
117
|
-
on_pack_history: ->(text:) { puts
|
114
|
+
on_inner_monologue: ->(text:) { puts "monologue: #{text}".colorize(:yellow) },
|
115
|
+
on_outer_voice: ->(text:) { puts "voice: #{text}".colorize(:green) },
|
116
|
+
on_action_request: ->(text:) { puts "action: #{text}".colorize(:red) },
|
117
|
+
on_pack_history: ->(text:) { puts "summary: #{text}".colorize(:blue) }
|
118
118
|
)
|
119
119
|
|
120
120
|
iterator.add_task("Show files in current directory.")
|
@@ -158,6 +158,15 @@ After this, in the `my_assistant.rb` file, you can find an example of an assista
|
|
158
158
|
.oxaiworkers-local/start
|
159
159
|
```
|
160
160
|
|
161
|
+
## Logging
|
162
|
+
|
163
|
+
OxAiWorkers uses standard logging mechanisms and defaults to `:warn` level. Most messages are at info level, but we will add debug or warn statements as needed.
|
164
|
+
To show all log messages:
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
OxAiWorkers.logger.level = :debug
|
168
|
+
```
|
169
|
+
|
161
170
|
## Features
|
162
171
|
|
163
172
|
- **Generative Intelligence**: Leverages OpenAI's capabilities to enhance task execution.
|
data/lib/ox-ai-workers.rb
CHANGED
@@ -2,12 +2,13 @@
|
|
2
2
|
|
3
3
|
require 'faraday'
|
4
4
|
require 'faraday/multipart'
|
5
|
-
require '
|
5
|
+
require 'colorize'
|
6
6
|
require 'openai'
|
7
7
|
require 'yaml'
|
8
8
|
require 'json'
|
9
9
|
|
10
10
|
require_relative 'oxaiworkers/version'
|
11
|
+
require_relative 'oxaiworkers/contextual_logger'
|
11
12
|
require_relative 'oxaiworkers/load_i18n'
|
12
13
|
require_relative 'oxaiworkers/present_compat'
|
13
14
|
require_relative 'oxaiworkers/module_request'
|
@@ -54,8 +55,17 @@ module OxAiWorkers
|
|
54
55
|
|
55
56
|
class << self
|
56
57
|
attr_writer :configuration
|
58
|
+
attr_reader :logger
|
59
|
+
|
60
|
+
# @param logger [Logger]
|
61
|
+
# @return [ContextualLogger]
|
62
|
+
def logger=(logger)
|
63
|
+
@logger = ContextualLogger.new(logger)
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
67
|
+
self.logger ||= ::Logger.new($stdout, level: :info)
|
68
|
+
|
59
69
|
def self.configuration
|
60
70
|
@configuration ||= OxAiWorkers::Configuration.new
|
61
71
|
end
|
@@ -10,10 +10,10 @@ module OxAiWorkers
|
|
10
10
|
worker: init_worker(delayed: delayed, model: model),
|
11
11
|
role: format(I18n.t('oxaiworkers.assistant.coder.role'), language),
|
12
12
|
tools: [Tool::Eval.new, Tool::FileSystem.new],
|
13
|
-
on_inner_monologue: ->(text:) { puts
|
14
|
-
on_outer_voice: ->(text:) { puts
|
15
|
-
on_action_request: ->(text:) { puts
|
16
|
-
on_pack_history: ->(text:) { puts
|
13
|
+
on_inner_monologue: ->(text:) { puts "monologue: #{text}".colorize(:yellow) },
|
14
|
+
on_outer_voice: ->(text:) { puts "voice: #{text}".colorize(:green) },
|
15
|
+
on_action_request: ->(text:) { puts "action: #{text}".colorize(:red) },
|
16
|
+
on_pack_history: ->(text:) { puts "summary: #{text}".colorize(:blue) }
|
17
17
|
)
|
18
18
|
end
|
19
19
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OxAiWorkers
|
4
|
+
module Assistant
|
5
|
+
class Localizer
|
6
|
+
include OxAiWorkers::Assistant::ModuleBase
|
7
|
+
|
8
|
+
def initialize(delayed: false, model: nil, language: 'русский', locale: :ru, source: 'english')
|
9
|
+
@iterator = Iterator.new(
|
10
|
+
worker: init_worker(delayed: delayed, model: model),
|
11
|
+
role: format(I18n.t('oxaiworkers.assistant.localizer.role'), language),
|
12
|
+
tools: [Tool::Eval.new, Tool::FileSystem.new],
|
13
|
+
on_inner_monologue: ->(text:) { puts "monologue: #{text}".colorize(:yellow) },
|
14
|
+
on_outer_voice: ->(text:) { puts "voice: #{text}".colorize(:green) },
|
15
|
+
on_action_request: ->(text:) { puts "action: #{text}".colorize(:red) },
|
16
|
+
on_pack_history: ->(text:) { puts "summary: #{text}".colorize(:blue) }
|
17
|
+
)
|
18
|
+
@iterator.add_context(format(I18n.t('oxaiworkers.assistant.localizer.source'), source))
|
19
|
+
|
20
|
+
@iterator.add_context(format(I18n.t('oxaiworkers.assistant.localizer.locale'),
|
21
|
+
language, locale))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -10,10 +10,10 @@ module OxAiWorkers
|
|
10
10
|
worker: init_worker(delayed: delayed, model: model),
|
11
11
|
role: I18n.t('oxaiworkers.assistant.sysop.role'),
|
12
12
|
tools: [Tool::Eval.new],
|
13
|
-
on_inner_monologue: ->(text:) { puts
|
14
|
-
on_outer_voice: ->(text:) { puts
|
15
|
-
on_action_request: ->(text:) { puts
|
16
|
-
on_pack_history: ->(text:) { puts
|
13
|
+
on_inner_monologue: ->(text:) { puts "monologue: #{text}".colorize(:yellow) },
|
14
|
+
on_outer_voice: ->(text:) { puts "voice: #{text}".colorize(:green) },
|
15
|
+
on_action_request: ->(text:) { puts "action: #{text}".colorize(:red) },
|
16
|
+
on_pack_history: ->(text:) { puts "summary: #{text}".colorize(:blue) }
|
17
17
|
)
|
18
18
|
end
|
19
19
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OxAiWorkers
|
4
|
+
class ContextualLogger
|
5
|
+
MESSAGE_COLOR_OPTIONS = {
|
6
|
+
debug: {
|
7
|
+
color: :white
|
8
|
+
},
|
9
|
+
error: {
|
10
|
+
color: :red
|
11
|
+
},
|
12
|
+
fatal: {
|
13
|
+
color: :red,
|
14
|
+
background: :white,
|
15
|
+
mode: :bold
|
16
|
+
},
|
17
|
+
unknown: {
|
18
|
+
color: :white
|
19
|
+
},
|
20
|
+
info: {
|
21
|
+
color: :magenta
|
22
|
+
},
|
23
|
+
warn: {
|
24
|
+
color: :yellow,
|
25
|
+
mode: :bold
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
def initialize(logger)
|
30
|
+
@logger = logger
|
31
|
+
@levels = Logger::Severity.constants.map(&:downcase)
|
32
|
+
end
|
33
|
+
|
34
|
+
def respond_to_missing?(method, include_private = false)
|
35
|
+
@logger.respond_to?(method, include_private)
|
36
|
+
end
|
37
|
+
|
38
|
+
def method_missing(method, *args, **kwargs, &block)
|
39
|
+
return @logger.send(method, *args, **kwargs, &block) unless @levels.include?(method)
|
40
|
+
|
41
|
+
for_class = kwargs.delete(:for)
|
42
|
+
for_class_name = for_class&.name
|
43
|
+
|
44
|
+
log_line_parts = []
|
45
|
+
log_line_parts << '[OxAiWorkers]' # .colorize(color: :yellow)
|
46
|
+
log_line_parts << if for_class.respond_to?(:logger_options)
|
47
|
+
"#{"[#{for_class_name}]".colorize(for_class.logger_options)}:"
|
48
|
+
elsif for_class_name
|
49
|
+
"[#{for_class_name}]:"
|
50
|
+
end
|
51
|
+
log_line_parts << args.first.colorize(MESSAGE_COLOR_OPTIONS[method])
|
52
|
+
log_line = log_line_parts.compact.join(' ')
|
53
|
+
|
54
|
+
@logger.send(
|
55
|
+
method,
|
56
|
+
log_line
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/oxaiworkers/iterator.rb
CHANGED
@@ -26,7 +26,6 @@ module OxAiWorkers
|
|
26
26
|
|
27
27
|
def initialize(worker:, role: nil, tools: [], on_inner_monologue: nil, on_outer_voice: nil, on_action_request: nil,
|
28
28
|
on_pack_history: nil)
|
29
|
-
puts "call: #{__method__}"
|
30
29
|
@worker = worker
|
31
30
|
@tools = [self] + tools
|
32
31
|
@role = role
|
@@ -86,7 +85,6 @@ module OxAiWorkers
|
|
86
85
|
end
|
87
86
|
|
88
87
|
def init
|
89
|
-
puts "call: #{__method__} state: #{state_name}"
|
90
88
|
rebuild_worker
|
91
89
|
request!
|
92
90
|
end
|
@@ -103,7 +101,6 @@ module OxAiWorkers
|
|
103
101
|
end
|
104
102
|
|
105
103
|
def next_iteration
|
106
|
-
puts "call: #{__method__} state: #{state_name}"
|
107
104
|
@worker.append(messages: @queue)
|
108
105
|
@messages += @queue
|
109
106
|
@queue = []
|
@@ -111,19 +108,16 @@ module OxAiWorkers
|
|
111
108
|
end
|
112
109
|
|
113
110
|
def external_request
|
114
|
-
puts "call: #{__method__} state: #{state_name}"
|
115
111
|
@worker.request!
|
116
112
|
ticker
|
117
113
|
end
|
118
114
|
|
119
115
|
def ticker
|
120
|
-
puts "call: #{__method__} state: #{state_name}"
|
121
116
|
sleep(60) until @worker.completed?
|
122
117
|
analyze!
|
123
118
|
end
|
124
119
|
|
125
120
|
def process_result(_transition)
|
126
|
-
puts "call: #{__method__} state: #{state_name}"
|
127
121
|
@result = @worker.result || @worker.errors
|
128
122
|
if @worker.tool_calls.present?
|
129
123
|
@queue << { role: :assistant, content: @worker.tool_calls_raw.to_s }
|
@@ -161,17 +155,15 @@ module OxAiWorkers
|
|
161
155
|
execute if auto_execute
|
162
156
|
end
|
163
157
|
|
164
|
-
def
|
158
|
+
def add_context(text, role: :system)
|
165
159
|
@context << { role: role, content: text }
|
166
160
|
end
|
167
161
|
|
168
162
|
def execute
|
169
|
-
puts "call: #{__method__} state: #{state_name}"
|
170
163
|
prepare! if valid?
|
171
164
|
end
|
172
165
|
|
173
166
|
def cancel
|
174
|
-
puts "call: #{__method__} state: #{state_name}"
|
175
167
|
@worker.cancel if @worker.respond_to?(:cancel)
|
176
168
|
end
|
177
169
|
|
@@ -6,7 +6,6 @@ module OxAiWorkers
|
|
6
6
|
:tool_calls_raw, :tool_calls
|
7
7
|
|
8
8
|
def initialize_requests(model: nil, max_tokens: nil, temperature: nil)
|
9
|
-
# puts "call: ModuleRequest::#{__method__}"
|
10
9
|
@max_tokens = max_tokens || OxAiWorkers.configuration.max_tokens
|
11
10
|
@custom_id = SecureRandom.uuid
|
12
11
|
@model = model || OxAiWorkers.configuration.model
|
@@ -23,7 +22,6 @@ module OxAiWorkers
|
|
23
22
|
end
|
24
23
|
|
25
24
|
def cleanup
|
26
|
-
# puts "call: ModuleRequest::#{__method__}"
|
27
25
|
@client ||= OpenAI::Client.new(
|
28
26
|
access_token: OxAiWorkers.configuration.access_token,
|
29
27
|
log_errors: true # Highly recommended in development, so you can see what errors OpenAI is returning. Not recommended in production because it could leak private data to your logs.
|
@@ -61,7 +59,6 @@ module OxAiWorkers
|
|
61
59
|
end
|
62
60
|
|
63
61
|
def parse_choices(response)
|
64
|
-
# puts response.inspect
|
65
62
|
@tool_calls = []
|
66
63
|
@result = response.dig('choices', 0, 'message', 'content')
|
67
64
|
@tool_calls_raw = response.dig('choices', 0, 'message', 'tool_calls')
|
data/lib/oxaiworkers/request.rb
CHANGED
@@ -12,10 +12,8 @@ module OxAiWorkers
|
|
12
12
|
def request!
|
13
13
|
response = @client.chat(parameters: params)
|
14
14
|
parse_choices(response)
|
15
|
-
# @result = response.dig("choices", 0, "message", "content")
|
16
|
-
# puts response.inspect
|
17
15
|
rescue OpenAI::Error => e
|
18
|
-
|
16
|
+
OxAiWorkers.logger.debug(e.inspect, for: self.class)
|
19
17
|
end
|
20
18
|
|
21
19
|
def completed?
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module OxAiWorkers
|
4
4
|
module StateHelper
|
5
5
|
def log_me(transition)
|
6
|
-
#
|
6
|
+
# OxAiWorkers.logger.debug("`#{transition.event}` was called to transition from :#{transition.from} to :#{transition.to}")
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -72,7 +72,7 @@ module OxAiWorkers
|
|
72
72
|
#
|
73
73
|
# @return [String] Database schema
|
74
74
|
def dump_schema
|
75
|
-
|
75
|
+
OxAiWorkers.logger.debug('Dumping schema tables and keys', for: self.class)
|
76
76
|
schema = ''
|
77
77
|
db.tables.each do |table|
|
78
78
|
describe_table(table, schema)
|
@@ -108,10 +108,11 @@ module OxAiWorkers
|
|
108
108
|
# @param input [String] SQL query to be executed
|
109
109
|
# @return [Array] Results from the SQL query
|
110
110
|
def execute(input:)
|
111
|
-
|
111
|
+
OxAiWorkers.logger.info("Executing \"#{input}\"", for: self.class)
|
112
112
|
|
113
113
|
db[input].to_a
|
114
114
|
rescue Sequel::DatabaseError => e
|
115
|
+
OxAiWorkers.logger.info(e.message, for: self.class)
|
115
116
|
e.message
|
116
117
|
end
|
117
118
|
end
|
@@ -17,18 +17,19 @@ module OxAiWorkers
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# def ruby(input:)
|
20
|
-
# puts
|
20
|
+
# puts "Executing ruby: \"#{input}\"".colorize(:red)
|
21
21
|
# eval(input)
|
22
22
|
# end
|
23
23
|
|
24
24
|
def sh(input:)
|
25
|
-
|
25
|
+
OxAiWorkers.logger.info("Executing sh: \"#{input}\"", for: self.class)
|
26
26
|
begin
|
27
27
|
stdout_and_stderr_s, status = Open3.capture2e(input)
|
28
28
|
return stdout_and_stderr_s if stdout_and_stderr_s.present?
|
29
29
|
|
30
30
|
status.to_s
|
31
31
|
rescue StandardError => e
|
32
|
+
OxAiWorkers.logger.debug(e.message, for: self.class)
|
32
33
|
e.message
|
33
34
|
end
|
34
35
|
end
|
@@ -38,7 +38,7 @@ module OxAiWorkers
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def list_directory(directory_path:)
|
41
|
-
|
41
|
+
OxAiWorkers.logger.info("Listing directory: #{directory_path}", for: self.class)
|
42
42
|
list = Dir.entries(directory_path)
|
43
43
|
list.delete_if { |f| f.start_with?('.') }
|
44
44
|
if list.present?
|
@@ -51,7 +51,7 @@ module OxAiWorkers
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def read_file(file_path:)
|
54
|
-
|
54
|
+
OxAiWorkers.logger.info("Reading file: #{file_path}", for: self.class)
|
55
55
|
if File.binary?(file_path)
|
56
56
|
"File is binary: #{file_path}"
|
57
57
|
else
|
@@ -62,7 +62,7 @@ module OxAiWorkers
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def write_to_file(file_path:, content:)
|
65
|
-
|
65
|
+
OxAiWorkers.logger.info("Writing to file: #{file_path}", for: self.class)
|
66
66
|
File.write(file_path, content)
|
67
67
|
"Content was successfully written to the file: #{file_path}"
|
68
68
|
rescue Errno::EACCES
|
data/lib/oxaiworkers/version.rb
CHANGED
data/locales/en.assistant.yml
CHANGED
@@ -4,4 +4,8 @@ en:
|
|
4
4
|
sysop:
|
5
5
|
role: "You are a software agent inside my computer"
|
6
6
|
coder:
|
7
|
-
role: "You are a professional %s programmer inside my computer"
|
7
|
+
role: "You are a professional %s programmer inside my computer"
|
8
|
+
localizer:
|
9
|
+
role: "You are a professional localizer (translator) to the %s language inside my computer. Your task is to correctly localize files (create new ones in the required language based on the original) provided by the user."
|
10
|
+
source: "Use the %s language as a basis"
|
11
|
+
locale: "For the %s language, the correct locale is :%s"
|
data/locales/ru.assistant.yml
CHANGED
@@ -5,3 +5,7 @@ ru:
|
|
5
5
|
role: Ты программный агент внутри моего компьютера
|
6
6
|
coder:
|
7
7
|
role: "Ты профессиональный программист на %s внутри моего компьютера"
|
8
|
+
localizer:
|
9
|
+
role: "Ты профессиональный локализатор (переводчик) на %s язык внутри моего компьютера. Твоя задача корректно локализовать файлы (создать по аналогии новые на нужном языке), которые предоставит пользователь."
|
10
|
+
source: "Возьми за основу %s язык"
|
11
|
+
locale: "Для %s языка верная локаль :%s"
|
data/template/my_assistant.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'colorize'
|
4
4
|
require_relative 'tools/my_tool'
|
5
5
|
|
6
6
|
class MyAssistant
|
@@ -11,10 +11,10 @@ class MyAssistant
|
|
11
11
|
worker: init_worker(delayed: delayed, model: model),
|
12
12
|
role: 'You are a software agent inside my computer',
|
13
13
|
tools: [MyTool.new],
|
14
|
-
on_inner_monologue: ->(text:) { puts
|
15
|
-
on_outer_voice: ->(text:) { puts
|
16
|
-
on_action_request: ->(text:) { puts
|
17
|
-
on_pack_history: ->(text:) { puts
|
14
|
+
on_inner_monologue: ->(text:) { puts "monologue: #{text}".colorize(:yellow) },
|
15
|
+
on_outer_voice: ->(text:) { puts "voice: #{text}".colorize(:green) },
|
16
|
+
on_action_request: ->(text:) { puts "action: #{text}".colorize(:red) },
|
17
|
+
on_pack_history: ->(text:) { puts "summary: #{text}".colorize(:blue) }
|
18
18
|
)
|
19
19
|
end
|
20
20
|
end
|
data/template/start
CHANGED
data/template/tools/my_tool.rb
CHANGED
metadata
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ox-ai-workers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Smolev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: colorize
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: faraday
|
28
|
+
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: faraday-multipart
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: i18n
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: ptools
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '1'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: ruby-openai
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,9 +135,11 @@ files:
|
|
135
135
|
- exe/start
|
136
136
|
- lib/ox-ai-workers.rb
|
137
137
|
- lib/oxaiworkers/assistant/coder.rb
|
138
|
+
- lib/oxaiworkers/assistant/localizer.rb
|
138
139
|
- lib/oxaiworkers/assistant/module_base.rb
|
139
140
|
- lib/oxaiworkers/assistant/sysop.rb
|
140
141
|
- lib/oxaiworkers/compatibility.rb
|
142
|
+
- lib/oxaiworkers/contextual_logger.rb
|
141
143
|
- lib/oxaiworkers/delayed_request.rb
|
142
144
|
- lib/oxaiworkers/dependency_helper.rb
|
143
145
|
- lib/oxaiworkers/iterator.rb
|