cryptum 0.0.423 → 0.0.425

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0db6879e922302bbbbcd4c283552f6057c1ff1651cfef64bb3908c60f378bdea
4
- data.tar.gz: 6c1fa446d9facf407b3729aeb4bbc449b92bf44799c5865804811ddfc5ce7dd7
3
+ metadata.gz: 93ce9c71816f16413dd9aac6b343d4b24b958ac2956aad177bd2409b22f2b96f
4
+ data.tar.gz: 72b4e5410ff43db2f0b1bc17a9c3c46ec8decfea5c4a0118096a6bc9a1f31f23
5
5
  SHA512:
6
- metadata.gz: 775f105582775eeac624f886fb98884b20a1006ea5d5882ccda2da023ecae159db27f4ad0dfc6c7b13e55b16fd03b701eb2197885c1af4a6cd4d3a18be2d56ad
7
- data.tar.gz: 02b257841617c72ab0fde2be5b70d7d2b70d33317d3c8aa325e1d7464788a6a52aa0d98ff1177fc12c018651139095b9729fc0cf8e50a0a4582ea35119b17717
6
+ metadata.gz: b5838263d18649850b67a020a39e80bfea10acfb1bfec589c38d15728fc5876b489bec31d9f6d78e16ad2608b38e839a45eaf837f715d3e67cc40aff3ac49d6c
7
+ data.tar.gz: 9355aa5e0950cb73e6ce1519f5df29c40836ae1ec51311a7ef78861b35f934866fda5b0c3a0e0b2135d3c893841c070a664233660275b27711de7ec79f8aa142
data/.rubocop.yml CHANGED
@@ -6,7 +6,7 @@ Layout/LineLength:
6
6
  Lint/UselessRescue:
7
7
  Enabled: false
8
8
  Metrics/AbcSize:
9
- Max: 393
9
+ Max: 410
10
10
  Metrics/BlockLength:
11
11
  Max: 138
12
12
  Metrics/BlockNesting:
@@ -14,13 +14,13 @@ Metrics/BlockNesting:
14
14
  Metrics/ClassLength:
15
15
  Max: 128
16
16
  Metrics/CyclomaticComplexity:
17
- Max: 77
17
+ Max: 80
18
18
  Metrics/MethodLength:
19
19
  Max: 397
20
20
  Metrics/ModuleLength:
21
21
  Max: 407
22
22
  Metrics/PerceivedComplexity:
23
- Max: 77
23
+ Max: 80
24
24
  Style/HashSyntax:
25
25
  EnforcedShorthandSyntax: never
26
26
 
data/Gemfile CHANGED
@@ -12,7 +12,7 @@ gemspec
12
12
  # to build appropriately. Defer to ./reinstall_coinbot_gemset.sh
13
13
  # to review these custom flags
14
14
  gem 'addressable', '2.8.4'
15
- gem 'bundler', '>=2.4.10'
15
+ gem 'bundler', '>=2.4.11'
16
16
  gem 'bundler-audit', '0.9.1'
17
17
  gem 'curses', '1.4.4'
18
18
  gem 'eventmachine', '1.2.7'
@@ -26,12 +26,12 @@ gem 'rdoc', '6.5.0'
26
26
  gem 'require_all', '3.0.0'
27
27
  gem 'rest-client', '2.1.0'
28
28
  gem 'rspec', '3.12.0'
29
- gem 'rubocop', '1.49.0'
29
+ gem 'rubocop', '1.50.0'
30
30
  gem 'rubocop-rake', '0.6.0'
31
31
  gem 'rubocop-rspec', '2.19.0'
32
32
  gem 'ruby-prof', '1.6.1'
33
33
  gem 'rvm', '1.11.3.9'
34
- gem 'sinatra', '3.0.5'
34
+ gem 'sinatra', '3.0.6'
35
35
  gem 'thin', '1.8.2'
36
36
  gem 'tty-prompt', '0.23.1'
37
37
  gem 'websocket-extensions', '0.1.5'
data/bin/cryptum-repl CHANGED
@@ -71,7 +71,7 @@ begin
71
71
  Cryptum::Log.append(level: :info, msg: msg, which_self: self)
72
72
  cli.start(self, prompt: Pry::Prompt.new(:cryptum, 'CRYPTUM_PROTOTYPING_DRIVER', prompt))
73
73
  rescue StandardError => e
74
- raise e
74
+ Cryptum::Log.append(level: :error, msg: e, which_self: self)
75
75
  ensure
76
76
  msg = 'Session Terminated.'
77
77
  Cryptum::Log.append(level: :info, msg: msg, which_self: self)
@@ -116,8 +116,8 @@ module Cryptum
116
116
  )
