manual_compression_feedback.py
1 """User-facing summaries for manual compression commands.""" 2 3 from __future__ import annotations 4 5 from typing import Any, Sequence 6 7 8 def summarize_manual_compression( 9 before_messages: Sequence[dict[str, Any]], 10 after_messages: Sequence[dict[str, Any]], 11 before_tokens: int, 12 after_tokens: int, 13 ) -> dict[str, Any]: 14 """Return consistent user-facing feedback for manual compression.""" 15 before_count = len(before_messages) 16 after_count = len(after_messages) 17 noop = list(after_messages) == list(before_messages) 18 19 if noop: 20 headline = f"No changes from compression: {before_count} messages" 21 if after_tokens == before_tokens: 22 token_line = ( 23 f"Approx request size: ~{before_tokens:,} tokens (unchanged)" 24 ) 25 else: 26 token_line = ( 27 f"Approx request size: ~{before_tokens:,} → " 28 f"~{after_tokens:,} tokens" 29 ) 30 else: 31 headline = f"Compressed: {before_count} → {after_count} messages" 32 token_line = ( 33 f"Approx request size: ~{before_tokens:,} → " 34 f"~{after_tokens:,} tokens" 35 ) 36 37 note = None 38 if not noop and after_count < before_count and after_tokens > before_tokens: 39 note = ( 40 "Note: fewer messages can still raise this estimate when " 41 "compression rewrites the transcript into denser summaries." 42 ) 43 44 return { 45 "noop": noop, 46 "headline": headline, 47 "token_line": token_line, 48 "note": note, 49 }