| 964 | return res |
| 965 | |
| 966 | def _tool_message(self, message="", strip=True, color=None): |
| 967 | if message.strip(): |
| 968 | if "\n" in message: |
| 969 | for line in message.splitlines(): |
| 970 | self.append_chat_history(line, linebreak=True, blockquote=True, strip=strip) |
| 971 | else: |
| 972 | hist = message.strip() if strip else message |
| 973 | self.append_chat_history(hist, linebreak=True, blockquote=True) |
| 974 | |
| 975 | if not isinstance(message, Text): |
| 976 | message = Text(message) |
| 977 | color = ensure_hash_prefix(color) if color else None |
| 978 | style = dict(style=color) if self.pretty and color else dict() |
| 979 | try: |
| 980 | self.console.print(message, **style) |
| 981 | except UnicodeEncodeError: |
| 982 | # Fallback to ASCII-safe output |
| 983 | if isinstance(message, Text): |
| 984 | message = message.plain |
| 985 | message = str(message).encode("ascii", errors="replace").decode("ascii") |
| 986 | self.console.print(message, **style) |
| 987 | |
| 988 | def tool_error(self, message="", strip=True): |
| 989 | self.num_error_outputs += 1 |