Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4cc941b

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /