Class: Omamori::AIAnalysisEngine::DiffSplitter
- Inherits:
-
Object
- Object
- Omamori::AIAnalysisEngine::DiffSplitter
- 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
-
#initialize(chunk_size: DEFAULT_CHUNK_SIZE) ⇒ DiffSplitter
constructor
A new instance of DiffSplitter.
-
#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.
- #split(content) ⇒ Object
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 |