Class: Omamori::AIAnalysisEngine::DiffSplitter

Inherits:
Object
  • Object
show all
Defined in:
lib/omamori/ai_analysis_engine/diff_splitter.rb

Constant Summary collapse

DEFAULT_CHUNK_SIZE =

Characters as a proxy for tokens

8000

Instance Method Summary collapse

Constructor Details

#initialize(chunk_size: DEFAULT_CHUNK_SIZE) ⇒ DiffSplitter

Returns a new instance of DiffSplitter.



8
9
10
# File 'lib/omamori/ai_analysis_engine/diff_splitter.rb', line 8

def initialize(chunk_size: DEFAULT_CHUNK_SIZE)
  @chunk_size = chunk_size
end

Instance Method Details

#process_in_chunks(content, gemini_client, json_schema, prompt_manager, risks_to_check, model: "gemini-2.5-flash-preview-04-17", file_path: nil) ⇒ Object

Updated to accept file_path keyword argument



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/omamori/ai_analysis_engine/diff_splitter.rb', line 28

def process_in_chunks(content, gemini_client, json_schema, prompt_manager, risks_to_check, model: "gemini-2.5-flash-preview-04-17", file_path: nil)
  all_results = []
  chunks = split(content)

  puts "[DEBUG Omamori DiffSplitter] Splitting content into #{chunks.size} chunks for file: #{file_path || 'N/A'}"

  chunks.each_with_index do |chunk, index|
    puts "[DEBUG Omamori DiffSplitter] Processing chunk #{index + 1}/#{chunks.size} for file: #{file_path || 'N/A'}"
    # Pass file_path (potentially modified for chunks) to build_prompt
    chunk_file_path_info = if file_path
                             chunks.size > 1 ? "#{file_path} (chunk #{index + 1}/#{chunks.size})" : file_path
                           end
    prompt = prompt_manager.build_prompt(chunk, risks_to_check, json_schema, file_path: chunk_file_path_info)
    result = gemini_client.analyze(prompt, json_schema, model: model) # This call to analyze is correct
    all_results << result
  end
  combine_results(all_results)
end

#split(content) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/omamori/ai_analysis_engine/diff_splitter.rb', line 12

def split(content)
  chunks = []
  current_chunk = ""
  content.each_line do |line|
    if (current_chunk.length + line.length) > @chunk_size && !current_chunk.empty?
      chunks << current_chunk
      current_chunk = line
    else
      current_chunk += line
    end
  end
  chunks << current_chunk unless current_chunk.empty?
  chunks
end