From cc324274668b98773f8f589237f950ff0e6f635c Mon Sep 17 00:00:00 2001 From: philipph-askui Date: Mon, 11 May 2026 21:11:26 +0200 Subject: [PATCH 1/3] fix: make sure we report to reporter before adding messages to truncation strategy (and eventually crash) --- src/askui/models/shared/conversation.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/askui/models/shared/conversation.py b/src/askui/models/shared/conversation.py index 04f35371..ac6438fb 100644 --- a/src/askui/models/shared/conversation.py +++ b/src/askui/models/shared/conversation.py @@ -371,6 +371,11 @@ def _add_message(self, message: MessageParam) -> None: Args: message: Message to add """ + # Report to reporter + self._reporter.add_message( + self.current_speaker.name, message.model_dump(mode="json") + ) + if not self._truncation_strategy: logger.error("No truncation strategy, cannot add message") return @@ -378,11 +383,6 @@ def _add_message(self, message: MessageParam) -> None: # Add to truncation strategy self._truncation_strategy.append_message(message) - # Report to reporter - self._reporter.add_message( - self.current_speaker.name, message.model_dump(mode="json") - ) - @tracer.start_as_current_span("_handle_continue_conversation") def _handle_continue_conversation(self, result: SpeakerResult) -> bool: """Handle speaker result status and determine if loop should continue. From f1e8ec0a056df8473709eafcef223af497a01bd8 Mon Sep 17 00:00:00 2001 From: philipph-askui Date: Tue, 12 May 2026 09:10:28 +0200 Subject: [PATCH 2/3] fix: report truncation errors to reporter before re-raising --- .../models/shared/truncation_strategies.py | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/askui/models/shared/truncation_strategies.py b/src/askui/models/shared/truncation_strategies.py index 421bfa83..3e06e603 100644 --- a/src/askui/models/shared/truncation_strategies.py +++ b/src/askui/models/shared/truncation_strategies.py @@ -21,11 +21,11 @@ from askui.models.shared.token_counter import SimpleTokenCounter from askui.models.shared.tools import ToolCollection from askui.prompts.truncation import SUMMARIZE_INSTRUCTION_PROMPT +from askui.reporting import Reporter if TYPE_CHECKING: from askui.callbacks.conversation_callback import ConversationCallback from askui.models.shared.conversation import Conversation - from askui.reporting import Reporter logger = logging.getLogger(__name__) @@ -81,6 +81,7 @@ def _summarize_message_history( system: SystemPrompt | None = None, tools: ToolCollection | None = None, provider_options: dict[str, Any] | None = None, + reporter: Reporter | None = None, ) -> MessageParam: """Ask the VLM to summarize the conversation history. @@ -99,6 +100,7 @@ def _summarize_message_history( Required for cache hits on the prefix. provider_options: Provider-specific options (e.g. ``betas``) used by the regular conversation calls. + reporter: Reporter to log errors during summarization to Returns: The raw VLM response message. @@ -121,13 +123,21 @@ def _summarize_message_history( ) ) - return vlm_provider.create_message( - messages=messages_to_summarize, - max_tokens=2048, - system=system, - tools=tools, - provider_options=provider_options, - ) + try: + return vlm_provider.create_message( + messages=messages_to_summarize, + max_tokens=2048, + system=system, + tools=tools, + provider_options=provider_options, + ) + except Exception as e: + # catch e.g. BadRequestError + if reporter: + reporter.add_message( + "TruncationStrategy", f"Truncation Failed with error: {e}" + ) + raise def _extract_summary_text(response: MessageParam) -> str: @@ -405,6 +415,7 @@ def truncate(self) -> None: system=system, tools=tools, provider_options=provider_options, + reporter=self.reporter, ) if self.reporter: self.reporter.add_message( @@ -731,6 +742,7 @@ def truncate(self) -> None: system=system, tools=tools, provider_options=provider_options, + reporter=self.reporter, ) if self.reporter: self.reporter.add_message( From 9589a610ffdc5ae4c8644df149b209e94b3ad6ae Mon Sep 17 00:00:00 2001 From: philipph-askui Date: Tue, 12 May 2026 12:33:53 +0200 Subject: [PATCH 3/3] feat: add logging message if truncation fails --- src/askui/models/shared/truncation_strategies.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/askui/models/shared/truncation_strategies.py b/src/askui/models/shared/truncation_strategies.py index 3e06e603..b6bbc726 100644 --- a/src/askui/models/shared/truncation_strategies.py +++ b/src/askui/models/shared/truncation_strategies.py @@ -133,10 +133,10 @@ def _summarize_message_history( ) except Exception as e: # catch e.g. BadRequestError + error_msg = f"Truncation Failed with error: {e}" + logger.exception(error_msg) if reporter: - reporter.add_message( - "TruncationStrategy", f"Truncation Failed with error: {e}" - ) + reporter.add_message("TruncationStrategy", error_msg) raise