Truncate a tool result to max_chars, preserving head and tail.
(result_str: str, max_chars: int)
| 105 | |
| 106 | |
| 107 | def _truncate_tool_result(result_str: str, max_chars: int) -> str: |
| 108 | """Truncate a tool result to max_chars, preserving head and tail.""" |
| 109 | if len(result_str) <= max_chars: |
| 110 | return result_str |
| 111 | head_len = int(max_chars * 0.7) |
| 112 | tail_len = int(max_chars * 0.2) |
| 113 | truncated_count = len(result_str) - head_len - tail_len |
| 114 | return ( |
| 115 | f"{result_str[:head_len]}\n\n" |
| 116 | f"... [TRUNCATED: {truncated_count:,} characters removed] ...\n\n" |
| 117 | f"{result_str[-tail_len:]}" |
| 118 | ) |
| 119 | |
| 120 | |
| 121 | class AgenticLoop: |