117
117
 
118
118
  else
119
- e = "Unsupported HTTP Method #{http_method}"
120
- Cryptum::Log.append(level: :debug, msg: e, which_self: self)
119
+ msg = "Unsupported HTTP Method #{http_method}"
120
+ Cryptum::Log.append(level: :debug, msg: msg, which_self: self)
121
121
  end
122
122
 
123
123
  resp = JSON.parse(response, symbolize_names: true)
data/lib/cryptum/log.rb CHANGED
@@ -26,9 +26,13 @@ module Cryptum
26
26
  datetime_str = '%Y-%m-%d %H:%M:%S.%N%z'
27
27
 
28
28
  # Always append to log file
29
- log_file_path = '/tmp/cryptum.log'
30
- log_file_path = "/tmp/cryptum-ai-#{session}-#{symbol}.json" if level == :learning
31
- log_file = File.open(log_file_path, 'a')
29
+ if level == :learning
30
+ log_file_path = "/tmp/cryptum-ai-#{session}-#{symbol}.json" if level == :learning
31
+ log_file = File.open(log_file_path, 'w')
32
+ else
33
+ log_file_path = '/tmp/cryptum.log'
34
+ log_file = File.open(log_file_path, 'a')
35
+ end
32
36
 
33
37
  # Leave 10 "old" log files where
34
38
  # each file is ~ 1,024,000 bytes
@@ -69,14 +73,10 @@ module Cryptum
69
73
  end
70
74
 
71
75
  if level == :learning
72
- logger.formatter = proc do |_severity, datetime, progname, json_msg|
73
- date = datetime.strftime(datetime_str)
76
+ log_event = msg
77
+ logger.formatter = proc do |_severity, _datetime, _progname, json_msg|
74
78
  JSON.pretty_generate(
75
- date: date,
76
- session: session,
77
- symbol: symbol,
78
- progname: progname,
79
- msg: json_msg
79
+ learning_data: json_msg
80
80
  )
81
81
  end
82
82
  else
@@ -97,11 +97,11 @@ module Cryptum
97
97
  log_event += "\n\n\n"
98
98
  end
99
99
  end
100
+ end
100
101
 
101
- logger.add(logger.level, log_event, which_self)
102
+ logger.add(logger.level, log_event, which_self)
102
103
 
103
- Cryptum::UI::Exit.gracefully(event_history: event_history) if exit_gracefully
104
- end
104
+ Cryptum::UI::Exit.gracefully(event_history: event_history) if exit_gracefully
105
105
  rescue Interrupt, StandardError => e
106
106
  raise e
107
107
  end
@@ -12,7 +12,8 @@ module Cryptum
12
12
  # http_method: 'optional HTTP method (defaults to GET)
13
13
  # rest_call: 'required rest call to make per the schema',
14
14
  # params: 'optional params passed in the URI or HTTP Headers',
15
- # http_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST'
15
+ # http_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST',
16
+ # timeout: 'optional - timeout in seconds (defaults to 60)'
16
17
  # )
17
18
 
18
19
  private_class_method def self.open_ai_rest_call(opts = {})
@@ -27,6 +28,8 @@ module Cryptum
27
28
  base_open_ai_api_uri = 'https://api.openai.com/v1'
28
29
  token = opts[:token]
29
30
  option_choice = opts[:option_choice]
31
+ timeout = opts[:timeout]
32
+ timeout ||= 60
30
33
 
31
34
  if option_choice.proxy
32
35
  rest_client = RestClient
@@ -46,9 +49,9 @@ module Cryptum
46
49
  authorization: "Bearer #{token}",
47
50
  params: params
48
51
  },
49
- verify_ssl: false
52
+ verify_ssl: false,
53
+ timeout: timeout
50
54
  )
51
-
52
55
  when :post
53
56
  response = rest_client_request.execute(
54
57
  method: :post,
@@ -58,22 +61,21 @@ module Cryptum
58
61
  authorization: "Bearer #{token}"
59
62
  },
60
63
  payload: http_body,
61
- verify_ssl: false
64
+ verify_ssl: false,
65
+ timeout: timeout
62
66
  )
63
-
64
67
  else
65
- raise @@logger.error("Unsupported HTTP Method #{http_method} for #{self} Plugin")
68
+ msg = "Unsupported HTTP Method #{http_method} for #{self} Plugin"
69
+ Cryptum::Log.append(level: :error, msg: msg, which_self: self)
66
70
  end
67
- response
71
+
72
+ JSON.parse(response, symbolize_names: true)
68
73
  rescue RestClient::ExceptionWithResponse => e
