| """User-facing summaries for manual compression commands.""" |
|
|
| from __future__ import annotations |
|
|
| from typing import Any, Sequence |
|
|
|
|
| def summarize_manual_compression( |
| before_messages: Sequence[dict[str, Any]], |
| after_messages: Sequence[dict[str, Any]], |
| before_tokens: int, |
| after_tokens: int, |
| ) -> dict[str, Any]: |
| """Return consistent user-facing feedback for manual compression.""" |
| before_count = len(before_messages) |
| after_count = len(after_messages) |
| noop = list(after_messages) == list(before_messages) |
|
|
| if noop: |
| headline = f"No changes from compression: {before_count} messages" |
| if after_tokens == before_tokens: |
| token_line = ( |
| f"Rough transcript estimate: ~{before_tokens:,} tokens (unchanged)" |
| ) |
| else: |
| token_line = ( |
| f"Rough transcript estimate: ~{before_tokens:,} → " |
| f"~{after_tokens:,} tokens" |
| ) |
| else: |
| headline = f"Compressed: {before_count} → {after_count} messages" |
| token_line = ( |
| f"Rough transcript estimate: ~{before_tokens:,} → " |
| f"~{after_tokens:,} tokens" |
| ) |
|
|
| note = None |
| if not noop and after_count < before_count and after_tokens > before_tokens: |
| note = ( |
| "Note: fewer messages can still raise this rough transcript estimate " |
| "when compression rewrites the transcript into denser summaries." |
| ) |
|
|
| return { |
| "noop": noop, |
| "headline": headline, |
| "token_line": token_line, |
| "note": note, |
| } |
|
|