Skip to content

Commit 4cc941b

Browse files
committed
wip context algorithm
1 parent 3e51a6d commit 4cc941b

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/gitingest/output_formatter.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)