Class: Compose::EditVerifier

Inherits:
Object
  • Object
show all
Defined in:
lib/compose/edit_verifier.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(edits) ⇒ EditVerifier

Returns a new instance of EditVerifier.



7
8
9
# File 'lib/compose/edit_verifier.rb', line 7

def initialize(edits)
  @edits = edits
end

Instance Attribute Details

#editsObject (readonly)

Returns the value of attribute edits.



5
6
7
# File 'lib/compose/edit_verifier.rb', line 5

def edits
  @edits
end

Instance Method Details

#verify_edit(edit) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/compose/edit_verifier.rb', line 25

def verify_edit(edit)
  return edit unless File.exist?(edit[:filename])

  prompt = File.read(File.expand_path("../../config/prompts/verify.txt", __dir__))
  prompt.gsub!('{{EDIT}}', edit.to_json)
  prompt.gsub!('{{CHANGE}}', edit[:change].to_json)

  file_content = FileProcessor.load_file(File.expand_path(edit[:filename]))
  system_prompt = "CODE:\n#{file_content}\n"

  response = AIClient.new(Compose::Config.verifier_model).chat(system_prompt, prompt)

  begin
    verified_change = JSON.parse(response)
    verified_change = verified_change.transform_keys(&:to_sym)
    return nil if verified_change[:type] == 'skip'

    edit[:change] = verified_change
    edit
  rescue JSON::ParserError
    puts "Failed to parse verification response. Using original edit."
    edit
  end
end

#verify_editsObject



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/compose/edit_verifier.rb', line 11

def verify_edits
  verified_edits = []

  edits.each do |edit|
    case edit[:type]
    when 'edit'
      verified_edit = verify_edit(edit[:edit])
      verified_edits << { type: 'edit', edit: verified_edit } if verified_edit
    end
  end

  verified_edits
end