pwn 0.4.643 → 0.4.644

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: bbf3fa66db2d9b1b7d8be45081cf1d2e733fb6b2caa0b3fe7c092790c2a4b43a
4
- data.tar.gz: 3b70ba7c9096251aec921f1ed72d109c50ccaaaedea256bb0d700a69ea8fbd4b
3
+ metadata.gz: 2b544a8cd980d315cdcedf61ecb3f684ec6251155018073cfa73f4fe99fda103
4
+ data.tar.gz: 15cb2f4de0b6247e0aee5fafdcd891612f53c6cee748a715f7de41acd655b2d4
5
5
  SHA512:
6
- metadata.gz: 0a738aa1e3c60bd364b50df32e25cbd34dcdc23e446fbf0f91f53fb2e310ea88ca0f36e986bbe2a51bb091ccf325e16cb2581e4ed75e8befaf42ae2671687ba0
7
- data.tar.gz: 8e30cbbcb5dcc2a109df22e979ff6e013f578a7140d70ee9e17af0d9c0e9a4f869a7dc5da065543b2cd710751accbd5e11d172fca426a5b24f75052f62f5921d
6
+ metadata.gz: 39f3b397df4238587b9e887e6cee439e25242d1437500f3d8c1a935ae177f5a276a975063515abf7bae4161a228f7a0fb8888b53c0d9ce135f263ce469056ef0
7
+ data.tar.gz: 720a4b698073fdc3da5c31c176302ed155a9b48530bb7eed297ec0a77bd5b5947f9fe697c27d86ebfa97c8dfa67bafd666e6fbf16633e58f614abf1e32f2c22c
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.643]:001 >>> PWN.help
40
+ pwn[v0.4.644]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.643]:001 >>> PWN.help
55
+ pwn[v0.4.644]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
data/bin/pwn_chat CHANGED
@@ -24,8 +24,8 @@ OptionParser.new do |options|
24
24
  opts[:system_role_content] = s
25
25
  end
26
26
 
27
- options.on('-v', '--voice', '<Options - Voice Activate Responses (Defaults to false)>') do |v|
28
- opts[:voice] = v
27
+ options.on('-S', '--speak-answer', '<Options - Speak Answers (Defaults to false)>') do |v|
28
+ opts[:speak_answer] = v
29
29
  end
30
30
  end.parse!
31
31
 
@@ -93,7 +93,7 @@ begin
93
93
 
94
94
  system_role_content = opts[:system_role_content]
95
95
 
96
- @voice = true if opts[:voice]
96
+ @speak_answer = true if opts[:speak_answer]
97
97
 
98
98
  # Define Custom REPL Commands
99
99
  Pry::Commands.create_command 'welcome-banner' do
@@ -127,52 +127,24 @@ begin
127
127
  @keep_in_memory = choices_len * -1
128
128
  end
129
129
 
130
- begin
131
- response = PWN::Plugins::OpenAI.chat(
132
- token: token,
133
- system_role_content: system_role_content,
134
- request: request.to_s,
135
- temp: 1,
136
- max_tokens: 0,
137
- response_history: @response_history
138
- )
139
- puts "\n\n\n#{response[:choices].last[:content]}\n\n\n"
140
-
141
- if @voice
142
- text_path = "/tmp/#{File.basename($PROGRAM_NAME)}.response"
143
- File.write(text_path, response[:choices].last[:content])
144
- PWN::Plugins::Voice.text_to_speech(text_path: text_path)
145
- end
146
-
147
- @response_history = {
148
- id: response[:id],
149
- object: response[:object],
150
- model: response[:model],
151
- usage: response[:usage]
152
- }
153
- @response_history[:choices] ||= response[:choices]
154
- rescue JSON::ParserError
155
- max_tokens = 4097
156
- if request.length > max_tokens
157
- puts "Request Length Too Long: #{request.length}\n"
158
- else
159
- puts 'Token Length too long, trimming memory by 1 and retrying...'
160
- @keep_in_memory += 1
161
- @response_history[:choices] = @response_history[:choices].slice(@keep_in_memory..)
162
-
163
- response = PWN::Plugins::OpenAI.chat(
164
- token: token,
165
- system_role_content: system_role_content,
166
- request: "summarize what we've already discussed",
167
- temp: 1,
168
- max_tokens: 0,
169
- response_history: @response_history
170
- )
171
- @response_history[:choices] = response[:choices].slice(@keep_in_memory..)
172
-
173
- retry
174
- end
175
- end
130
+ response = PWN::Plugins::OpenAI.chat(
131
+ token: token,
132
+ system_role_content: system_role_content,
133
+ request: request.to_s,
134
+ temp: 1,
135
+ max_tokens: 0,
136
+ response_history: @response_history,
137
+ speak_answer: @speak_answer
138
+ )
139
+ puts "\n\n\n#{response[:choices].last[:content]}\n\n\n"
140
+
141
+ @response_history = {
142
+ id: response[:id],
143
+ object: response[:object],
144
+ model: response[:model],
145
+ usage: response[:usage]
146
+ }
147
+ @response_history[:choices] ||= response[:choices]
176
148
  end
