This commit is contained in:
vegu-ai-tools
2026-02-16 15:12:09 +02:00
parent 38f6265334
commit 7ff74bb97d
2 changed files with 48 additions and 18 deletions

View File

@@ -286,7 +286,9 @@ class ContextHistoryMixin:
@property
def scene_history_best_fit_min_dialogue(self) -> int:
return self.actions["manage_scene_history"].config["best_fit_min_dialogue"].value
return (
self.actions["manage_scene_history"].config["best_fit_min_dialogue"].value
)
# --- Shared Primitives ---
@@ -913,8 +915,7 @@ class ContextHistoryMixin:
# in the delta accounting. Trim from the oldest entries of the
# lowest non-empty level until we fit.
total = sum(
sum(level.tokens[s:e])
for level, (s, e) in zip(levels, render_ranges)
sum(level.tokens[s:e]) for level, (s, e) in zip(levels, render_ranges)
)
if total > budget:
# Walk levels bottom-up, trim oldest (lowest start) entries
@@ -1009,7 +1010,10 @@ class ContextHistoryMixin:
# 2. Reserve budget for guaranteed minimum dialogue
min_dialogue = self._best_fit_ensure_min_dialogue(
scene, [], params, min_count=min_count,
scene,
[],
params,
min_count=min_count,
)
min_dialogue_tokens = count_tokens(min_dialogue)
@@ -1022,7 +1026,10 @@ class ContextHistoryMixin:
# 4. Merge guaranteed messages (de-duped by ensure_min)
parts_dialogue = self._best_fit_ensure_min_dialogue(
scene, parts_dialogue, params, min_count=min_count,
scene,
parts_dialogue,
params,
min_count=min_count,
)
dialogue_tokens = count_tokens(parts_dialogue)
@@ -1150,7 +1157,11 @@ class ContextHistoryMixin:
if eff_best_fit:
return self._context_history_preview_best_fit(
scene, budget, params, summarized_to, eff_max_budget,
scene,
budget,
params,
summarized_to,
eff_max_budget,
eff_best_fit_min_dialogue,
)
@@ -1274,7 +1285,10 @@ class ContextHistoryMixin:
# Reserve budget for guaranteed minimum dialogue
min_dialogue = self._best_fit_ensure_min_dialogue(
scene, [], params, min_count=eff_best_fit_min_dialogue,
scene,
[],
params,
min_count=eff_best_fit_min_dialogue,
)
min_dialogue_tokens = count_tokens(min_dialogue)
@@ -1287,7 +1301,10 @@ class ContextHistoryMixin:
# Merge guaranteed messages (de-duped)
parts_dialogue = self._best_fit_ensure_min_dialogue(
scene, parts_dialogue, params, min_count=eff_best_fit_min_dialogue,
scene,
parts_dialogue,
params,
min_count=eff_best_fit_min_dialogue,
)
dialogue_tokens = count_tokens(parts_dialogue)
summary_budget = budget - dialogue_tokens

View File

@@ -2543,8 +2543,7 @@ class TestBestFit:
# Lower level: 10 entries, each 100 tokens
lower_entries = [
{"text": _pad(f"lower-{i}", 100), "ts": f"PT{i}M"}
for i in range(10)
{"text": _pad(f"lower-{i}", 100), "ts": f"PT{i}M"} for i in range(10)
]
lower_formatted = [e["text"] for e in lower_entries]
lower_tokens = [100] * 10 # 1000 tokens total
@@ -2554,12 +2553,27 @@ class TestBestFit:
# Entry 1: covers lower 3-4 (GAP: lower 5 uncovered)
# Entry 2: covers lower 6-8 (GAP: lower 5 skipped, lower 9 uncovered)
upper_entries = [
{"text": _pad("upper-0", 50), "ts_start": "PT0M", "ts_end": "PT3M",
"start": 0, "end": 2},
{"text": _pad("upper-1", 50), "ts_start": "PT3M", "ts_end": "PT5M",
"start": 3, "end": 4},
{"text": _pad("upper-2", 50), "ts_start": "PT6M", "ts_end": "PT9M",
"start": 6, "end": 8},
{
"text": _pad("upper-0", 50),
"ts_start": "PT0M",
"ts_end": "PT3M",
"start": 0,
"end": 2,
},
{
"text": _pad("upper-1", 50),
"ts_start": "PT3M",
"ts_end": "PT5M",
"start": 3,
"end": 4,
},
{
"text": _pad("upper-2", 50),
"ts_start": "PT6M",
"ts_end": "PT9M",
"start": 6,
"end": 8,
},
]
upper_formatted = [e["text"] for e in upper_entries]
upper_tokens = [50] * 3 # 150 tokens total
@@ -2597,8 +2611,7 @@ class TestBestFit:
# Compute actual rendered tokens
total = sum(
sum(level.tokens[s:e])
for level, (s, e) in zip(levels, render_ranges)
sum(level.tokens[s:e]) for level, (s, e) in zip(levels, render_ranges)
)
assert total <= budget, (