@@ -108,7 +108,7 @@ def format_node_with_context_limit(
108108 # Update summary with final info
109109 if node .type == FileSystemNodeType .DIRECTORY :
110110 # Count how many files were actually included
111- included_files = len ([line for line in optimized_content .split ('\n ' ) if line .startswith ('=' * 48 )])
111+ included_files = len ([line for line in optimized_content .split ('\n ' ) if line .startswith ('=' * 48 )]) / 2
112112 summary += f"Files included: { included_files } (optimized for { max_tokens :,} tokens)\n "
113113 elif node .type == FileSystemNodeType .FILE :
114114 summary += f"File: { node .name } \n "
@@ -325,11 +325,17 @@ def _optimize_content_with_knapsack(node: FileSystemNode, max_tokens: int) -> st
325325 if not file_items :
326326 return "[No files found]"
327327
328- # Calculate value/cost ratio for each file and sort by it
329- for item in file_items :
330- relevance_score = max (item ['relevance' ], 1 ) # Avoid division by zero
331- file_type_multiplier = _get_file_type_multiplier (item ['path' ])
328+ # Filter out files with 0 relevance (not AI-selected)
329+ relevant_items = [item for item in file_items if item ['relevance' ] > 0 ]
330+
331+ if not relevant_items :
332+ return "[No relevant files found - all files have 0 AI relevance score]"
333+
334+ # Calculate value/cost ratio for each relevant file
335+ for item in relevant_items :
336+ relevance_score = item ['relevance' ] # Already > 0, no need for max()
332337
338+ file_type_multiplier = _get_file_type_multiplier (item ['path' ])
333339 # Value = relevance * type_multiplier * content_quality
334340 content_quality = _estimate_content_quality (item ['content' ])
335341 value = relevance_score * file_type_multiplier * content_quality
@@ -341,7 +347,7 @@ def _optimize_content_with_knapsack(node: FileSystemNode, max_tokens: int) -> st
341347 item ['ratio' ] = value / max (cost , 1 )
342348
343349 # Sort by ratio (descending - best value first)
344- sorted_items = sorted (file_items , key = lambda x : x ['ratio' ], reverse = True )
350+ sorted_items = sorted (relevant_items , key = lambda x : x ['ratio' ], reverse = True )
345351
346352 # Greedy selection: pick highest ratio items that fit
347353 selected_items = []
@@ -363,7 +369,7 @@ def _optimize_content_with_knapsack(node: FileSystemNode, max_tokens: int) -> st
363369 result = "\n " .join (content_parts )
364370
365371 logger .info (
366- f"Knapsack optimization: selected { len (selected_items )} /{ len (file_items )} files, "
372+ f"Knapsack optimization: selected { len (selected_items )} /{ len (relevant_items )} files, "
367373 f"using { total_tokens } /{ max_tokens } tokens"
368374 )
369375
0 commit comments