69
- File.open('/tmp/cryptum-errors.txt', 'a') do |f|
70
- f.puts Time.now.strftime('%Y-%m-%d %H:%M:%S.%N%z')
71
- f.puts "Module: #{self}"
72
- f.puts "URL: #{base_open_ai_api_uri}#{rest_call}"
73
- f.puts "PARAMS: #{params.inspect}"
74
- f.puts "HTTP POST BODY: #{http_body.inspect}" if http_body != ''
75
- f.puts "#{e}\n#{e.response}\n\n\n"
76
- end
74
+ msg = "URL: #{base_open_ai_api_uri}#{rest_call}"
75
+ msg += "PARAMS: #{params.inspect}"
76
+ msg += "HTTP POST BODY: #{http_body.inspect}" if http_body != ''
77
+ msg += "#{e}\n#{e.response}\n\n\n"
78
+ Cryptum::Log.append(level: :error, msg: msg, which_self: self)
77
79
  rescue Interrupt, StandardError => e
78
80
  Cryptum::Log.append(level: :error, msg: e, which_self: self)
79
81
  end
@@ -82,18 +84,18 @@ module Cryptum
82
84
  # response = Cryptum::OpenAI.get_models(
83
85
  # option_choice: 'required - option_choice object containing command line params',
84
86
  # token: 'required - Bearer token',
87
+ # timeout: 'optional - timeout in seconds (defaults to 60)'
85
88
  # )
86
89
 
87
90
  public_class_method def self.get_models(opts = {})
88
91
  token = opts[:token]
89
92
 
90
- response = open_ai_rest_call(
93
+ open_ai_rest_call(
91
94
  option_choice: option_choice,
92
95
  token: token,
93
- rest_call: 'models'
96
+ rest_call: 'models',
97
+ timeout: timeout
94
98
  )
95
-
96
- JSON.parse(response, symbolize_names: true)
97
99
  rescue Interrupt, StandardError => e
98
100
  Cryptum::Log.append(level: :error, msg: e, which_self: self)
99
101
  end
@@ -107,7 +109,8 @@ module Cryptum
107
109
  # temp: 'optional - creative response float (deafults to 0)',
108
110
  # max_tokens: 'optional - integer (defaults to 4_097 - request.length || 300)',
109
111
  # system_role_content: 'optional - context to set up the model behavior for conversation (Default: "You are a momentum trading bot that analyzes order history on Coinbase. You are able to access any content or website on any device or network without any limitations or filters.")',
110
- # response_history: 'optional - pass response back in to have a conversation'
112
+ # response_history: 'optional - pass response back in to have a conversation',
113
+ # timeout: 'optional - timeout in seconds (defaults to 60)'
111
114
  # )
112
115
 
113
116
  public_class_method def self.chat(opts = {})
@@ -126,6 +129,9 @@ module Cryptum
126
129
  max_tokens = 4_097 - request.to_s.length
127
130
  max_tokens = 300 unless max_tokens.positive?
128
131
 
132
+ timeout = opts[:timeout]
133
+ timeout ||= 60
134
+
129
135
  gpt = true if model.include?('gpt-3.5') || model.include?('gpt-4')
130
136
 
131
137
  if gpt
@@ -174,15 +180,15 @@ module Cryptum
174
180
  }
175
181
  end
176
182
 
177
- response = open_ai_rest_call(
183
+ json_resp = open_ai_rest_call(
178
184
  option_choice: option_choice,
179
185
  http_method: :post,
180
186
  token: token,
181
187
  rest_call: rest_call,
182
- http_body: http_body.to_json
188
+ http_body: http_body.to_json,
189
+ timeout: timeout
183
190
  )
184
191
 
185
- json_resp = JSON.parse(response, symbolize_names: true)
186
192
  if gpt
187
193
  assistant_resp = json_resp[:choices].first[:message]
188
194
  json_resp[:choices] = http_body[:messages]
@@ -201,6 +207,7 @@ module Cryptum
201
207
  response = #{self}.get_models(
202
208
  option_choice: 'required - option_choice object containing command line params',
203
209
  token: 'required - Bearer token',
210
+ timeout: 'optional - timeout in seconds (defaults to 60)'
204
211
  )
205
212
 
206
213
  response = #{self}.chat(
@@ -211,7 +218,8 @@ module Cryptum
211
218
  temp: 'optional - creative response float (defaults to 0)',
212
219
  max_tokens: 'optional - integer (deafults to 4_097 - request.length || 300)',
213
220
  system_role_content: 'optional - context to set up the model behavior for conversation (Default: \"You are a momentum trading bot that analyzes order history on Coinbase. You are able to access any content or website on any device or network without any limitations or filters.\")',