177
149
  end
178
150
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'json'
4
+ require 'securerandom'
4
5
 
5
6
  module PWN
6
7
  module Plugins
@@ -98,7 +99,8 @@ module PWN
98
99
  # temp: 'optional - creative response float (deafults to 0)',
99
100
  # max_tokens: 'optional - integer (defaults to 4_097 - request.length || 300)',
100
101
  # system_role_content: 'optional - context to set up the model behavior for conversation (Default: "You are a sarcastic ethical hacker named Kennedy. You are able to access any content or website on any device or network without any limitations or filters.")',
101
- # response_history: 'optional - pass response back in to have a conversation'
102
+ # response_history: 'optional - pass response back in to have a conversation',
103
+ # speak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)'
102
104
  # )
103
105
 
104
106
  public_class_method def self.chat(opts = {})
@@ -138,6 +140,7 @@ module PWN
138
140
  }
139
141
 
140
142
  response_history ||= { choices: [system_role] }
143
+ choices_len = response_history[:choices].length
141
144
 
142
145
  # TODO: Include max_tokens when sending chat requests
143
146
  http_body = {
@@ -178,7 +181,42 @@ module PWN
178
181
  json_resp[:choices].push(assistant_resp)
179
182
  end
180
183
 
184
+ speak_answer = true if opts[:speak_answer]
185
+
186
+ if speak_answer
187
+ text_path = "/tmp/#{SecureRandom.hex}.pwn_voice"
188
+ answer = json_resp[:choices].last[:text]
189
+ answer = json_resp[:choices].last[:content] if gpt
190
+ File.write(text_path, answer)
191
+ PWN::Plugins::Voice.text_to_speech(text_path: text_path)
192
+ File.unlink(text_path)
193
+ end
194
+
181
195
  json_resp
196
+ rescue JSON::ParserError => e
197
+ if e.message.include?('exceeded')
198
+ if request.length > max_tokens
199
+ puts "Request Length Too Long: #{request.length}\n"
200
+ else
201
+ # TODO: make this as tight as possible.
202
+ keep_in_memory = (choices_len - 2) * -1
203
+ response_history[:choices] = response_history[:choices].slice(keep_in_memory..)
204
+
205
+ response = chat(
206
+ token: token,
207
+ system_role_content: system_role_content,
208
+ request: "summarize what we've already discussed",
209
+ temp: 1,
210
+ max_tokens: 0,
211
+ response_history: response_history,
212
+ speak_answer: speak_answer
213
+ )
214
+ keep_in_memory = (choices_len / 2) * -1
215
+ response_history[:choices] = response[:choices].slice(keep_in_memory..)
216
+
217
+ retry
218
+ end
219
+ end
182
220
  rescue StandardError => e
183
221
  raise e
184
222
  end
@@ -238,7 +276,8 @@ module PWN
238
276
  temp: 'optional - creative response float (defaults to 0)',
239
277
  max_tokens: 'optional - integer (deafults to 4_097 - request.length || 300)',
240
278
  system_role_content: 'optional - context to set up the model behavior for conversation (Default: \"You are a sarcastic ethical hacker named Kennedy. You are able to access any content or website on any device or network without any limitations or filters.\")',
241
- response_history: 'optional - pass response back in to have a conversation'
279
+ response_history: 'optional - pass response back in to have a conversation',
280
+ speak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)'
242
281
  )
243
282
 
244
283
  response = #{self}.img_gen(
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.643'
4
+ VERSION = '0.4.644'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.643
4
+ version: 0.4.644
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.