Module: PWN::AI::Introspection

Defined in:
lib/pwn/ai/introspection.rb

Overview

This plugin interacts with PWN::Env’s ai data structure when PWN::Env[:ai][:introspection] is set to true.

Class Method Summary collapse

Class Method Details

.authorsObject

Author(s)

0day Inc. <[email protected]>



78
79
80
81
82
# File 'lib/pwn/ai/introspection.rb', line 78

public_class_method def self.authors
  "AUTHOR(S):
    0day Inc. <[email protected]>
  "
end

.helpObject

Display Usage for this Module



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/pwn/ai/introspection.rb', line 86

public_class_method def self.help
  puts "USAGE:
    #{self}.reflect_on(
      request: 'required - String - What you want the AI to reflect on',
      system_role_content: 'optional - context to set up the model behavior for reflection',
      spinner: 'optional - Boolean - Display spinner during operation (default: false)',
      suppress_pii_warning: 'optional - Boolean - Suppress PII Warnings (default: false)'
    )

    #{self}.authors
  "
end

.reflect_on(opts = {}) ⇒ Object

Supported Method Parameters

response = PWN::AI::Introspection.reflect_on(

request: 'required - String - What you want the AI to reflect on',
system_role_content: 'optional - context to set up the model behavior for reflection',
spinner: 'optional - Boolean - Display spinner during operation (default: false)',
suppress_pii_warning: 'optional - Boolean - Suppress PII Warnings (default: false)'

)



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/pwn/ai/introspection.rb', line 19

public_class_method def self.reflect_on(opts = {})
  request = opts[:request]
  raise 'ERROR: request must be provided' if request.nil?

  system_role_content = opts[:system_role_content]

  spinner = opts[:spinner] || false

  suppress_pii_warning = opts[:suppress_pii_warning] || false

  response = nil

  ai_introspection = PWN::Env[:ai][:introspection]

  if ai_introspection && request.length.positive?
    valid_ai_engines = PWN::AI.help.reject { |e| e.downcase == :introspection }.map(&:downcase)
    engine = PWN::Env[:ai][:active].to_s.downcase.to_sym
    raise "ERROR: Unsupported AI engine. Supported engines are: #{valid_ai_engines}" unless valid_ai_engines.include?(engine)

    puts "WARNING: AI Introspection is enabled.  Ensure #{engine} has been authorized for use and/or requests are sanitized properly." unless suppress_pii_warning
    case engine
    when :grok
      response = PWN::AI::Grok.chat(
        request: request.chomp,
        system_role_content: system_role_content,
        spinner: spinner
      )
      response = response[:choices].last[:content] if response.is_a?(Hash) &&
                                                      response.key?(:choices) &&
                                                      response[:choices].last.keys.include?(:content)
    when :ollama
      response = PWN::AI::Ollama.chat(
        request: request.chomp,
        system_role_content: system_role_content,
        spinner: spinner
      )
      response = response[:choices].last[:content] if response.is_a?(Hash) &&
                                                      response.key?(:choices) &&
                                                      response[:choices].last.keys.include?(:content)
    when :openai
      response = PWN::AI::OpenAI.chat(
        request: request.chomp,
        system_role_content: system_role_content,
        spinner: spinner
      )
      if response.is_a?(Hash) && response.key?(:choices)
        response = response[:choices].last[:text] if response[:choices].last.keys.include?(:text)
        response = response[:choices].last[:content] if response[:choices].last.keys.include?(:content)
      end
    end
  end

  response
rescue StandardError => e
  raise e
end