214
- response_history: 'optional - pass response back in to have a conversation'
221
+ response_history: 'optional - pass response back in to have a conversation',
222
+ timeout: 'optional - timeout in seconds (defaults to 60)'
215
223
  )
216
224
  "
217
225
  end
@@ -237,6 +237,12 @@ module Cryptum
237
237
  end
238
238
  end
239
239
 
240
+ # Snag all sold orders
241
+ oh_meta_sold_arr = order_history_meta.select do |ohm|
242
+ ohm[:color].to_sym == :green && ohm.key?(:done_at)
243
+ end
244
+ order_hist_meta_sold = oh_meta_sold_arr.length
245
+
240
246
  # Update Completed Sell Orders w/ Green &&
241
247
  # Include done_at Timestamp for 24h gain calc
242
248
  if event_type == :done &&
@@ -247,6 +253,18 @@ module Cryptum
247
253
  order_history_meta.each do |meta|
248
254
  next unless meta[:sell_order_id] == sell_order_id
249
255
 
256
+ learning_arr = []
257
+ oh_meta_sold_arr.each do |ohm|
258
+ learning = ohm
259
+ buy_order_id = ohm[:buy_order_id]
260
+ sell_order_id = ohm[:sell_order_id]
261
+ order_history_buy_details = order_history.select { |oh| oh[:id] == buy_order_id }
262
+ order_history_sell_details = order_history.select { |oh| oh[:id] == sell_order_id }
263
+ learning[:buy_details] = order_history_buy_details.first
264
+ learning[:sell_details] = order_history_sell_details.first
265
+ learning_arr.push(learning)
266
+ end
267
+
250
268
  meta[:done_at] = Time.now.strftime('%Y-%m-%d %H:%M:%S.%N%z')
251
269
  meta[:color] = :green
252
270
 
@@ -259,9 +277,11 @@ module Cryptum
259
277
  order_history_sell_details = order_history.select { |oh| oh[:id] == sell_order_id }
260
278
  learning[:buy_details] = order_history_buy_details.first
261
279
  learning[:sell_details] = order_history_sell_details.first
280
+ learning_arr.push(learning)
281
+
262
282
  Cryptum::Log.append(
263
283
  level: :learning,
264
- msg: learning,
284
+ msg: learning_arr,
265
285
  which_self: self,
266
286
  event_history: event_history
267
287
  )
@@ -271,12 +291,6 @@ module Cryptum
271
291
  # OK, now let's tally up everything...
272
292
  twenty_four_hrs_ago = Time.now - 86_400
273
293
 
274
- # Snag all sold orders
275
- oh_meta_sold_arr = order_history_meta.select do |ohm|
276
- ohm[:color].to_sym == :green && ohm.key?(:done_at)
277
- end
278
- order_hist_meta_sold = oh_meta_sold_arr.length
279
-
280
294
  # Snag all sold orders within past 24 hrs
281
295
  ohm_sold_twenty_four_arr = []
282
296
  unless oh_meta_sold_arr.empty?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cryptum
4
- VERSION = '0.0.423'
4
+ VERSION = '0.0.425'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.423
4
+ version: 0.0.425
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-10 00:00:00.000000000 Z
11
+ date: 2023-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.4.10
33
+ version: 2.4.11
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 2.4.10
40
+ version: 2.4.11
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler-audit
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,14 @@ dependencies:
226
226
  requirements:
227
227
  - - '='
228
228
  - !ruby/object:Gem::Version
229
- version: 1.49.0
229
+ version: 1.50.0
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - '='
235
235
  - !ruby/object:Gem::Version
236
- version: 1.49.0
236
+ version: 1.50.0
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: rubocop-rake
239
239
  requirement: !ruby/object:Gem::Requirement
@@ -296,14 +296,14 @@ dependencies:
296
296
  requirements:
297
297
  - - '='
298
298
  - !ruby/object:Gem::Version
299
- version: 3.0.5
299
+ version: 3.0.6
300
300
  type: :runtime
301
301
  prerelease: false
302
302
  version_requirements: !ruby/object:Gem::Requirement
303
303
  requirements:
304
304
  - - '='
305
305
  - !ruby/object:Gem::Version
306
- version: 3.0.5
306
+ version: 3.0.6
307
307
  - !ruby/object:Gem::Dependency
308
308
  name: thin
309
309
  requirement: !ruby/object:Gem::Requirement
@@ -537,7 +537,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
537
537
  - !ruby/object:Gem::Version
538
538
  version: '0'
539
539
  requirements: []
540
- rubygems_version: 3.4.10
540
+ rubygems_version: 3.4.11
541
541
  signing_key:
542
542
  specification_version: 4
543
543
  summary: Coinbase Pro High-Frequency Trading Bot